Archive | 4 月, 2015

Tags: , , ,

VBA宏命令:批量检索替换/修改word中指定多个关键词的格式内容等

Posted on 11 4 月 2015 by simon

最近帮别人做一个词性词频统计工具,顺便又有一个小需求:需要在word中设置个宏命令,用来根据本地指定txt(如word.txt)中的多个词语,检索word中所有出现的词语,宏命令需要对这些词加粗/颜色/背景色或者替换成其它内容,突出高亮显示该词。打开word后,只需要按一下快捷键即可自动执行操作。

宏命令简介:即在office中可以进行批量辅助操作的工具,可通过自带的vba编写。其优点是可视化操作、不需要另外开发软件来进行一些小型且有逻辑性的批量处理需求,比较小巧方便。(不是每个需求都要搞个软件出来,效率易用很重要)

当然宏命令有缺点,功能没有一般编程语言那么强大,且因为是vb语法,写起来很dt,而且自动补全竟然还和搜狗输入法冲突,只能通过点击菜单来自动补全,对新手来说,完全没有pycharm中的流畅感。。。还好学习成本不高,研究一会儿大致就能鼓捣个功能出来。

VBA其实并不复杂,门槛比较低,刚接触这块可能会比较陌生,推荐下我的快速学习方法,直接在word中录制宏,随便执行几个操作,然后在vba里查看脚本的代码,分析一下语法,需要什么功能谷歌一下不要用百度,找找差不多代码了解下原理基本就OK了。

好了,脚本如下,有此类需求的可以拿去直接修改修改就能用了。

脚本说明:其中ActiveDocument.Path是获取doc所在的当前目录;word.txt为存放待查找的词语文件(格式为一行一个);fso为创建的对象,nr为读取txt的文本内容,vbCrLf为vb里规定的回车符+换行符,arr为词语的数组形式,UBound是取数组最大下标,玩过按键精灵的可能比较熟悉,通过arr(i)来定位每一个元素,之后执行一个for循环,设定待查找文本.Text = arr(i),wdReplaceAll全部替换成另外的格式,Selection.Find.Replacement.Font里各参数表示替换后的格式,可以是各种姿势以达到你的需求。

使用方法:直接复制到你的宏命令里,然后在word的自定义功能里,给这个宏添加个快捷键,这样就可以通过快捷键自动执行了。

我这里衍生一下,这个脚本可以衍生成一个文章的“伪原创”工具,比如同义词批量替换,反义词替换等等,只需要设定好要替换的内容。

好了,废话太多了,周末愉快~


Sub 宏1()
'
' 宏1 宏
'
'
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.opentextfile(ActiveDocument.Path + "\word.txt") '打开文件流
nr = f.readall
arr = Split(nr, vbCrLf) '分割数组

 Selection.Find.ClearFormatting
 Selection.Find.Replacement.ClearFormatting
 With Selection.Find.Replacement.Font
 .Bold = True
 .Color = wdColorRed
 End With

Dim i As Long
For i = 0 To UBound(arr)
 With Selection.Find
 .Text = arr(i)
 .Replacement.Text = ""
 .Forward = True
 .Wrap = wdFindContinue
 .Format = True
 .MatchCase = False
 .MatchWholeWord = False
 .MatchByte = True
 .MatchWildcards = False
 .MatchSoundsLike = False
 .MatchAllWordForms = False
 End With

Selection.Find.Execute Replace:=wdReplaceAll
Next

Set fso = Nothing
Set f = Nothing

End Sub

Comments (1)

斗牛SEO工具