Word VBA:批量操作操作Word文件——通配符替換
一、網(wǎng)友問題
今天用WordVBA解決一個知乎網(wǎng)友遇到的問題,問題如下圖所述:

問題:網(wǎng)友想要實(shí)現(xiàn)的是把多個Word文檔里的“______”這種連續(xù)下劃線內(nèi)容左右兩邊加上大括號,變成“{_____}”這種形式。
二、解決思路
網(wǎng)友提到了單個文檔用通配符替換解決,最好批量處理(這是標(biāo)準(zhǔn)的辦公自動化問題)。
三、通配符方案和VBA批處理思路
1????通配符替換——對單篇文檔處理該問題
查找:([_]{1,})
替換為:{\1}
勾選【使用通配符】
然后點(diǎn)【全部替換】,即可。替換前后效果如下:


2????VBA批處理
Word VBA處理此問題,只需要遍歷所有文件。打開每個文件,用代碼執(zhí)行上述操作,保存關(guān)閉文檔即可。
為了不懂代碼的朋友能直接操作,這里用到了【FileDialog】對象來選擇文件(可多選),操作會有提示。
我們用【Documents.Open】方法打開【FileDialog】對象獲取的每個文件,下面代碼是對獲取的每個文件進(jìn)行替換操作,然后保存并退出的過程。
? ?For Each 文件名 In 篩選器.SelectedItems
? ? ? ?If Not Right(文件名, Len(文件名) - InStrRev(文件名, ".")) Like "doc*" Then GoTo 1
? ? ? ?Set 文件 = Documents.Open(文件名)
? ? ? ?With 文件.Content.Find
? ? ? ? ? ?.ClearFormatting
? ? ? ? ? ?.MatchWildcards = True
? ? ? ? ? ?.Wrap = wdFindStop
? ? ? ? ? ?.Text = "([_]{1,})" '引號內(nèi)為通配符替換的查找框文本,可根據(jù)需要更改
? ? ? ? ? ?With .Replacement
? ? ? ? ? ? ? ?.ClearFormatting
? ? ? ? ? ? ? ?.Text = "{\1}" ?'引號內(nèi)為通配符替換的替換框文本,可根據(jù)需要更改
? ? ? ? ? ?End With
? ? ? ? ? ?.Execute Replace:=wdReplaceAll
? ? ? ?End With
? ? ? ?文件.Close wdSaveChanges
? ? ? ?Debug.Print 文件名 & " 已處理完成!"
? ? ? ?計數(shù) = 計數(shù) + 1
? ? ? ?Set 文件 = Nothing
1: ?Next
四、批量處理完整代碼
Sub 批量通配符替換_VBA()
? ?Dim 篩選器 As FileDialog, 文件名, 文件 As Document, pd, 計數(shù) As Integer
? ?Set 篩選器 = Application.FileDialog(msoFileDialogFilePicker)
? ?With 篩選器
? ? ? ?.AllowMultiSelect = True
? ? ? ?pd = MsgBox("請選擇需要處理的文件:(可多選)", vbOKCancel + vbInformation, "選擇文件")
? ? ? ?If pd = vbCancel Then
? ? ? ? ? ?MsgBox "選擇已取消,將退出程序!"
? ? ? ? ? ?Exit Sub
? ? ? ?End If
? ? ? ?.Show
? ?End With
? ?For Each 文件名 In 篩選器.SelectedItems
? ? ? ?If Not Right(文件名, Len(文件名) - InStrRev(文件名, ".")) Like "doc*" Then GoTo 1
? ? ? ?Set 文件 = Documents.Open(文件名)
? ? ? ?With 文件.Content.Find
? ? ? ? ? ?.ClearFormatting
? ? ? ? ? ?.MatchWildcards = True
? ? ? ? ? ?.Wrap = wdFindStop
? ? ? ? ? ?.Text = "([_]{1,})" '引號內(nèi)為通配符替換的查找框文本,可根據(jù)需要更改
? ? ? ? ? ?With .Replacement
? ? ? ? ? ? ? ?.ClearFormatting
? ? ? ? ? ? ? ?.Text = "{\1}" ?'引號內(nèi)為通配符替換的替換框文本,可根據(jù)需要更改
? ? ? ? ? ?End With
? ? ? ? ? ?.Execute Replace:=wdReplaceAll
? ? ? ?End With
? ? ? ?文件.Close wdSaveChanges
? ? ? ?Debug.Print 文件名 & " 已處理完成!"
? ? ? ?計數(shù) = 計數(shù) + 1
? ? ? ?Set 文件 = Nothing
1: ?Next
? ?Set 篩選器 = Nothing
? ?MsgBox "已完成!共處理了" & 計數(shù) & "個文件。"
End Sub
標(biāo)簽: