VBA macro - existe-t-il un moyen de ne trouver que des mots entiers?

-2

Comment puis-je modifier ce code pour ne trouver que des mots entiers? Actuellement, il recherche n'importe quelle instance du mot. En outre, comment supprimer le message ou le laisser sélectionner automatiquement "Oui". C'est une macro que j'essaie de faire fonctionner dans Microsoft Word en fonction de Rechercher et remplacer.

Sub ReplaceFromTableList()
Dim oChanges As Document, oDoc As Document
Dim oTable As Table
Dim oRng As Range
Dim rFindText As Range, rReplacement As Range
Dim i As Long
Dim sFname As String
Dim sAsk As String
    sFname = "C:\Users\tmoore\Desktop\Changes_Comps.docx"
    Set oDoc = ActiveDocument
    Set oChanges = Documents.Open(FileName:=sFname, Visible:=False)
    Set oTable = oChanges.Tables(1)
    For i = 1 To oTable.Rows.Count
    Set oRng = oDoc.Range
    Set rFindText = oTable.Cell(i, 1).Range
    rFindText.End = rFindText.End - 1
    Set rReplacement = oTable.Cell(i, 2).Range
    rReplacement.End = rReplacement.End - 1
    With oRng.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        Do While .Execute(findText:=rFindText, _
                          MatchWholeWord:=True, _
                          MatchWildcards:=False, _
                          Forward:=True, _
                          Wrap:=wdFindStop) = True
            oRng.Select
            sAsk = MsgBox("Replace - " & vbCr & oRng & vbCr + vbCr & _
                          "with - " & vbCr & rReplacement, vbYesNo, _
                          "Replace from Table")

            If sAsk = vbYes Then
                oRng.FormattedText = rReplacement.FormattedText
            End If
            oRng.Collapse wdCollapseEnd
        Loop
    End With
  Next i
  oChanges.Close wdDoNotSaveChanges
End Sub
Tyler
la source
Qu'as-tu essayé? Qu'est-ce qui n'a pas fonctionné?
Dave
Bonjour Dave, j'ai essentiellement essayé le code ci-dessus et il a fonctionné, mais il trouve tous les exemples, par exemple, il trouve "chien" lorsque le seul mot que j'essaie de remplacer est "dogme". Ce n'est qu'un exemple et non quelque chose que j'essaie de trouver et de remplacer. Je pensais que le code pourrait être modifié pour ne trouver que des mots entiers?
Tyler
Vous avez décrit le code. Pas ce que vous avez essayé de changer
Dave

Réponses:

1

En guise de réponse rapide, vous pouvez supprimer la boîte de message en supprimant (ou en commentant) la ligne.

sAsk = MsgBox("Replace - " & vbCr & oRng & vbCr + vbCr & _
                      "with - " & vbCr & rReplacement, vbYesNo, _
                      "Replace from Table")

et ensuite changer

If sAsk = vbYes Then
            oRng.FormattedText = rReplacement.FormattedText
        End If

dans

oRng.FormattedText = rReplacement.FormattedText

Mais une meilleure façon de regarder de plus près comment vous utilisez .find. Il y a une .replacement.textpropriété sous .find, que vous pouvez utiliser Replace:=wdReplaceAlllors de l'exécution. En mémoire, l’option "Remplacer tout" signifie que vous n’avez pas à avoir le .find.executedans une boucle.

Je n'ai pas examiné de près le reste de votre code (par exemple, je ne While x=Truepeux que l'être While x), mais je ne vois rien d'évident qui réponde à votre question initiale de ne pas sélectionner le mot entier (vous l'avez déjà MatchWholeWorddéfini).

AJD
la source
Merci pour la réponse de haute qualité, bienvenue dans Superser!
Wizlog