Word VBA:批量操作操作Word文件——通配符替换
一、网友问题
今天用WordVBA解决一个知乎网友遇到的问题,问题如下图所述:

问题:网友想要实现的是把多个Word文档里的“______”这种连续下划线内容左右两边加上大括号,变成“{_____}”这种形式。
二、解决思路
网友提到了单个文档用通配符替换解决,最好批量处理(这是标准的办公自动化问题)。
三、通配符方案和VBA批处理思路
1 通配符替换——对单篇文档处理该问题
查找:([_]{1,})
替换为:{\1}
勾选【使用通配符】
然后点【全部替换】,即可。替换前后效果如下:


2 VBA批处理
Word VBA处理此问题,只需要遍历所有文件。打开每个文件,用代码执行上述操作,保存关闭文档即可。
为了不懂代码的朋友能直接操作,这里用到了【FileDialog】对象来选择文件(可多选),操作会有提示。
我们用【Documents.Open】方法打开【FileDialog】对象获取的每个文件,下面代码是对获取的每个文件进行替换操作,然后保存并退出的过程。
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,})" '引号内为通配符替换的查找框文本,可根据需要更改
With .Replacement
.ClearFormatting
.Text = "{\1}" '引号内为通配符替换的替换框文本,可根据需要更改
End With
.Execute Replace:=wdReplaceAll
End With
文件.Close wdSaveChanges
Debug.Print 文件名 & " 已处理完成!"
计数 = 计数 + 1
Set 文件 = Nothing
1: Next
四、批量处理完整代码
Sub 批量通配符替换_VBA()
Dim 筛选器 As FileDialog, 文件名, 文件 As Document, pd, 计数 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,})" '引号内为通配符替换的查找框文本,可根据需要更改
With .Replacement
.ClearFormatting
.Text = "{\1}" '引号内为通配符替换的替换框文本,可根据需要更改
End With
.Execute Replace:=wdReplaceAll
End With
文件.Close wdSaveChanges
Debug.Print 文件名 & " 已处理完成!"
计数 = 计数 + 1
Set 文件 = Nothing
1: Next
Set 筛选器 = Nothing
MsgBox "已完成!共处理了" & 计数 & "个文件。"
End Sub