Word VBA 查找并继续
Word VBA Find and move on
这是我的问题,
我正在寻找 ":"
并使用 VBA 键入 HTML 代码。下面的代码在相同的 ":"
处循环,并且不会转到下一个,因为我实际上并没有删除它。有什么建议吗?
Dim bFound As Boolean
bFound = True
Set r = ActiveDocument.Content
r.Find.ClearFormatting
Do While bFound
With r.Find
.Text = ":"
.Replacement.Text = ":</b>"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
bFound = .Execute(Replace:=wdReplaceOne, Forward:=True)
End With
If bFound Then
r.Select
Selection.HomeKey Unit:=wdLine
Selection.TypeText Text:="<b>"
Selection.EndKey Unit:=wdLine
Selection.MoveRight
End If
Loop
代码有两个问题,其他方面还不错:
对Wrap
属性使用wdFindContinue
,表示Find会从文件开头重新开始。根据经验,请始终在代码中使用 wdFindStop
。
如果要搜索的内容仍在文档中,则有必要将找到的范围移到该点之外。这可以通过使用 Range.Collapse
来完成。可以把它想象成在有选择时按键盘上的右箭头键:它会将光标放在所选内容之外。
我已经用这两个更改修改了原始代码,另外我还声明了一个 Range
变量。没有此声明的原始代码 运行 表示 Option Explicit
可能不在代码模块的顶部。如果有就更好了...
Sub JumpBeyondFound()
Dim r As Word.Range
Dim bFound As Boolean
bFound = True
Set r = ActiveDocument.content
r.Find.ClearFormatting
Do While bFound
With r.Find
.Text = ":"
.Replacement.Text = ":</b>"
.Forward = True
.wrap = wdFindStop
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
bFound = .Execute(Replace:=wdReplaceOne, Forward:=True)
End With
If bFound Then
r.Select
Selection.HomeKey Unit:=wdLine
Selection.TypeText Text:="<b>"
Selection.EndKey Unit:=wdLine
Selection.MoveRight
r.Collapse wdCollapseEnd
End If
Loop
End Sub
这是我的问题,
我正在寻找 ":"
并使用 VBA 键入 HTML 代码。下面的代码在相同的 ":"
处循环,并且不会转到下一个,因为我实际上并没有删除它。有什么建议吗?
Dim bFound As Boolean
bFound = True
Set r = ActiveDocument.Content
r.Find.ClearFormatting
Do While bFound
With r.Find
.Text = ":"
.Replacement.Text = ":</b>"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
bFound = .Execute(Replace:=wdReplaceOne, Forward:=True)
End With
If bFound Then
r.Select
Selection.HomeKey Unit:=wdLine
Selection.TypeText Text:="<b>"
Selection.EndKey Unit:=wdLine
Selection.MoveRight
End If
Loop
代码有两个问题,其他方面还不错:
对
Wrap
属性使用wdFindContinue
,表示Find会从文件开头重新开始。根据经验,请始终在代码中使用wdFindStop
。如果要搜索的内容仍在文档中,则有必要将找到的范围移到该点之外。这可以通过使用
Range.Collapse
来完成。可以把它想象成在有选择时按键盘上的右箭头键:它会将光标放在所选内容之外。
我已经用这两个更改修改了原始代码,另外我还声明了一个 Range
变量。没有此声明的原始代码 运行 表示 Option Explicit
可能不在代码模块的顶部。如果有就更好了...
Sub JumpBeyondFound()
Dim r As Word.Range
Dim bFound As Boolean
bFound = True
Set r = ActiveDocument.content
r.Find.ClearFormatting
Do While bFound
With r.Find
.Text = ":"
.Replacement.Text = ":</b>"
.Forward = True
.wrap = wdFindStop
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
bFound = .Execute(Replace:=wdReplaceOne, Forward:=True)
End With
If bFound Then
r.Select
Selection.HomeKey Unit:=wdLine
Selection.TypeText Text:="<b>"
Selection.EndKey Unit:=wdLine
Selection.MoveRight
r.Collapse wdCollapseEnd
End If
Loop
End Sub