在日常工作和生活中,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代码(限于篇幅代码请访问