【问题标题】:VBA Microsoft for MSword Macro using a wildcard including a string variableVBA Microsoft for MSword Macro 使用包含字符串变量的通配符
【发布时间】:2017-06-01 14:01:41
【问题描述】:

word VBA 程序员,

问题:在 MS word 中,用户会选择一个字符串(一个或多个单词),假设选择了“word1 word2”。如果有这样一个字符串后跟括号中的引用,即“word1 word2 (234, 21)”,宏将查看整个文档。从用户选择文本的点开始,将添加参考。 我有获取所选文本的代码: 暗淡 Sel 作为选择 暗淡特征作为字符串

Set Sel = Application.Selection
If Sel.Type <> wdSelectionIP Then
    MsgBox Sel.text
End If 
feature=sel.text

(特征是要查找的文本,后跟参考)

括号中文本的通配符是 (*),这意味着括号后面是任何更改,然后是右括号。

我的问题是以下代码不起作用:

With ActiveDocument.Content.Find
 .ClearFormatting
 .text = feature & \(*\)
  With .Replacement
    .ClearFormatting
    .text = feature & \(*\)
    .Font.Color = wdColorRed
  End with 
 .Forward = True
 .Wrap = wdFindContinue
 .Format = True
 .MatchCase = False
 .MatchWholeWord = False
 .MatchWildcards = true
 .MatchSoundsLike = False
 .MatchAllWordForms = False
 .Execute Replace:=wdReplaceAll
End With

我什至无法运行它,因为这条线 .text = 特征 & (*)

变红了,不明白。

这里的问题是如何将变量的内容(用户选择的文本)与通配符结合起来,该通配符会给我该选定文本的实例,后跟括号,包括数字引用。

非常感谢。

【问题讨论】:

    标签: vba ms-word wildcard substitution


    【解决方案1】:

    对于搜索文本使用:

    .text = feature & "\((*)\)"
    

    这里,\( 匹配左括号; (*) 进行“组”匹配(允许您使用将通配符匹配的内容放入替换文本中);并且\) 匹配结束括号。

    对于替换文本使用:

    .text = feature & "(\1)"
    

    这里,( 匹配左括号; \1 返回第一个匹配“组”的内容(通配符拾取的内容);并且) 匹配结束括号。

    希望对您有所帮助。

    【讨论】:

    • 您好。我对自己的问题添加了另一条评论,但在这里可能要容易得多。多谢。有用。可以将找到的 thext 加载到变量中。一旦搜索到的单词知道与通配符匹配的内容,我如何将找到的 xt 放入变量中。非常感谢
    • @JoseBerlines 可以在变量中捕获找到的文本。我的经验有限。基本上我使用Select 来选择感兴趣的文本。然后在设置完所有查找参数后,我使用了Selection.Find.Execute。如果有匹配 Selection.Find.Execute 返回 True 然后您可以使用 foundText=Selection.Text 捕获找到的文本。如果您在网上搜索“word vba find capture found text”之类的内容,您可以获得更多示例。
    【解决方案2】:
    .text = feature & "(*)"
    

    您正在尝试连接一个字符串,您需要将该字符串放在括号中 - 无需在此处转义括号,因为它不是正则表达式。

    【讨论】:

      【解决方案3】:

      xidgel,

      谢谢。这是非常强大的。有用。我的印象是通配符就像另一种语言。很难开始使用它们。

      在任何情况下,我意识到我还需要一种方法来告诉 MS-WORD,从文本中的特定点开始,有必要用括号中的引用来替换括号中的引用而不跟随的特征,换句话说,添加对没有它们的功能的引用,并且只能从我选择的文本中添加。

      Xidgel 代码在真正找到引用所遵循的特征的意义上完美运行。

      在查找文本时:

      .text = feature & "\((*)\)"
      

      我需要在变量中加载对应的字符串

      "\((*)\)"
      

      只需将此变量 dim REF 称为 String 为了能够替代然后

      .text = feature & "[A-z]"
      

      =特征后跟一个字符,即不跟括号

      通过

      feature & Ref
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-19
        • 2022-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-27
        • 2022-08-02
        相关资源
        最近更新 更多