单词VBA:My';查找.替换';命令仅查找查找目标的第一个实例。为什么?
Word VBA:My Find.Replacement命令将仅查找目标的第一个实例。为什么?它不会继续寻找更多的实例 我的例程应该查找具有指定样式的所有文本,并将其替换为其他样式。它只找到第一个实例单词VBA:My';查找.替换';命令仅查找查找目标的第一个实例。为什么?,vba,ms-word,Vba,Ms Word,Word VBA:My Find.Replacement命令将仅查找目标的第一个实例。为什么?它不会继续寻找更多的实例 我的例程应该查找具有指定样式的所有文本,并将其替换为其他样式。它只找到第一个实例 Function ExecReplaceStyle(strSourceStyle As String, strDestinationStyle As String) As Integer On Error GoTo ErrorHandler Dim Rng As Range
Function ExecReplaceStyle(strSourceStyle As String, strDestinationStyle As String) As Integer
On Error GoTo ErrorHandler
Dim Rng As Range
Dim ret As Integer
ExecReplaceStyle = 0
Set Rng = docActiveDoc.Range
Rng.Find.ClearFormatting
Rng.Find.Style = ActiveDocument.Styles(strSourceStyle)
Rng.Find.Replacement.ClearFormatting
Rng.Find.Replacement.Style = ActiveDocument.Styles(strDestinationStyle)
With Rng.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
'Rng.Find.Execute(Replace:=wdReplaceAll)
Rng.Select
Rng.Find.Execute Replace:=wdReplaceAll
ExecReplaceStyle = ret
Exit Function
ErrorHandler:
ExecReplaceStyle = Err.Number
ErrDescription = Err.Description
Resume Next
End Function
试试这个
Function ExecReplaceStyle(strSourceStyle As String, strDestinationStyle As String) As Integer
On Error GoTo ErrorHandler
Dim Rng As Range
Dim ret As Integer
ExecReplaceStyle = 0
Set Rng = ActiveDocument.Range
Const sMsgTitle As String = "find and replace style"
If False = StyleExists(strSourceStyle, ActiveDocument) Then
Call MsgBox("Find style missing : " & strSourceStyle, vbCritical, sMsgTitle)
Exit Function
End If
If False = StyleExists(strDestinationStyle, ActiveDocument) Then
Call MsgBox("Replace style missing : " & strDestinationStyle, vbCritical, sMsgTitle)
Exit Function
End If
With Rng.Find
.ClearFormatting
.Replacement.ClearFormatting
.ClearAllFuzzyOptions
.Text = ""
.Style = strSourceStyle
.Replacement.Text = ""
.Replacement.Style = strDestinationStyle
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Rng.Select: Selection.Collapse wdCollapseStart
Do While Rng.Find.Execute = True
Rng.Style = strDestinationStyle: Rng.Collapse wdCollapseEnd
ExecReplaceStyle = ExecReplaceStyle + 1
If Rng.End = ActiveDocument.Range.End - 1 Or Rng.InRange(ActiveDocument.Bookmarks("\endofdoc").Range) = True Then Exit Do
Loop
Exit Function
ErrorHandler:
ExecReplaceStyle = Err.Number
ErrDescription = Err.Description
Resume Next
End Function
Function StyleExists(sStyleName As String, Optional whDoc As Document = Nothing) As Boolean
Dim dsc As String
On Error GoTo ErrHandler:
StyleExists = True
If whDoc Is Nothing Then Set whDoc = ActiveDocument
dsc = whDoc.Styles(sStyleName).Description
Exit Function
ErrHandler:
StyleExists = False
Err.Clear
End Function
什么是
docActiveDoc
?我将其更改为ActiveDocument
,并在模块顶部添加选项Explicit
,将帮助您避免@sam092提到的拼写错误。您也可以尝试将放入块中。执行Replace:=wdReplaceAll
,虽然我不认为这是问题的直接原因。docActiveDoc是Document类型的变量的名称,该变量存储活动文档的句柄。