【问题标题】:Word 2007 VBA - Making some text BOLD & other ITALICWord 2007 VBA - 使一些文本粗体和其他斜体
【发布时间】:2013-02-08 13:47:00
【问题描述】:

我有以下代码从 Excel 单元格中选择数据并替换我的 Word 文档中的特定文本(就本问题而言,Excel 单元格已被纯文本字符串替换)。

数据“: go to”是常量,那么数据“aaa bbb”可以是任何东西,直到我们到达同样是常量的“of”。那么“of”之后的数据,“ccc ddd eee”可以是任何东西,直到它碰到“-”,这也是恒定的。

是否可以将“aaa bbb”数据BOLD和大写,同时将“ccc ddd eee”数据变成斜体

": 转到 ccc ddd eeeAAA BBB - "

Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "MOTMDIV1"
    .Replacement.Text = ": goes to aaa bbb of ccc ddd eee - "
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = True
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With

Selection.Find.Execute Replace:=wdReplaceAll

【问题讨论】:

    标签: vba formatting ms-word


    【解决方案1】:

    如果您将查找和替换更改为从全部中查找和替换,Word 将突出显示替换的文本,从而允许您更改替换范围的属性。我已经修改了您的代码以突出显示这一点:

    Sub ReplaceAndFormat()
       Dim sConst1 As String, sConst2 As String, sReplaceMent As String
       Dim rRange As Range, rFormat As Range
    
        'Set your constants.  This is where you can read in from Excel or whereever
       sConst1 = "aaa bbb"
        sConst2 = "ccc ddd eee"
    
        'Build the replacement string
        sReplaceMent = ": goes to " & sConst1 & " of " & sConst2 & " - "
    
        'Your replacement code
        Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
           .Text = "MOTMDIV1"
            .Replacement.Text = sReplaceMent
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = True
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceOne
    
           'If we replace one by one Word will select the range after it finds it
            If .Found Then
                'After you've done the replacement, set it to a range so you can format
                Set rRange = Selection.Range
    
               'We know the length of all the strings so we can set the range of the "aaa bbb" etc etc 
               Set rFormat = ActiveDocument.Range(rRange.Start + 10, rRange.Start + 10 + VBA.Len(sConst1))
               'Set the formats for the first part
               rFormat.Font.Bold = True
               rFormat.Font.AllCaps = True
    
               'Repeat for the second part
               Set rFormat = ActiveDocument.Range(rRange.Start + 14 + VBA.Len(sConst1), rRange.Start + 14 + VBA.Len(sConst1) + VBA.Len(sConst2))
               rFormat.Font.Italic = True
           End If
       End With
    End Sub
    

    注意:如果要查找和替换搜索文本的所有实例,则必须像这样遍历文档:Repeating Microsoft Word VBA until no search results found

    【讨论】:

    • 我会在周末看看并尝试一下,我现在不能,因为我已经喝了几瓶啤酒,但感谢 CubeChase ...
    • 别担心,伙计。你知道他们在澳大利亚是怎么说的。 “如果你喝酒和编码,你就是一个该死的白痴”。哦,不用等了,那是关于驾驶的。
    • 对不起,我没有回复你,一直卡在代码的不同部分......没有忘记这个!喝酒和编码是一项不错的工作,我不会皱眉头,我永远不会完成任何事情 ;-) !!!
    • 没问题。它应该是直截了当的,所以希望你可以用啤酒庆祝:)
    • 现在看看,它确实有效,是的,谢谢,但据我所见和理解,它假设原始输入是固定的,它不是......但是,我可以通过在我点击你的代码之前将它分解并将其分配给变量来解决这个问题,所以谢谢你,我应该能够用这个做我想要的:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2019-12-01
    相关资源
    最近更新 更多