【问题标题】:Using functions in VBA in MS Word to find/replace strings from an array在 MS Word 中使用 VBA 中的函数从数组中查找/替换字符串
【发布时间】:2021-08-15 02:56:50
【问题描述】:

我对 VBA 比较陌生,但尝试在 Word 中编写一个简单的函数。该函数将遍历单词列表并在特定上下文中查找/替换每个单词。

假设我有一组术语:

Dim myarray As Variant
myarray = Array("if", "then", "next")

以下是我为查找/替换术语创建宏时创建的 VBA 代码。我在 " 和 VARIABLE " 的每个实例之前添加了一个分节符,并替换为 "^pand VARIABLE "。

    With Selection.Find
        .Text = """ and VARIABLE """
        .Replacement.Text = "^pVARIABLE "
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

我该如何写:

for xx in myarray:
  find:    " and ", xx, " "
  replace: "^pand ", xx, " "

如果你知道 VBA,这似乎很简单,我不知道,所以我正在寻找方向。任何帮助表示赞赏!

编辑:这是应用评论者建议后的工作代码:

Sub ScriptsAnd()
'
' ScriptsAnd Macro
'
'
Dim e

For Each e In Array("if", "then", "next")
    With Selection.Find
        .Text = " and " & e & " "
        .Replacement.Text = "^pand " & e & " "
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceAll
    End With
    Next e
End Sub

【问题讨论】:

    标签: arrays vba function ms-word


    【解决方案1】:

    试试这个:

    Dim e
    
    For Each e in Array("if", "then", "next")
        With Selection.Find
            .Text = """ and " & e & " """
            .Replacement.Text = "^p" & e & " "
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceAll
        End With
    Next e
    

    【讨论】:

    • 嗯,当我将它剪切/粘贴到该宏的子中时,它没有做任何事情。
    • 您发布的代码在Text 参数中嵌入了引号:""" and " & e & " """ 您要查找的字符串是否真的有这些引号?
    • 您也可以尝试用With ActiveDocument.Range 代替With Selection
    • 我认为问题在于我需要用正则表达式/通配符替换 ^p,因为它没有被 find/replace 函数解释。
    • 没关系,我能够修复代码并使其正常工作。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 2019-01-02
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多