欢迎光临散文网 会员登陆 & 注册

Word VBA:批量操作操作Word文件——通配符替换

2021-10-28 00:58 作者:ch_j  | 我要投稿

一、网友问题

今天用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


Word VBA:批量操作操作Word文件——通配符替换的评论 (共 条)

分享到微博请遵守国家法律