2016-09-02 10 views
0

しばらく私はVBAのRegexで作業していましたが、正規表現で異なる値を見つけたり置き換えたり、部分文字列を探して置き換えたりできました。しかし、私が望むのは、Wordのネイティブの検索と置換に似た何らかの処理を行う特定の値を隠すことです。これを行うために正規表現を使用して任意の回り道ですか?VBAでRegexを使用してWordでの一致を非表示にする

Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 
Selection.Find.Replacement.Font.Hidden = True 
Selection.Find.Replacement.Highlight = False 
With Selection.Find 
    .Text = "\<*\>" 
    .Replacement.Text = "" 
    .Forward = True 
    .Wrap = wdFindAsk 
    .Format = True 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchKashida = False 
    .MatchDiacritics = False 
    .MatchAlefHamza = False 
    .MatchControl = False 
    .MatchByte = False 
    .MatchAllWordForms = False 
    .MatchSoundsLike = False 
    .MatchFuzzy = False 
    .MatchWildcards = True 
End With 
Selection.Find.Execute Replace:=wdReplaceAll 

これを正規表現で行いたいと思います。 は、例えば、そのよう:

regEx.Pattern = (\[[^\[]*?\]|<[^<]*?>|^http.*?$) 
regEx.Global = True 
If regEx.Test(strSource) Then 
    Set matches = regEx.Execute(strSource) 
    Selection.Text=matches        
    Selection.Font.Hidden = True 
End If 

アイデアは、選択したテキストに一致する値を割り当てているが、コンテンツのすべての残りの部分を失うことなく、正規表現と一致する値を隠すことができるように。

は、私が(多分、最も効率的ではないが)の方法は、あなたが多くの重複マッチを持っている場合、これは不要なの多くを行うにする2つの方法

Dim rng As Range 
    Dim mtch as Object 
    Set rng = ActiveDocument.Range 'or whatever 

    'set regex values and execute 
    With regEx 
     'your options here 
     .pattern = strPattern 
     Set matches = .Execute(rng.Text) 
    End With 

    'hide matches 
    For Each mtch In matches 
     With rng.Find 
      'your options here 
      .Text = mtch.Value 
      .Replacement.Font.Hidden = True 
      .Execute Replace:=wdReplaceAll 
     End With 
    Next mtch 

を組み合わせることであろう最も簡単だと思い、

答えて

1

をありがとう検索すると、辞書のような重複を排除する方法を見つけなければならないでしょう。

+0

ありがとうございました。非常に有益な答えです。 – TMikonos

+0

あなたは大歓迎です。問題を解決した場合は、それをアップホートおよび/または回答として受け入れることもできます。問題が解決しなかった場合は、理由をいくつか追加してください。 – arcadeprecinct

関連する問題