問題描述
使用 VBA 在 MS Word 表格中查找和替換可變長度文本 (Find & replace variable length text in MS Word tables using VBA)
我有一個很長的 MS Word 文檔,其中包含許多表格,並且許多表格在每個單元格中都隱藏了文本,其中包含諸如“Cell_ID[x,y]”之類的文本字符串。字符串是固定的,除了 X & Y 可以是 1‑1000 範圍內的整數值。
我希望能夠有一個 VBA 宏,它可以以編程方式刪除每個表中該文本字符串的所有出現。如果它是一個固定的字符串,那麼我可以簡單地進行查找和替換,但是由於 X & 的值 Y 可以是不同的長度,字符串的總長度可以變化。包含此字符串的單元格還有其他需要單獨保留的非隱藏文本。
我的代碼可以遍歷文檔中的所有表格,但我不確定如何進行上述查找/替換。
參考解法
方法 1:
You can use a simple wildcard search and replace. The search pattern would look as follows:
Cell_ID\[[0‑9]{1;4},[0‑9]{1;4}\]
or
Cell_ID\[[0‑9]{1,4},[0‑9]{1,4}\]
depending on what is set a your list separator (cf. regional settings). Or you could use an even simpler pattern that would not check whether x and y are digits only:
Cell_ID\[*,*\]
Here is a full VBA sample:
Selection.Find.ClearFormatting
' find hidden text only
Selection.Find.Font.Hidden = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "Cell_ID\[[0‑9]{1;4},[0‑9]{1;4}\]"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
(by Robert、Dirk Vollmar)