我是靠谱客的博主 开放发箍,最近开发中收集的这篇文章主要介绍VBA宏批量处理多个Word文档,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

工作里面需要处理上百个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. 在处理过程中无法冻结屏幕

最后

以上就是开放发箍为你收集整理的VBA宏批量处理多个Word文档的全部内容,希望文章能够帮你解决VBA宏批量处理多个Word文档所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部