用VBA宏提高Word操作效率.docx
- 文档编号:24629188
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:27
- 大小:848.25KB
用VBA宏提高Word操作效率.docx
《用VBA宏提高Word操作效率.docx》由会员分享,可在线阅读,更多相关《用VBA宏提高Word操作效率.docx(27页珍藏版)》请在冰豆网上搜索。
用VBA宏提高Word操作效率
在日常工作和生活中,Word是我们习惯使用的办公软件,很多时候为了某些“变态”的要求,往往需要通过大量繁复的步骤进行操作,效率相当之低。
其实,利用VBA宏代码,可以大大提高工作效率,本文以Word2003/2007这两个应用最为广泛的版本为例,介绍一些比较典型的应用实例。
实例1:
统计修订的字数
在实际工作中,我们经常会对文档进行修改,为了不同用户查阅的方便,一般都会使用修订模式,此时会在文档中清楚的显示出来,但增加的字数和删除的字数却并未被统计出来。
难道只能手工统计?
利用VBA宏代码,可以非常方便的统计出修订过程中增加的字数和删除的字数,具体代码如下:
Subtest()
DimRevAsRevision,c1AsLong,n1AsInteger,aAsString
DimWdAsRange,c2AsLong,n2AsInteger,bAsString
ForEachRevInActiveDocument.Revisions
IfRev.Type=wdRevisionInsertThen
ForEachWdInRev.Range.Words
c1=c1+IIf(WdLike"[一-龥]*",Wd.Characters.Count,1)
Next
n1=n1+1
a=a&Rev.Range.text&vbTab
ElseIfRev.Type=wdRevisionDeleteThen
ForEachWdInRev.Range.Words
c2=c2+IIf(WdLike"[一-龥]*",Wd.Characters.Count,1)
Next
n2=n2+1
b=b&Rev.Range.text&vbTab
EndIf
Next
MsgBox"增加内容"&n1&"处共"&c1&"字;删除内容"&
n2&"处共"&c2&"字。
"
EndSub
上述代码主要是基于Word2007对于Words集合对象的判断进行统计,宏名称“test”可以任意取;“[一-龥]”表示所有中文汉字。
代码检查无误之后,单击工具栏上的“保存”按钮执行保存操作,返回Word窗口之后,按下Alt+F8组合键,打开“宏”对话框,选择列表框中的“test”,单击右侧的“运行”按钮,很快会看到准确的结果,包括增加和删除共几种、多少字,这样就清晰多了。
实例2:
快速提取脚注内容
同事传过来一个文件,要求将脚注的内容提取出来,文档如下图所示,其中作了几处脚注,现在要求将脚注的内容提取到正文中相应脚注编号的位置,在这里添加标记(JZ:
*),此处的“*”指脚注的内容(不含序号,如此文①和②),同时删除原来的编号。
如果通过手工的方法进行操作,既麻烦也不方便,其实这里可以利用VBA代码解决这一问题,代码如下:
Subtest()
DimoFootNoteAsFootnote,myRangeAsRange
DimBeforeNameAsString,BeforeSizeAsSingle
OnErrorResumeNext
Application.ScreenUpdating=False
ForEachoFootNoteInActiveDocument.Footnotes
WithoFootNote
SetmyRange=ActiveDocument.Range(.Reference.Start,.Reference.End)
.Range.Copy
WithmyRange
.Text="(JZ:
)"
BeforeName=.Font.Name
BeforeSize=.Font.Size
myRange.SetRange.Start+4,.Start+4
.Paste
.Font.Name=BeforeName
.Font.Size=BeforeSize
EndWith
EndWith
Next
Application.ScreenUpdating=True
EndSub
如果需要重新设置标记,可以对“.Text="(JZ:
)"”这一行进行更改;“BeforeName=.Font.Name”这一行是取得之前的字号大小,“.Font.Name=BeforeName”和“.Font.Size=BeforeSize”分别用来重新设置字体和字号。
检查无误后,单击工具栏上的“保存”按钮,依次执行“文件→关闭并返回到MicrosoftWord”命令,返回Word窗口,然后“运行”该宏命令,你就可以看到最终结果了。
实例3:
从任意页面编排页码
很多时候,我们在使用Word编排文档时,经常需要从文档的某个页面开始显示页码,而不是从文档的第1页显示页码。
对于比较熟悉Word的朋友来说,这只是个简单的问题:
先分节,然后断开节链接,最后在节中插入重新编号的页码即可。
但是对于不经常使用Word的朋友来说,要快速、顺利完成这几个操作并非易事。
其实,我们也可以借助VBA宏解决这一问题,而且操作更为简单。
打开目标文档,按下Alt+F11组合键,打开MicrosoftVisualBasic编辑器窗口,双击左侧目标文档文
件名下的ThisDocument,粘贴如下代码:
Subtest()
DimpAsInteger
OnErrorResumeNext
p=InputBox("请输入起始编排页码的页次")
WithSelection
.GoToWhat:
=wdGoToPage,Count:
=p
.InsertBreakType:
=wdSectionBreakContinuous
.Sections
(1).Footers
(1).LinkToPrevious=False
With.Sections
(1).Footers
(1).PageNumbers
.RestartNumberingAtSection=True
.StartingNumber=1
.AddPageNumberAlignment:
=wdAlignPageNumberCenter,FirstPage:
=True
EndWith
EndWith
EndSub
检查无误之后,按下Ctrl+S组合键执行保存操作,依次执行“文件→关闭并返回到MicrosoftWord”命令,然后按F5键运行VBA宏,按照提示输入起始编码页码的数字,例如“3”,确认之后关闭对话框。
实例4:
将多页文档分解成单页文档
由于工作的需要,现在要求将多页的Word文档按照每个页面单独存储为1个Word文档,除了枯燥的剪切、粘贴之外,也可以利用VBA宏解决这一困难。
首先请打开相应的多页Word文档,打开MicrosoftVisualBasic编辑器窗口,在右侧窗格中插入一个新的空白模块,手工粘贴如下代码:
Subtest()
myPath="H:
\temp\"
Selection.HomeKeyUnit:
=wdStory
SetmyRange=Selection.Range
curpage=0
Application.ScreenUpdating=False
Do
prepage=curpage
pagenum=pagenum+1
SetmyRange=myRange.GoToNext(What:
=wdGoToPage)
curpage=myRange.Start
endpage=myRange.Previous.Start
Ifcurpage=prepageThen_
endpage=ActiveDocument.Content.End
ActiveDocument.Range(prepage,endpage).Copy
WithDocuments.Add
.Content.Paste
.SaveAsmyPath&"Page"&pagenum&".doc"
.Close
EndWith
Ifcurpage=prepageThenExitDo
Loop
Application.ScreenUpdating=True
EndSub
上述代码中的“H:
\temp\”表示存储单页文档的位置,请根据实际情况而定,检查无误之后保存代码并返回Word界面。
按下Alt+F8组合键,选中列表框中的“test”宏,单击右侧的“运行”按钮,稍等片刻即可将当前的多页Word文档按照页面快速分割存储为一个一个的Word文档,是不是很方便?
需要指出的是,如果没有选择内容,那么VBA宏会针对当前文档的所有页面进行自动分割,如果选定页面,那么就只会针对当前选定的页面进行分割。
实例5:
快速更新参考文献编号
朋友小张最近正在做毕业设计,毕业论文中涉及参考文献的标注,现在需要增加2个参考文献,但由于小张是将正文和参考文献分别放在两个文档中,而且是将参考文献手工复制到正文的末尾,也就是说没有使用正规的操作方式,这样就会导致编号无法更新。
更麻烦的是,这里并不能使用“查找和替换”的功能,但如果针对这些逐个手工替换,显然既麻烦而且也容易出错。
其实,这里可以使用VBA宏代码实现这一要求,粘贴实例5代码(限于篇幅代码请访问rd窗口,按下Alt+F8组合键,打开“宏”对话框,选中列表框中的“Test”宏,单击右侧的“运行”按钮即可。
当然,建议以后还是通过“插入→尾注”的方法进行操作,这样可以省去不少麻烦事。
实例6:
快转大纲级别并自动提取目录
同事转过来一份发言稿,这里采用了中文文稿中习惯的大纲级别,这样自然也就无法直接提取目录,如下图所示,这里需要将文档中以“一、”、“1.”、“
(1)”开头的段落设置相应级别的标题样式,也就是说分别将其转换为1、2、3级,不过如果纯粹依靠手工操作的话,既繁琐而且也容易出错。
有没有简单一些的方法呢?
借助VBA宏代码可以解决这一问题,操作也并不复杂,具体步骤如下:
第一步:
打开MicrosoftVisualBasic编辑器窗口,在右侧窗格插入一个空白模块,粘贴实例6代码(访问
第二步:
转换大纲级别上述代码先将所有手动换行符替换为段落标记,并自动删除段前、段后的空格,再将“一、”设置为一级标题,将“1.”设置为二级标题,将“
(1)”设置为三级标题。
检查无误之后,单击工具栏上的“保存”按钮执行保存操作,依次执行“文件→关闭并返回到MicrosoftWord”,返回Word窗口之后,按下Alt+F8组合键,打开“宏”对话框,选中列表框中的“test”宏,单击右侧的“运行”按钮,稍等片刻,即可完成大纲列表的自动转换。
第三步:
提取目录按下Ctrl+Home组合键,在文档首页插入一个空白页面,这个空白页面主要是用来插入目录。
切换到“引用”选项卡,单击“目录”功能组中的“目录”按钮,从下拉菜单中选择“插入目录”,此时会弹出“目录”对话框,直接确认之后即可自动提取目录。
实例7:
完成虚框→实框的批量转换
不知是什么原因,某个Word文档中的实框变成了虚框,看起来很不顺眼。
最简单的方法是选中整个表格,打开“表格属性”对话框,单击“边框和底纹”按钮,打开“边框和底纹”对话框,在这里可以按照自己的需要设置虚框或实框,但如果文档中类似的虚框表格数量极多⋯⋯
可以通过VBA代码解决这一问题,输入如下代码:
Subexample()
Application.ScreenUpdating=False
WithApplication.FileSearch
.LookIn="h:
\Downloads\".FileType=msoFileTypeWordDocuments
If.Execute>0Then
Fori=1To.FoundFiles.Count
SetmyDoc=Documents.Open(FileName:
=.FoundFiles(i),Visible:
=False)
ForEachtInmyDoc.Tables
t.Style="网格型"
Next
myDoc.CloseTrue
Next
EndIf
EndWith
Application.ScreenUpdating=True
EndSub
上述代码中的“example”是宏的名称,当然你可以任意命名,“.LookIn="h:
\Downloads\"”请更改为实际的路径。
检查无误之后,单击工具栏上的“保存”按钮执行保存操作,依次执行“文件→关闭并返回到MicrosoftWord”,返回Word窗口之后,按下Alt+F8组合键,此时会弹出“宏”对话框,选中列表框中的“example”宏,单击右侧的“运行”按钮就可以了。
实例8:
批量实现缩放打印
在实际工作中,由于纸张的原因,我们往往需要利用Word的“按纸张大小缩放”功能,在不更改页面设置的情况下,实现文档的完美打印。
但如果需要对某个文件夹下的多个Word文档进行缩放打印,难道只能逐个进行?
其实,我们可以利用VBA宏代码批量实现缩放打印,操作也并不复杂。
以Word2007为例,考虑将A4纸面的文档缩放为16开纸进行打印,可以按照如下步骤进行操作:
第一步:
按下Alt+F11组合键,打开MicrosoftVisualBasic编辑器窗口,依次执行“插入→模块”,在右侧窗格中插入一个空白模块,粘贴如下代码:
Subtest()
Application.ScreenUpdating=False
WithApplication.FileSearch
.LookIn="h:
\Downloads\temp5\"
.FileType=msoFileTypeWordDocuments
If.Execute>0Then
Fori=1To.FoundFiles.Count
Documents.OpenFileName:
=.FoundFiles(i)
ActiveDocument.PrintOutPrintZoomPaperWidth:
=10433,
PrintZoomPaperHeight:
=14742
ActiveDocument.CloseFalse
Nexti
EndIf
EndWith
Application.ScreenUpdating=True
EndSub
需要指出的是,上述代码中的名称“test”可以任意定制,“.LookIn="h:
\Downloads\temp5\"”的文件夹路径请根据实际情况进行设置。
值得注意的是“PrintZoomPaperWidth”和“PrintZoomPaperHeight”后面的数字,前者表示Word将打印页面缩放到的宽度,后者表示Word将打印页面缩放到的高度,两者均以缇(Twip)为单位,20缇为1磅,72磅为1英寸。
16开纸张的宽度为521.65磅,高度为737.1磅,换算成缇正好分别是10433缇、14742缇。
如果需要缩放为其他的纸张大小,可以按照这一方法进行换算,当然请事先打开“选项→常规”对话框,将度量单位由默认的“厘米”设置为“磅”。
检查无误之后,单击工具栏上的“保存”按钮执行保存操作,接下来依次执行“文件→关闭并返回到MicrosoftWord”,返回Word窗口之后,按下Alt+F8组合键,打开“宏”对话框,选择列表框中的“test”宏,单击右侧的“运行”按钮,然后的事情嘛,耐心等待片刻即可完成文档的批量缩放打印。
实例9:
判断图片属性
很多时候,我们都需要在Word文档中插入一些图片,默认设置下都是会以嵌入型的方式插入,但可能会被某些用户更改此默认设置,可以右击图片打开“设置图片格式”对话框,在这里可以查看到该图片的详细信息,但显然是不太方便,而且也不直观。
其实,我们可以借助VBA宏代码快速判断图片属性,方法也并不复杂,具体代码如实例9(访问
运行宏之后,很快就可以显示图所示的结果,这里可以查看到图片的插入模式、图片的宽和高等信息。
如果需要判断图片究竟是衬于文字下方,或者是浮于文字上方,可以在上述代码的“EndSub”前面添加下述内容,
ActiveDocument.Shapes
(1).Select
WithDialogs(wdDialogFormatDrawingObject)
MsgBoxCStr(.Wrap)
EndWith
运行宏之后会在弹出上述对话框的同时,接下来弹出上图所示的对话框,这里的“5”表示衬于文字下方,如果显示为“6”则表示浮于文字上方。
实例10:
利用文本文件和VBA完成批量替换
在实际工作中,我们经常需要对Word文档中的某些字符串进行替换,如果每次都借助“查找和替换→替换”进行操作的话,既麻烦而且也容易出错。
当然,我们可以通过VBA宏完成批量替换,但如果每次替换的内容不一样,就需要更改源代码,确实也是比较繁琐。
其实,我们可以针对经常需要替换的字符串创建相应的文本文件,然后在VBA宏代码中调用这个文本文件,如果替换的内容发生变化,我们就不需要重写VBA宏代码,而是只需要针对这个文本文件进行更改,无疑是方便许多。
具体步骤如下:
第一步:
针对下图所示的文档,打开记事本,写入需要替换的原字符串和新字符串,格式如下所示,完成之后创建一个名为k:
\Documents\test.txt的文本文件:
图象→图像
帐户→账户
AAA→
ChrW(2229)→∩
沙洲→张家港市上述文本中,“→”前面的内容表示需要替换的原字符串,“→”后面的内容表示替换之后的新字符串;“AAA→”后面的内容为空,表示删除“AAA”;“ChrW(2229)”的内容比较有趣,“ChrW”表示返回该代码所对应的Unicode字符,字符为英文或汉字,这里自然是返回“∩”这个符号,相关符号的Unicode编码可以在Word的“符号”窗口中查阅。
第二步:
按下Alt+F11组合键,打开MicrosoftVisualBasic编辑器窗口,依次执行“插入→模块”,在右侧窗格中插入一个空白的模块,手工写入实例10代码。
第三步:
单击工具栏上的“保存”按钮,将刚才写入的宏代码保存下来,按下Alt+Q组合键返回Word窗口之后,按下Alt+F8组合键,打开“宏”对话框,选中列表框中的“Replace”宏,单击右侧的“运行”按钮。
基于上述原理,以后如果替换的内容发生变化,我们只需要针对test.txt文件进行编辑,而不需要更改VBA宏代码,这样就方便多了。
实例11:
对文档内容进行顺序排列
手头有一个文档,其中有许多格式相似的消息,现在希望对这些内容按照日期进行重新整理,也就是说将日期在前面的消息也放在前面,由于实际文档的内容相当之多,如果通过手工的方法进行操作,工作量可想而知。
有没有简单一些的批量处理方法呢?
利用VBA可以实现这一要求,具体代码如下:
Submacro1()
Dims()AsString,tempAsString,iAsLong
VBAs=Split(ActiveDocument.Content,Chr(13)&Chr(13))
Fori=0ToUBound(s)\2
temp=s(i)
s(i)=s(UBound(s)-i)
s(UBound(s)-i)=temp
Next
Documents.Add
ActiveDocument.Content.Text=Join(s,Chr(13)&Chr(13))
EndSub
运行宏,稍等片刻,Word会在一个新文档窗口中给出经过整理之后的内容,这里可以清楚的看到文档中的消息已经按照我们的要求进行排列。
实例12:
替换Word文档插图的超链接
最近,从网络上抓取了一份考试卷,其中有许多插图,按住Ctrl键单击之后可以访问所设定的链接。
不过,这里所链接到的网页看起来似乎很有问题,现在希望将这些链接地址进行重新设置,但如果逐一右击打开“编辑超链接”对话框进行修改,显然是相当的麻烦。
其实,我们可以利用VBA完成这个批量修改超链接的任务。
具体步骤如下:
第一步:
编辑VBA代码
经过检查之后发现,这份考试卷中的插图的版式并不相同,其中有一些图片采取了默认的“嵌入型”环绕方式,因此需要首先将其中的嵌入型图片更改为其他的环绕方式。
虽然可以逐一手工更改,但显然效率不高。
打开MicrosoftVisualBasic编辑器窗口,输入实例12代码(访问
第二步:
选择图片版式
单击工具栏上的“保存”按钮,然后执行“文件→关闭并返回到MicrosoftWord”,按下Alt+F8组合键,单击右侧的“运行”按钮,此时会弹出一个对话框,单击“是(Y)”按钮,随后会看到一个对话框,根据自己的需要输入相应的数字,确认之后即可将文档中的图片更改为所对应的版式。
第三步:
编辑替换超链接的VBA代码
仍然打开MicrosoftVisualBasic编辑器窗口,依次执行“插入→模块”,在右侧窗格中手工插入一个新的空白模块,粘贴如下代码:
Subtext()
n=0
ForEachsInActiveDocument.Shapes
s.Select
ActiveDocument.Hyperlinks.AddAnchor:
=Selection.ShapeRange,_
Address:
=""
n=n+1
Next
MsgBox"共替换"&n&"个图片!
"
EndSub
上述代码中的“text”名称和“”的内容可以根据需要任意更改。
第四步:
替换超链接
检查无误之后,按下Ctrl+S组合键保存代码,接下来依次执行“文件→关闭并返回到MicrosoftWord”,返回Word窗口之后,按下Alt+F8组合键,选中列表框中的“text”宏,单击右侧的“运行”按钮即可看到效果。
至于页眉和末尾的超链接内容,直接手工替换即可。
实例13:
快速实现括号的右对齐
同事小秦出了一份试卷,其中有许多是属于客观题的选择题,但由于输入的问题,相应的括号都跟在文字的后面,现在她希望这些括号能够在页面的最右边对齐,但如果逐题敲入空格键实现右对齐,既麻烦而且也不便于后期的调整,有没有更简单一些的方法呢?
利用VBA宏代码来实现这一任务,具体代码如下:
Sub括号右对齐()
DimmyRangeAs
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VBA 提高 Word 操作 效率