【问题标题】:VBA find-replace macro for MSWord 2013MSWord 2013 的 VBA 查找替换宏
【发布时间】:2017-02-01 18:31:41
【问题描述】:

我进行了一些谷歌搜索,但无法找到一种方法来为我的特定需求创建 VBA 宏代码。我想要完成的是通过我粘贴到 Word 中的一些 XML 代码进行宏搜索,找到 <CID>*</CID><FirstName>*</FirstName> 之间的值,提取值,然后用新的元素格式替换它:<FName id="*">*</FName>,其中 * 表示对两个元素标记之间的任何值的通配符搜索。因此,在下面的 XML 代码示例中,我希望宏提取“59”和“John”,删除整个代码并将提取的值转换为新的元素格式:<FName id"59">John</FirstName>。我的代码和 VMBA 宏:

***XML Code***
<CustIDandName>
    <CID>59</CID>
    <FirstName>17</FirstName>
</CustIDandName>

将其更改为&lt;FName id="59"&gt;John&lt;/FName&gt;

***Word VBA Macro Code I have so far...***
    With Selection.Find
        .Text = "\<FirstName\>*\<\/FirstName\>"
        .Replacement.Text = "<FName id="59">John</FName>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    您可以使用 Word 通配符搜索和替换模式来实现此目的:

    查找文本:

    \<CID\>([0-9]*)\</CID\>*\<FirstName\>(*)\</FirstName\>
    

    替换文字:

    <FName id="\1">\2</FirstName>
    

    由于替换文本包含引号,您必须确保禁用用印刷引号自动替换直引号。

    Dim AutoFormatAsYouTypeReplaceQuotes As Boolean
    Dim AutoFormatReplaceQuotes As Boolean
    
    ' remember auto correct options
    AutoFormatAsYouTypeReplaceQuotes = Options.AutoFormatAsYouTypeReplaceQuotes
    AutoFormatReplaceQuotes = Options.AutoFormatReplaceQuotes
    
    ' disable auto correct of quotes
    Options.AutoFormatAsYouTypeReplaceQuotes = False
    Options.AutoFormatReplaceQuotes = False
    
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "\<CID\>([0-9]*)\</CID\>*\<FirstName\>(*)\</FirstName\>"
        .Replacement.Text = "<FName id=""\1"">\2</FirstName>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    

    【讨论】:

    • 谢谢德克!我会试一试,让你知道它是否有效。
    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2020-06-11
    相关资源
    最近更新 更多