【问题标题】:Word VBA macro to bold part of all instances of a specific text stringWord VBA 宏将特定文本字符串的所有实例的部分加粗
【发布时间】:2020-06-28 18:55:02
【问题描述】:

我正在使用以下代码将文本字符串的部分加粗,在这种情况下,单词“Fish”位于单词“Oil”之后的括号中:

Sub ReplaceAndFormat16()
Dim sConst1 As String, sReplaceMent As String
Dim rRange As Range, rFormat As Range
sConst1 = "Fish"
sReplaceMent = "Oil (" & sConst1 & ")"
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
   .Text = "Oil (Fish)"
    .Replacement.Text = sReplaceMent
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = True
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute Replace:=wdReplaceOne
    If .Found Then
        Set rRange = Selection.Range
       Set rFormat = ActiveDocument.Range(rRange.Start + 5, rRange.Start + 5 + VBA.Len(sConst1))
       rFormat.Font.Bold = True
   End If
   End With
End Sub

此代码运行良好,但仅将第一个实例加粗,并且我的文档可能有多达四个需要将格式设置为粗体的短语实例。 如何修改代码,使其继续并加粗文档中的所有实例?我对 VBA 很陌生,如果这看起来是个愚蠢的问题,我深表歉意。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    换行

    .Execute Replace:=wdReplaceOne

    .execute Replace:=wdReplaceAll
    

    编辑

    好的,上面的回答很愚蠢。下面的代码做正确的事

    Sub ReplaceAndFormat16()
    Const myFindStr                      As String = "Oil (Fish)"
    Dim myFindRange                      As Word.Range
    
        Set myFindRange = ActiveDocument.StoryRanges(wdMainTextStory)
    
        Do
            With myFindRange.Find
    
                .ClearFormatting
                .Text = myFindStr
                .Forward = True
                .Wrap = wdFindStop
                .Format = False
                .MatchCase = False 
                .MatchWholeWord = False
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
                .Execute
    
                If .Found Then
                    With myFindRange
                        .MoveStartUntil cset:="fF"
                        .MoveEndUntil cset:="hH", Count:=wdBackward
                        .Font.Bold = True
                        .Collapse Direction:=wdCollapseEnd
                    End With
                Else
                    Exit Sub
                End If
    
            End With
    
        Loop
    
    End Sub
    

    【讨论】:

    • 感谢 Steven - 不幸的是,此更改完全停止了宏的工作。也许还需要其他更改?
    • 你说的很对。我羞愧地低下了头。我已经用符合您要求的代码修改了我的答案。
    • 嗨史蒂文,非常感谢,这确实执行了多重粗体,但随后进入无限循环并最终导致 Word 崩溃。有没有办法限制代码查找的实例数量?
    • 嗨,艾莉森。我的错。将 wdFindContinue 更改为 wdFindStop,一切都应该没问题。
    猜你喜欢
    • 2022-11-24
    • 2014-05-08
    • 1970-01-01
    • 2015-08-31
    • 2011-06-17
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    相关资源
    最近更新 更多