VBA宏批量处理多个Word文档

本文档介绍了如何通过VBA宏来批量处理Word文档,包括开启宏、编写宏的步骤,以及一个具体的批量替换内容的代码示例。在实际应用中,代码存在两个问题:无法处理包含特殊字符的文件名和在处理过程中无法冻结屏幕。尽管如此,该方法为批量操作提供了一个基础框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

工作里面需要处理上百个Word文档,所以就开始在网上查找宏相关的代码
由于第一次接触宏相关的代码,所以写得肯定不会很好。不过,最后勉强算是解决了问题,为了以后方便查找,就把代码贴上来。

 
 

开启、编写宏

在这里插入图片描述
在这里插入图片描述
勾选上图中的开发工具,就可以显示宏相关的菜单栏了
在这里插入图片描述
点击红框内按钮,就可以开始编写和运行宏了

 
 

具体代码

Sub 批量操作WORD()
      Application.ScreenUpdating = False '冻结屏幕,打开各个文件及关闭时屏幕不会晃眼睛,但不知道为什么没有效

    Dim MyFileName, Dic, Did, i, fileCount, startTime, runTime, MyDocumentName
       'On Error Resume Next
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(0, "选择文件夹", 0, 0)
    If Not objFolder Is Nothing Then lj = objFolder.self.path & "\"
    Set objFolder = Nothing
    Set objShell = Nothing
    startTime = Time
    Set Dic = CreateObject("Scripting.Dictionary")    '创建一个字典对象
    Set Did = CreateObject("Scripting.Dictionary")
    Dic.Add (lj), ""
    i = 0 'i变量用来控制循环的结束
    Do While i < Dic.Count
        Ke = Dic.keys   '开始遍历字典
        MyFileName = Dir(Ke(i), vbDirectory)    '查找目录
        Do While MyFileName <> ""
            If MyFileName <> "." And MyFileName <> ".." Then
              If (GetAttr(Ke(i) & MyFileName) And vbDirectory) = vbDirectory Then    '如果是次级目录
                  Dic.Add (Ke(i) & MyFileName & "\"), ""  '就往字典中添加这个次级目录名作为一个条目
              End If
            End If
            MyFileName = Dir    '继续遍历寻找
        Loop
        i = i + 1
    Loop
    For Each Ke In Dic.keys
        MyDocumentName = Dir(Ke & "*.doc*")  '填写所指定的文件类型
        Do While MyDocumentName <> ""
            Did.Add (Ke & MyDocumentName), ""
            MyDocumentName = Dir
        Loop
    Next
    Dim worddoc   As Document
    fileCount = 0

    For Each path In Did
        Set worddoc = Documents.Open(path)
        worddoc.Activate
        Call 处理WORD  '调用宏,换成具体操作word的宏
        worddoc.Close True
        fileCount = fileCount + 1
    Next
    Set worddoc = Nothing
    runTime = Time - startTime
    Application.ScreenUpdating = True '解冻屏幕,让屏幕恢复正常刷新,同样也不知道为什么不起效
    MsgBox Minute(runTime) & "分" & Second(runTime) & "秒" & "内处理了" & Str(fileCount) & "个word文档"
End Sub



Sub 处理WORD()
   Set myRange = ActiveDocument.Content
   '下面就是一些替换操作的代码,可以自行更换为需要的代码
   myRange.Find.Execute FindText:="2020", ReplaceWith:="2021", Replace:=wdReplaceAll
   myRange.Find.Execute FindText:="2日", ReplaceWith:="5日", Replace:=wdReplaceAll
   myRange.Find.Execute FindText:="10日", ReplaceWith:="14日", Replace:=wdReplaceAll
   myRange.Find.Execute FindText:="WB200", ReplaceWith:="WB300", Replace:=wdReplaceAll
End Sub

这段代码并不完善,感觉存在着下面两个问题:

  1. 无法识别有特殊字符的文件名。如果遇到这样的文件就会处理失败。我自己出现这种情况,就会在提示失败时,选择进入调试模块,然后用鼠标放在下面代码处的MyFileName的变量名上查看出现问题的文件名

MyFileName = Dir(Ke(i), vbDirectory) '查找目录

  1. 在处理过程中无法冻结屏幕
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值