2016-09-23 150 views
0

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

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

改变它<FName id="59">John</FName>

***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 

回答

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 
+0

谢谢德克!我会试一试,让你知道它是否有效。 –