2016-09-23 1 views
0

나는 인터넷 검색을 수행했으며 특정 요구 사항에 따라 VBA 매크로 코드를 만들 수있는 방법을 찾지 못했습니다. 달성하고자하는 것은 Word에 붙여 넣는 XML 코드를 통해 매크로를 검색하고 <CID>*</CID><FirstName>*</FirstName> 사이의 값을 찾은 다음 값을 추출한 다음 새 요소 형식으로 바꾸십시오. <FName id="*">*</FName>, *는 와일드 카드를 나타냅니다. 두 요소 태그 사이의 값을 검색하십시오. 그래서 아래 XML 코드 예제에서 "59"와 "John"을 추출하고 전체 코드를 삭제 한 다음 추출 된 값을 새로운 요소 형식 인 <FName id"59">John</FirstName>으로 가져 오도록합니다. 내 코드와 VMBA 매크로 : 그것을 변경MSWord 2013의 VBA 찾기 - 바꾸기 매크로

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

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

<FName id="59">John</FName>에 당신은 워드 와일드 카드 검색을 사용하여이를 패턴 대체 할 수

찾기 텍스트 :

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

Dirk! 나는 이것을 시도해보고 작동하는지 알려 줄 것이다. –