当前位置: 首页 > news >正文

VBA宏查找替换目录下所有Word文档中指定字符串

       原来搞质量管理,要替换质量文件里面所有特定名称或者某一错误时,需要逐一打开所有文件,非常麻烦,所以写了个VBA程序。过了这么多年,突然又要做同样的事情,发现新版本Word不支持其中的Application.FileSearch了,又找不到合适的工具。只能又学习了新的VBA代码,改写了原来的VBA窗体程序。分享给大家参考。

        首先要打开Word内置的宏编辑器,具体怎么操作自己网上搜吧,比较容易,我就不介绍了。打开后建立一个窗体UserForm1,加入控件主要有text1,text2或按钮。名称、标签自己放,自己喜欢写什么就写什么吧。我的是下图这样的。

         我原来写的代码是这样的,如果还有人用旧版的可以参考。在按钮触发事件里写代码如下。

Private Sub CommandButton1_Click()
Dim sPath As String

With Dialogs(wdDialogFileFind)   '设置文本查找对话框
    .SortBy = 2                  '文件按名称排列
    .SearchName = "*.doc"        '只列出word文档
    .Update                      '更新
End With

If Dialogs(wdDialogFileFind).Show = -1 Then             '如果按下打开,就执行
  sPath = Dialogs(wdDialogFileFind).SearchPath         '将查找对话框打开的路径附值给SPath
  Dialogs(wdDialogFileFind).Execute
Else
  Exit Sub            '如果取消或者关闭,就退出
End If

With Application.FileSearch
    .NewSearch
    .LookIn = sPath
    .SearchSubFolders = True
    .FileType = msoFileTypeWordDocuments
    .Execute
For i = 1 To .FoundFiles.Count
  Documents.Open (.FoundFiles(i))
  ActiveDocument.Select
  With Dialogs(wdDialogEditReplace)
  On Error GoTo Err
    .Find = TextBox1.Text
    .Replace = TextBox2.Text
    .ReplaceAll = True
    .Execute
  End With
  ActiveDocument.Save
  ActiveDocument.Close
Next i

End With
Err:
If TextBox1.Text = "" Then
  ActiveDocument.Save
  ActiveDocument.Close
End If
MsgBox "请输入替换查找的字串"

End Sub

          现在新版本的不能用Application.FileSearch,上网找了一下列举目录下文件的VBA代码,改了一下,主要就是用Dir()函数。修改后代码如下:

Private Sub CommandButton1_Click()
Dim sPath As String

With Dialogs(wdDialogFileFind)   '设置文本查找对话框
    .SortBy = 2                  '文件按名称排列
    .SearchName = "*.*"        '列出文档
    .Update                      '更新
End With

If Dialogs(wdDialogFileFind).Show = -1 Then             '如果按下打开,就执行
  sPath = Dialogs(wdDialogFileFind).SearchPath         '将查找对话框打开的路径附值给SPath
  Dialogs(wdDialogFileFind).Execute
Else
  Exit Sub            '如果取消或者关闭,就退出
End If

' 加入反斜杠如果路径字符串里没有
sPath = Trim(sPath)
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"

DirFile = Dir(sPath & "*.*")
Do While DirFile <> ""
  Documents.Open (sPath & DirFile)
  ActiveDocument.Select
  With Dialogs(wdDialogEditReplace)
  On Error GoTo Err
    .Find = TextBox1.Text
    .Replace = TextBox2.Text
    .ReplaceAll = True
    .Execute
  End With
  ActiveDocument.Save
  ActiveDocument.Close
  DirFile = Dir 'next file
Loop

Err:
If TextBox1.Text = "" Then
  ActiveDocument.Save
  ActiveDocument.Close
End If
MsgBox "请输入替换查找的字串"

End Sub


        打开文档要允许执行宏,弹出窗体里输入要查找的字符串、替换的字符串,然后点确定,在弹出的打开文件对话框里找到你的文档所在的目录,点“打开”按钮就会执行查找替换,执行完出错就会跳出MsgBox "请输入替换查找的字串"。这个窗体宏不支持子目录搜索,需要查找替换的文件要放在相同目录下。如果要支持所有子目录,需要复杂一些的代码,我没有这个需要,如果有需要的人自己找找用dir函数历遍子目录的代码吧,需要把文件路径全面找完并存在一个文件路径集合里。

相关文章:

  • VScode 自定义主题各参数解析
  • 记录CMake一键编译和生成的指令
  • Android 主题 vs 样式
  • vscode markdown 使用技巧 -- 如何快速打出一个Tab 或多个空格
  • npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • 阻塞队列.
  • 【PC电脑windows-学习样例generic_gpio-ESP32的GPIO程序-基础样例学习】
  • 3 ALS算法的优化
  • NodeJS回调地狱及Promise优化
  • 【洛谷 P5738】【深基7.例4】歌唱比赛 题解(映射)
  • 并发编程 -常用并发设计模式
  • 面向服务架构-架构师(六十四)
  • react动态插入样式
  • 2024北京老博会/北京智慧养老展/北京养老机构管理系统展会
  • 线扫相机DALSA--采集卡Base模式设置
  • download使用浅析
  • extract-text-webpack-plugin用法
  • flask接收请求并推入栈
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • js递归,无限分级树形折叠菜单
  • NSTimer学习笔记
  • Python - 闭包Closure
  • python3 使用 asyncio 代替线程
  • Python学习之路16-使用API
  • vue.js框架原理浅析
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 测试如何在敏捷团队中工作?
  • 分布式事物理论与实践
  • 搞机器学习要哪些技能
  • ------- 计算机网络基础
  • 开源地图数据可视化库——mapnik
  • 面试总结JavaScript篇
  • 少走弯路,给Java 1~5 年程序员的建议
  • 手写一个CommonJS打包工具(一)
  • 一个完整Java Web项目背后的密码
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 与 ConTeXt MkIV 官方文档的接驳
  • 2017年360最后一道编程题
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #微信小程序(布局、渲染层基础知识)
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (007)XHTML文档之标题——h1~h6
  • (09)Hive——CTE 公共表达式
  • (4) PIVOT 和 UPIVOT 的使用
  • (7)STL算法之交换赋值
  • (C++17) std算法之执行策略 execution
  • (LeetCode C++)盛最多水的容器
  • (二开)Flink 修改源码拓展 SQL 语法
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)四层和七层负载均衡的区别
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil