logo资料库

用VBA宏提高Word操作效率.doc

第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
资料共31页,剩余部分请下载后查看
在日常工作和生活中,Word 是我们习惯使用的办公软件,很多时候为了某些“变态”的要 求,往往需要通过大量繁复的步骤进行操作,效率相当之低。 其实,利用 VBA 宏代码,可以大大提高工作效率,本文以 Word 2003/2007这两个应用最为 广泛的版本为例,介绍一些比较典型的应用实例。 实例1:统计修订的字数 在实际工作中,我们经常会对文档进行修改,为了不同用户查阅的方便,一般都会使用修订模 式,此时会在文档中清楚的显示出来,但增加的字数和删除的字数却并未被统计出来。难道只 能手工统计? 利用 VBA 宏代码,可以非常方便的统计出修订过程中增加的字数和删除的字数,具体代码如 下: Sub test() Dim Rev As Revision, c1 As Long, n1 As Integer, a As String Dim Wd As Range, c2 As Long, n2 As Integer, b As String For Each Rev In ActiveDocument.Revisions If Rev.Type = wdRevisionInsert Then For Each Wd In Rev.Range.Words c1 = c1 + IIf(Wd Like "[一-龥]*", Wd.Characters.Count, 1) Next n1 = n1 + 1 a = a & Rev.Range.text & vbTab ElseIf Rev.Type = wdRevisionDelete Then For Each Wd In Rev.Range.Words c2 = c2 + IIf(Wd Like "[一-龥]*", Wd.Characters.Count, 1) Next n2 = n2 + 1
b = b & Rev.Range.text & vbTab End If Next MsgBox "增加内容" & n1 & "处共" & c1 & "字;删除内容" & n2 & "处共" & c2 & "字。" End Sub 上述代码主要是基于 Word 2007对于 Words 集合对象的判断进行统计,宏名称“test”可 以任意取;“[一-龥]”表示所有中文汉字。 代码检查无误之后,单击工具栏上的“保存”按钮执行保存操作,返回 Word 窗口之后,按 下 A l t+F8组合键,打开“宏”对话框,选择列表框中的“test”,单击右侧的“运行”按 钮,很快会看到准确的结果,包括增加和删除共几种、多少字,这样就清晰多了。 实例2:快速提取脚注内容 同事传过来一个文件,要求将脚注的内容提取出来,文档如下图所示,其中作了几处脚
注,现在要求将脚注的内容提取到正文中相应脚注编号的位置,在这里添加标记(JZ:*),此处 的“*”指脚注的内容(不含序号,如此文①和②),同时删除原来的编号。 如果通过手工的方法进行操作,既麻烦也不方便,其实这里可以利用 VBA 代码解决这一问 题,代码如下: Sub test() Dim oFootNote As Footnote, myRange As Range Dim BeforeName As String, BeforeSize As Single On Error Resume Next Application.ScreenUpdating = False For Each oFootNote In ActiveDocument.Footnotes With oFootNote Set myRange = ActiveDocument.Range(.Reference.Start, .Reference.End) .Range.Copy With myRange .Text = "(JZ: )"
BeforeName = .Font.Name BeforeSize = .Font.Size myRange.SetRange .Start + 4, .Start + 4 .Paste .Font.Name = BeforeName .Font.Size = BeforeSize End With End With Next Application.ScreenUpdating = True End Sub 如果需要重新设置标记,可以对“.Text="(J Z:)" ”这一行进行更改;“BeforeName = .Font.Name”这一行是取得之前的字号大小,“.Font.Name =BeforeName”和“.Font.Size = BeforeSize”分别用来重新设置字体和字号。检查无误后,单击工具栏上的“保存”按钮, 依次执行“文件→关闭并返回到 Microsoft Word”命令,返回 Word 窗口,然后“运行”该宏 命令,你就可以看到最终结果了。 实例3:从任意页面编排页码 很多时候,我们在使用 Word 编排文档时,经常需要从文档的某个页面开始显示页码,而不 是从文档的第1页显示页码。对于比较熟悉 Word 的朋友来说,这只是个简单的问题:先分节, 然后断开节链接,最后在节中插入重新编号的页码即可。但是对于不经常使用 Word 的朋友来 说,要快速、顺利完成这几个操作并非易事。 其实,我们也可以借助 VBA 宏解决这一问题,而且操作更为简单。打开目标文档,按下 Alt+F11组合键,打开 Microsoft Visual Basic 编辑器窗口,双击左侧目标文档文 件名下的 ThisDocument,粘贴如下代码: Sub test() Dim p As Integer
On Error Resume Next p = InputBox("请输入起始编排页码的页次") With Selection .GoTo What:=wdGoToPage, Count:=p .InsertBreak Type:=wdSectionBreakContinuous .Sections(1).Footers(1).LinkToPrevious = False With .Sections(1).Footers(1).PageNumbers .RestartNumberingAtSection = True .StartingNumber = 1 .Add PageNumberAlignment:=wdAlignPageNumberCenter, FirstPage:=True End With End With End Sub 检查无误之后,按下 Ctrl+S 组合键执行保存操作,依次执行“文件→关闭并返回到
Microsoft Word”命令,然后按 F5键运行 VBA 宏,按照提示输入起始编码页码的数字,例如 “3”,确认之后关闭对话框。 实例4:将多页文档分解成单页文档 由于工作的需要,现在要求将多页的 Word 文档按照每个页面单独存储为1个 Word 文档,除了 枯燥的剪切、粘贴之外,也可以利用 V B A 宏解决这一困难。首先请打开相应的多页 Word 文 档,打开 Microsoft Visual Basic 编辑器窗口,在右侧窗格中插入一个新的空白模块,手工 粘贴如下代码: Sub test() myPath = "H:\temp\" Selection.HomeKey Unit:=wdStory Set myRange = Selection.Range curpage = 0 Application.ScreenUpdating = False Do
prepage = curpage pagenum = pagenum + 1 Set myRange = myRange.GoToNext(What:=wdGoToPage) curpage = myRange.Start endpage = myRange.Previous.Start If curpage = prepage Then _ endpage = ActiveDocument.Content.End ActiveDocument.Range(prepage, endpage).Copy With Documents.Add .Content.Paste .SaveAs myPath & "Page" & pagenum & ".doc" .Close End With If curpage = prepage Then Exit Do Loop Application.ScreenUpdating = True End Sub 上述代码中的“H:\temp\”表示存储单页文档的位置,请根据实际情况而定,检查无误之 后保存代码并返回 Word 界面。按下 Alt+F8组合键,选中列表框中的“test”宏,单击右侧的 “运行”按钮,稍等片刻即可将当前的多页 Word 文档按照页面快速分割存储为一个一个的 Word 文档,是不是很方便?需要指出的是,如果没有选择内容,那么 VBA 宏会针对当前文档 的所有页面进行自动分割,如果选定页面,那么就只会针对当前选定的页面进行分割。
实例5:快速更新参考文献编号 朋友小张最近正在做毕业设计,毕业论文中涉及参考文献的标注,现在需要增加2个参考文 献,但由于小张是将正文和参考文献分别放在两个文档中,而且是将参考文献手工复制到正文 的末尾,也就是说没有使用正规的操作方式,这样就会导致编号无法更新。更麻烦的是,这里 并不能使用“查找和替换”的功能,但如果针对这些逐个手工替换,显然既麻烦而且也容易出 错。 其实,这里可以使用 V B A 宏代码实现这一要求,粘贴实例5代码(限于篇幅代码请访问
分享到:
收藏