-2

Как я могу изменить этот код, чтобы найти только целые слова? В настоящее время он ищет любой экземпляр слова. Кроме того, как либо подавить окно сообщения, либо автоматически выбрать "Да". Это макрос, который я пытаюсь заставить работать в Microsoft Word на основе Find and Replace.

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

1 ответ1

1

В качестве быстрого ответа вы можете отключить окно сообщения, удалив (или закомментировав) строку

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.FormattedText = rReplacement.FormattedText

Но лучший способ ближе познакомиться с тем, как вы используете .find . В .replacement.text свойство .replacement.text, и вы можете использовать Replace:=wdReplaceAll при выполнении. Из памяти использование опции "заменить все" означает, что вам не нужно иметь .find.execute в цикле.

Я не внимательно изучил остальную часть вашего кода (например, While x=True может быть просто While x), но я не вижу ничего очевидного, касающегося вашего первоначального вопроса о том, чтобы не выбирать целое слово (у вас уже есть MatchWholeWord задавать).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .