Word VBA查找并继续

Word VBA查找并继续,vba,ms-word,find-replace,Vba,Ms Word,Find Replace,这是我的问题, 我正在寻找:“并用VBA键入HTML代码。下面的代码在同一个:“位置继续循环,并且不会转到下一个位置,因为我实际上并没有删除它。有什么建议吗 Dim bFound As Boolean bFound = True Set r = ActiveDocument.Content r.Find.ClearFormatting Do While bFound With r.Find .Text = ":" .Replacement.Text

这是我的问题, 我正在寻找
:“
并用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
Dim bfind为布尔值
bFound=True
Set r=ActiveDocument.Content
r、 查找.ClearFormatting
找到时就做
与r.Find合作
.Text=“:”
.Replacement.Text=“:”
.Forward=True
.Wrap=wdFindContinue
.Format=False
.MatchCase=True
.MatchWholeWord=False
.MatchWildcards=False
.MatchSoundsLike=False
.MatchAllWordForms=False
bfind=.Execute(Replace:=wdReplaceOne,Forward:=True)
以
如果找到了,那么
r、 挑选
Selection.HomeKey单位:=wdLine
Selection.TypeText文本:=“”
Selection.EndKey单位:=wdLine
选择权
如果结束
环

该代码有两个问题,在其他方面相当不错:

  • 它使用
    wdFindContinue
    作为
    Wrap
    属性,这意味着查找将在文档开头重新启动。根据经验,在代码中始终使用
    wdFindStop

  • 如果要搜索的内容仍保留在文档中,则有必要将找到的范围移到该点之外。这可以通过使用
    Range.Collapse
    来完成。想象一下,当你有一个选择时,按下键盘上的右箭头键:它将光标放在所选内容的正上方

  • 我用这两个更改修改了原始代码,并声明了一个
    Range
    变量。在没有此声明的情况下运行的原始代码表明
    选项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
    
    Sub-JumpBeyondFound()
    变暗r为单词范围
    Dim bfind为布尔值
    bFound=True
    设置r=ActiveDocument.content
    r、 查找.ClearFormatting
    找到时就做
    与r.Find合作
    .Text=“:”
    .Replacement.Text=“:”
    .Forward=True
    .wrap=wdFindStop
    .Format=False
    .MatchCase=True
    .MatchWholeWord=False
    .MatchWildcards=False
    .MatchSoundsLike=False
    .MatchAllWordForms=False
    bfind=.Execute(Replace:=wdReplaceOne,Forward:=True)
    以
    如果找到了,那么
    r、 挑选
    Selection.HomeKey单位:=wdLine
    Selection.TypeText文本:=“”
    Selection.EndKey单位:=wdLine
    选择权
    r、 塌陷
    如果结束
    环
    端接头
    
    为什么不立即全部更换once@feelingunwelcome不,它不是那个的复制品。网站上的某个地方很可能有重复内容,但事实并非如此。@Slai因为OP还想在找到搜索词的行的开头添加内容。经过尝试、测试,效果很好。谢谢你的其他建议。