天天看點

VBA word自動排版(9)——通過互相嵌套的With Selection.Find進行海量替換

在提取資料時,會遇到具有相似格式的内容,例如同一個word文檔中出現了“(C01B35/06優先)”、(C01C11/00優先),(C01C18/00優先)……等,其存在相似的通配符格式,即"\(*優先\)",但如果直接全部替換,又有可能誤删資料。

必須先将所有符合這種格式的資料找出後形成數組,然後進行批量替換,如果手動錄入會非常麻煩,那麼可以用到下述代碼。以下以字元長度L為第二判别條件實作降噪,将需要删除的資料直接篩出,然後進行批量替換

先通過for循環和With Selection.Find 将帶有上述格式的,且字元長度<=20的全部資料存儲在a(0 to 1000)中。

然後在以指派後的a(0 to 1000)作為被替換文本進行批量replace成""即可。

注:如果電腦組態不高,建議将數組a的上限調小,分批次進行,否則電腦會假死。如果假死則可通過CTRL+PAUSE BREAK(num lock 左上的按鈕)暫停

Sub 替換文本()
Dim a(0 To 1000) As String
Dim search As String
Selection.HomeKey Unit:=wdStory
    For i= 1 To UBound(a)
    With Selection.Find
         .Text = "\(*優先\)"
         .Replacement.Text = ""
         .Forward = True
         .Wrap = wdFindStop
         .MatchWildcards = True     '使用通配符
    End With
    Selection.Find.Execute
    search = Selection.Text
    L = Len(Selection.Text)
    If L <= 20 Then
    a(i) = Selection.Text
    End If
Next i

For i = 1 To UBound(a)
  With Selection.Find
     .Text = a(i)
     .Replacement.Text = ""
     .Forward = True
     .Wrap = wdFindContinue
      .MatchWildcards = False    '不使用通配符
 End With
     Selection.Find.Execute Replace:=wdReplaceAll
Next i

End Sub
           

繼續閱讀