2011-09-10 8 views
0

助けてください!MS WordワイルドカードVBAマクロ検索テキスト.docファイル内の二重の中に

私は修正しようとしているMicrosoft Word用のVBAマクロを持っています。 マクロの目的は、二重中括弧{{anything}}の中にあるものにマッチすることですが、中括弧は同じ行で開いて閉じる必要があります。 私は試合が終わると、フォーマット、スタイル、カラーなどの変更を適用し、選択された他のテキストを適用する必要があります。

私が検索する必要がある.docは、テーブルがあり、テキストボックスやその他のオブジェクトを描画します。そのため、ms単語から通常の検索を使いたいのです。

例:私はこの試みた

{{1,000.00}}  match (1) 
{{Interesting}}  match (1) 
{{Within}}   match (1) 
{{1’100.00’}}  match (1) 
**{{01A10}} {{01A10}}** match (2) twice 
{{  1 }} match (1) 
{{10-}}   {{-10}}  match (2) twice 
[[1252}}   No match (0) 
{{8888888.99  No match (0), because close curly braces are in a new line 
}} 
{{}}    match (1) 
{{1’000’000.05}} match (1) 
{{     No match (0) 
}}     No match (0) 

"[{] {2} < *>}]を{2}" が、それは望ましくない結果をもたらす動作しません。 ご協力いただければ幸いです。

Sub GetTotalReport() 
    Dim totalReport As Double 
    Dim placeHolderRep As Variant 
    Dim placeHolder As Variant 

    ActiveDocument.Select 

    totalReport = 0# 
    Selection.Find.ClearFormatting 
    With Selection.Find 
     .Text = "[\{]{2}<*>[\}]{2}" 
     .Replacement.Text = "" 
     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchAllWordForms = False 
     .MatchSoundsLike = False 
     .MatchWildcards = True 
      Do While .Execute 
      With Selection 
       .Font.Italic = True 
       .Font.Bold = True 
       If Not .Text = "" Then 
        placeHolderRep = Mid(.Text, 3, Len(.Text) - 4) 
       .Text = placeHolderRep 
        placeHolder = placeHolderRep 
        placeHolder = Replace(Replace(Replace(placeHolder, ",", ""), "'", ""), "’", "") 
        totalReport = totalReport + Val(placeHolder) 
       End If 
      End With 
     Loop 
    End With 
End Sub 

答えて

1

方法について:

Selection.WholeStory 

Set re = CreateObject("vbscript.regexp") 

p = "\{\{[^\{]*\}\}" 
ary = Split(Selection, vbCr) 

re.Global = True 
re.Pattern = p 

For i = 0 To UBound(ary) 
    Set Matches = re.Execute(ary(i)) 
    Debug.Print ary(i) & ": " & Matches.Count 
Next 

参照:

レンタルは私のコードですhttp://msdn.microsoft.com/en-us/library/ms974570.aspx

+0

Remou、ご提案のためのおかげで、私は私の溶液中で、このコードを使用して、いくつかの問題を参照してください: 1.私が検索しなければならない文書は最大500ページになる可能性があります。配列はその量の行をサポートしないと思います。パフォーマンスは悪くなると思います。 2.私の文書は本当に複雑で、テーブルと描画テキストボックスを持っているので、そのメソッドで選択範囲を分割すると、テーブルやテキストボックスからテキストが得られません。 3.一致したら、フォーマットを変更して、選択したテキストにいくつかの変更を適用する必要があります。そのオプションは私にその変更を与えるものではありません。 –