我如何修改此代码以仅查找整个单词?目前,它会搜索单词的任何实例。此外,如何隐藏消息框或让其自动选择“是”。这是我尝试在基于“查找和替换”的 Microsoft Word 中运行的宏。
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
作为一个快速答案,您可以通过删除(或注释掉)以下行来隐藏消息框
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
。.find 下有一个.replacement.text
属性,您可以Replace:=wdReplaceAll
在执行时使用它。从内存中,使用“全部替换”选项意味着您不必.find.execute
在循环中使用。
我还没有仔细看过你的其余代码(例如,While x=True
可以只是While x
),但我看不到任何明显的东西可以解决你关于不选择整个单词(你已经MatchWholeWord
设置了)的初始问题。