【问题标题】:Word VBA Find text of a certain color and insert a space ahead of itWord VBA 查找某种颜色的文本并在其前面插入一个空格
【发布时间】:2018-03-04 13:22:46
【问题描述】:

我是 MS Word 中的 VBA 的新手,对 Excel 中的 VBA 不太熟悉。

我正在尝试处理一个 Word 文件,该文件包含一些附加到许多单词的特殊信息。信息是通过改变文本的颜色、大小和位置来传达的,但单词和信息之间没有空格。

为了做一些其他的处理,我需要在信息文本和实际单词之间添加一个空格:

使用 VBA,我可以使用与 here 描述的方法略有不同的颜色来查找信息文本。我可以用“测试”代替它。但我想做的是用空格加上信息文本替换它。或者也许只是在信息文本之前神奇地插入一个空格。

想法?

这段代码:

Sub ChangeColorWithReplace()
    Selection.Find.ClearFormatting
    Selection.Find.Font.Color = RGB(120, 48, 191)
    Selection.Find.Replacement.ClearFormatting
    'Selection.Find.Replacement.Font.Color = wdColorRed
    With Selection.Find
        .Text = ""
        .Replacement.Text = "test"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False
        .MatchDiacritics = False
        .MatchAlefHamza = False
        .MatchControl = False
        .MatchByte = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

产生这个结果:

【问题讨论】:

  • 问题的关键在于,使用Find方法,提取实际找到的文本!由于搜索基于字体颜色,因此文本可以是任何内容。一旦从 Find 方法中提取了实际文本,就可以使用一个简单的连接将该文本替换为一个空格加上该文本。不幸的是,我不知道如何提取实际文本...
  • 显示你的代码到现在
  • 代码显示。谢谢。

标签: vba ms-word


【解决方案1】:

Word 的查找/替换功能的一个巧妙之处在于您可以使用特殊字符来执行此类操作。点击“更多”按钮,“特别”查看列表。

在这种情况下,您需要在替换中保留“查找文本”,即字符集:^&,我已将其添加到您的示例代码中,如下所示。

Sub ChangeColorWithReplace()
    Selection.Find.ClearFormatting
    Selection.Find.Font.Color = RGB(120, 48, 191)
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        .Text = ""
        .Replacement.Text = "^&test"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False
        .MatchDiacritics = False
        .MatchAlefHamza = False
        .MatchControl = False
        .MatchByte = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

【讨论】:

  • @diakonos1984 .Replacement.Text 将是 " ^&"^& 是“查找文本”的特殊字符
  • 就是这样!非常感谢,辛迪和@Slai。我知道它一定很简单,只是不知道它是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多