用VBA宏提高Word操作效率

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在日常工作和生活中,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 =
BeforeSize = .Font.Size
myRange.SetRange .Start + 4, .Start + 4
.Paste
= BeforeName
.Font.Size = BeforeSize
End With
End With
Next
Application.ScreenUpdating = True
End Sub
如果需要重新设置标记,可以对“.Text="(J Z:)" ”这一行进行更改;“BeforeName
= ”这一行是取得之前的字号大小,“ =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代码(限于篇幅代码请访问
/special/)。

然后返回Wo rd窗口,按下Al t+F8组合键,打开“宏”对话框,选中列表框中的“Test”宏,单击右侧的“运行”按钮即可。

当然,建议以后还是通过“插入→尾注”的方法进行操作,这样可以省去不少麻烦事。

实例6:快转大纲级别并自动提取目录
同事转过来一份发言稿,这里采用了中文文稿中习惯的大纲级别,这样自然也就无法直接提取目录,如下图所示,这里需要将文档中以“一、”、“1.”、“(1)”开头的段落设置相应级别的标题样式,也就是说分别将其转换为1、2、3级,不过如果纯粹依靠手工操作的话,既繁琐而且也容易出错。

有没有简单一些的方法呢?
借助VBA宏代码可以解决这一问题,操作也并不复杂,具体步骤如下:
第一步:打开Microsoft Visual Basic编辑器窗口,在右侧窗格插入一个空白模块,粘贴实例6代码(访问/special/)。

第二步:转换大纲级别上述代码先将所有手动换行符替换为段落标记,并自动删除段前、段后的空格,再将“一、”设置为一级标题,将“1.”设置为二级标题,将“(1)”设置为三级标
题。

检查无误之后,单击工具栏上的“保存”按钮执行保存操作,依次执行“文件→关闭并返回到MicrosoftWord”,返回Wo rd窗口之后,按下Al t+F8组合键,打开“宏”对话框,选中列表框中的“test”宏,单击右侧的“运行”按钮,稍等片刻,即可完成大纲列表的自动转换。

第三步:提取目录按下Ctrl+Home组合键,在文档首页插入一个空白页面,这个空白页面主要是用来插入目录。

切换到“引用”选项卡,单击“目录”功能组中的“目录”按钮,从下拉菜单中选择“插入目录”,此时会弹出“目录”对话框,直接确认之后即可自动提取目录。

实例7:完成虚框→实框的批量转换
不知是什么原因,某个Word文档中的实框变成了虚框,看起来很不顺眼。

最简单的方法是选中整个表格,打开“表格属性”对话框,单击“边框和底纹”按钮,打开“边框和底纹”对话框,在这里可以按照自己的需要设置虚框或实框,但如果文档中类似的虚框表格数量极多⋯⋯可以通过VBA代码解决这一问题,输入如下代码:
Sub example()
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = "h:\Downloads\".FileType = msoFileTypeWordDocuments
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Set myDoc = Documents.Open(FileName:=.FoundFiles(i), Visible:=False) For Each t In myDoc.Tables
t.Style = "网格型"
Next
myDoc.Close True
Next
End If
End With
Application.ScreenUpdating = True
End Sub
上述代码中的“ex amp le”是宏的名称,当然你可以任意命名,“.LookIn =
"h:\Downloads\"”请更改为实际的路径。

检查无误之后,单击工具栏上的“保存”按钮执行保存操作,依次执行“文件→关闭并返回到Mi crosoftWord”,返回Wo rd窗口之后,按下Al t+F8组合键,此时会弹出“宏”对话框,选中列表框中的“example”宏,单击右侧的“运行”按钮就可以了。

实例8:批量实现缩放打印
在实际工作中,由于纸张的原因,我们往往需要利用Word的“按纸张大小缩放”功能,在不更改页面设置的情况下,实现文档的完美打印。

但如果需要对某个文件夹下的多个Word文档进行缩放打印,难道只能逐个进行?
其实,我们可以利用VBA宏代码批量实现缩放打印,操作也并不复杂。

以Word 2007为例,考虑将A4纸面的文档缩放为16开纸进行打印,可以按照如下步骤进行操作:
第一步:按下Alt+F11组合键,打开Microsoft VisualBasic编辑器窗口,依次执行“插入→模块”,在右侧窗格中插入一个空白模块,粘贴如下代码:
Sub test()
Application.ScreenUpdating = False
With Application.FileSearch
.LookIn = "h:\Downloads\temp5\"
.FileType = msoFileTypeWordDocuments
If .Execute > 0 Then
Fori = 1To.FoundFiles.Count
Documents.Open FileName:=.FoundFiles(i)
ActiveDocument.PrintOutPrintZoomPaperWidth:=10433,
PrintZoomPaperHeight:=14742
ActiveDocument.Close False
Next i
End If
End With
Application.ScreenUpdating = True
End Sub
需要指出的是,上述代码中的名称“test”可以任意定制,“.LookIn = "h:\D own loads\t emp5\"”的文件夹路径请根据实际情况进行设置。

值得注意的是“PrintZoomPaperWidth”和“PrintZoomPaperHeight”后面的数字,前者表示Word将打印页面缩放到的宽度,后者表示Word将打印页面缩放到的高度,两者均以缇(Twip)为单位,20缇为1磅,72磅为1英寸。

16开纸张的宽度为521.65磅,高度为737.1磅,换算成缇正好分别是10433缇、14742缇。

如果需要缩放为其他的纸张大小,可以按照这一方法进行换算,当然请事先打开“选项→常规”对话框,将度量单位由默认的“厘米”设置为“磅”。

检查无误之后,单击工具栏上的“保存”按钮执行保存操作,接下来依次执行“文件→关闭并返回到MicrosoftWord”,返回Wo rd窗口之后,按下Alt+F8组合键,打开“宏”对话框,选择列表框中的“test”宏,单击右侧的“运行”按钮,然后的事情嘛,耐心等待片刻即可完成文档的批量缩放打印。

实例9:判断图片属性
很多时候,我们都需要在Wo r d文档中插入一些图片,默认设置下都是会以嵌入型的方式插入,但可能会被某些用户更改此默认设置,可以右击图片打开“设置图片格式”对话框,在这里可以查看到该图片的详细信息,但显然是不太方便,而且也不直观。

其实,我们可以借助V B A宏代码快速判断图片属性,方法也并不复杂,具体代码如实例9(访问/special/)。

运行宏之后,很快就可以显示图所示的结果,这里可以查看到图片的插入模式、图片的宽和高等信息。

如果需要判断图片究竟是衬于文字下方,或者是浮于文字上方,可以在上述代码的“End Sub”前面添加下述内容,
ActiveDocument.Shapes(1).Select
With Dialogs(wdDialogFormatDrawingObject)
MsgBox CStr(.Wrap)
End With
运行宏之后会在弹出上述对话框的同时,接下来弹出上图所示的对话框,这里的“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组合键,打开Microsoft VisualBasic编辑器窗口,依次执行“插入→模块”,在右侧窗格中插入一个空白的模块,手工写入实例10代码。

第三步:单击工具栏上的“保存”按钮,将刚才写入的宏代码保存下来,按下Alt+Q组合键返回Word窗口之后,按下Alt+F8组合键,打开“宏”对话框,选中列表框中的“Replace”宏,单击右侧的“运行”按钮。

基于上述原理,以后如果替换的内容发生变化,我们只需要针对test.txt文件进行编辑,而不需要更改VBA宏代码,这样就方便多了。

实例11:对文档内容进行顺序排列
手头有一个文档,其中有许多格式相似的消息,现在希望对这些内容按照日期进行重新整理,也就是说将日期在前面的消息也放在前面,由于实际文档的内容相当之多,如果通过手工的方法进行操作,工作量可想而知。

有没有简单一些的批量处理方法呢?
利用VBA可以实现这一要求,具体代码如下:
Sub macro1()
Dim s() As String, temp As String, i As Long
VBAs = Split(ActiveDocument.Content, Chr(13) & Chr(13))
For i = 0 To UBound(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))
End Sub
运行宏,稍等片刻,Word会在一个新文档窗口中给出经过整理之后的内容,这里可以清楚的看到文档中的消息已经按照我们的要求进行排列。

实例12:替换Word文档插图的超链接
最近,从网络上抓取了一份考试卷,其中有许多插图,按住Ctrl键单击之后可以访问所设定的链接。

不过,这里所链接到的网页看起来似乎很有问题,现在希望将这些链接地址进行重新设置,但如果逐一右击打开“编辑超链接”对话框进行修改,显然是相当的麻烦。

其实,我们可以利用VBA完成这个批量修改超链接的任务。

具体步骤如下:
第一步:编辑VBA代码
经过检查之后发现,这份考试卷中的插图的版式并不相同,其中有一些图片采取了默认的
“嵌入型”环绕方式,因此需要首先将其中的嵌入型图片更改为其他的环绕方式。

虽然可以逐一手工更改,但显然效率不高。

打开Microsoft Visual Basic编辑器窗口,输入实例12代码(访问/special/)。

第二步:选择图片版式
单击工具栏上的“保存”按钮,然后执行“文件→关闭并返回到Microsoft Word”,按下Alt+F8组合键,单击右侧的“运行”按钮,此时会弹出一个对话框,单击“是(Y)”按钮,随后会看到一个对话框,根据自己的需要输入相应的数字,确认之后即可将文档中的图片更改为所对应的版式。

第三步:编辑替换超链接的VBA代码
仍然打开Microsoft Visual Basic编辑器窗口,依次执行“插入→模块”,在右侧窗格中手工插入一个新的空白模块,粘贴如下代码:
Sub text()
n = 0
For Eachs In ActiveDocument.Shapes
s.Select
ActiveDocument.Hyperlinks.Add Anchor:=Selection.ShapeRange, _
Address:=""
n=n+1
Next
MsgBox "共替换" &n& "个图片!"
End Sub
上述代码中的“text”名称和“”的内容可以根据需要任意更改。

第四步:替换超链接
检查无误之后,按下Ctrl+S组合键保存代码,接下来依次执行“文件→关闭并返回到Microsoft Word”,返回Word窗口之后,按下Alt+F8组合键,选中列表框中的“text”宏,单击右侧的“运行”按钮即可看到效果。

至于页眉和末尾的超链接内容,直接手工替换即可。

实例13:快速实现括号的右对齐
同事小秦出了一份试卷,其中有许多是属于客观题的选择题,但由于输入的问题,相应的括号都跟在文字的后面,现在她希望这些括号能够在页面的最右边对齐,但如果逐题敲入空格键实现右对齐,既麻烦而且也不便于后期的调整,有没有更简单一些的方法呢?
利用VBA宏代码来实现这一任务,具体代码如下:
Sub 括号右对齐()
Dim myRange As Range, myEnd As Long
Set myRange = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Content, Selection.Range)
myEnd = myRange.EndWith myRange.Find
.ClearFormatting
.Replacement.ClearFormatting
.MatchWildcards = True
.Text = "[(\(][^32 ^s^t]{1,}[)\)]"
.Replacement.Text = "^t()"
.Replacement.ParagraphFormat.TabStops.ClearAll
.Replacement.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(1
4), Alignment:=wdAlignTabRight, Leader:=5
.Execute Replace:=wdReplaceAll
End With
End Sub
上述宏代码中的“^32” 表示半角空格,“^s ”表示不间断空格,“^t”表示制表符,至于“CentimetersToPoints(14)”的数字表示制表符的位置,你可以根据自己的需要另行设置。

运行宏,很快就可以看到右对齐效果,感兴趣的朋友可以一试。

实例14:快速重排试题
同事小赵编制了一份中英文对照的练习卷,但每行的试题数量并不相等,而且没有按照一定的规则对齐,看起来很不美观。

现在要求设置为每次固定的几道题,例如3小题或4小题,如果依靠手工完成,虽然也可以实现,但显然是相当的麻烦而且效率也不高,这里可以利用VBA 宏代码快速完成这一任务,具体代码如实例14(访问/special/)。

代码中,“ .Text = "^95{3,}"”表示对3个以上的下划线符号进行处理,“.Text = vbTab”表示将匹配内容替换为制表符,“.Text = vbTab”表示针对匹配内容应用下划线格式,“IfiMod tabcount = 0And .End< .Paragraphs(1).Range.End -
1Then .InsertAfterChr(13)”是按照指定的制表符数拆分段落。

运行宏,此时会弹出一个对话框,我们可以根据自己的需要设置每行的试题数量,例如这里取默认的“4”,确认之后稍等片刻即可得到效果,是不是很方便?
实例15:为文档的每页添加固定内容
某些时候,你可能需要为文档的每一页添加固定的内容,如果页面不多的话,手工操作即可。

不过,假如文档页面数量比较多,恐怕就比较麻烦。

其实,我们可以借助VBA宏代码实现这一要求。

打开Microsoft Visual Basic编辑器窗口,插入一个空白模块,粘贴如下代码:
Sub test()
Dim m As Integer, n As Page
m = rmation(wdNumberOfPagesInDocument)
Selection.HomeKey Unit:=wdStory
For o = 1 To m
With Selection
.TypeText Text:="机械制图国家标准"
.GoToNext what:=wdGoToPage
End With
Next
End Sub
这里的“机械制图国家标准”是每页需要加入的固定字符串,大家可以根据实际需要进行修改。

检查无误之后,单击工具栏上的“保存”按钮执行保存操作,接下来依次选择“文件→关闭并返回到Microsof t Word”,返回Word窗口之后,按下Alt+F8组合键,打开“宏”对话框,单击右侧的“运行”按钮即可。

实例16:提取第一行作为文件名称
很多时候,我们需要将某些Word文档的第一行作为文件名称,如果文档的数量不是很多,那么手工操作即可。

但如果需要处理的文档数量比较多,手工重命名的方法恐怕就不是那么方便。

其实,我们可以借助VBA宏代码实现这一要求,代码如下实例16所示(访问
/special/)。

运行宏,此时会弹出“浏览”对话框,在这里选中指定文件夹中的相关Word文档,稍候片刻,即可得到我们所需要的结果。

实例17:批量实现图片的等比例缩
放很多时候,我们都需要对已插入Word文档中的图片作统一处理,例如调整图片的尺寸,但如果单纯的修改图片的宽度或高度,那么可能无法实现等比例缩放,这样得到的图片可能会发生变形,这就不是我们的本意了。

例如在锁定纵横比的前提下,将上图所示的文档中所有图片的宽度统一更改为4厘米,可以按照下面的方法实现:
打开Microsoft Visual Basic编辑器窗口,在右侧窗格中插入一个空白模块,手工粘贴如下代码:
Sub test()
Dim Shp As Shape, InlineShp As InlineShape
Dim Bder As Border
With ActiveDocument
For Each Shp In .Shapes
Shp.LockAspectRatio = msoTrue
Shp.Width = 4 * 28.35
Next
For Each InlineShp In .InlineShapes
InlineShp.LockAspectRatio = msoTrue
InlineShp.Width = 4 * 28.35
For Each Bder In InlineShp.Borders
With Bder
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth050pt
.Color = wdColorAutomatic
End With
Next
Next
End With
End Sub
上述代码中的“LockAspectRatio = msoTrue”表示锁定纵横比,如果不需要锁定纵横比,那么可以修改为“LockAspectRatio = msoFalse”。

检查无误之后,单击工具栏上的“保存”按钮将VBA宏代码保存到文档中,如果是新文档则请在文档类型中选择“启用宏的Word文档”。

依次执行“文件→关闭并返回到Microsoft Word”,返回Word窗口之后,按下Alt+F8组合键,打开“宏”对话框,选中列表框中的“test”宏,单击右侧的“运行”按钮,稍等片刻,即可看到结果,虽然各个图片的原尺寸不尽相同,但所有图片的宽度已经统一变更为4厘米,而且纵横比并没有发生变化。

如果需要将图片的宽度设置为其他的数值,只需要对VBA宏代码中的相应数据作简单修改即可。

实例18:实现图形的精确旋转
很多时候,我们可能需要对Word文档中的图片进行某种程度的旋转,通常情况下只需要选中图片,单击绿色的旋转箭头,将其调整至适当的位置即可。

不过,这种方式下很难精确保证旋转角度,除非打开“大小→大小”对话框,在“尺寸和旋转”小节中手工指定旋转角度,有没有更方便一些的方法呢?
其实,我们可以利用VBA宏实现图形的任意旋转,具体代码如下:
Sub 图形旋转()
Dim blnIsInlineShape As Boolean
If Selection.Type = wdSelectionInlineShape Then
blnIsInlineShape = True
Selection.InlineShapes(1).ConvertToShape
End If
Dim intTurn As Integer
intTurn = InputBox("请输入图形要旋转的角度值" & vbCrLf & "正数表示顺时针,负数表示逆时针。

", "图形旋转", 30)
Selection.ShapeRange.IncrementRotation intTurn
End Sub
上述代码中,首先是将嵌入式的图形转换为可以自由浮动的图形。

返回Wo rd窗口之后,
选中文档中需要旋转的某幅图形,按下Alt+F8组合键,选中列表框中的“图形旋转”宏,单击“运行”按钮弹出一个对话框,默认的旋转角度是30°,例如设置为“33”,很快就可以完成旋转操作。

实例19:批量选择所有表格
很多时候,我们需要对文档中的表格进行批量设置,例如重新设置字体、行高什么的,如果表格数量不是太多,那么操作是相当简单的。

但如果表格分布在文档的不同位置,恐怕就不是那么方便了。

我们可以利用VBA宏实现这一要求,具体代码如下:
Sub 全选表格()
Dim tempTable As Table
Application.ScreenUpdating = False
ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
For Each tempTable In ActiveDocument.Tables
tempTable.Range.Editors.Add wdEditorEveryone
Next
ActiveDocument.SelectAllEditableRanges wdEditorEveryone
ActiveDocument.DeleteAllEditableRanges wdEditorEveryone
Application.ScreenUpdating = True
End Sub
运行宏,很快就可以选定文档中的所有表格内容,接下来该如何操作,相信就不用多介绍了吧?
实例20:批量转换脚注
同事小秦过来求助,她的一份Word文档中将正文部分和相应的注解放在了一些,现在希望将这些注解部分全部转换化为脚注,也就是说放在每页的页脚处。

如果纯粹采取手工的方法进行操作,虽然可以实现这一要求,但显然是相当的麻烦,而且还很容易出错。

经过研究,发现正文部分和注解部分的字号大小还是有一定区别的,前者采用二号,后者则是四号,这样就可以利用VBA宏代码实现批量转换脚注的任务。

按下Alt+F11组合键,打开Microsoft Visual Basic编辑器窗口,依次执行“插入→模块”,在右侧的模块窗格中手工粘贴如下代码,
这里的宏名称可以任意命名:
Sub 脚注转换()
Dim myRange As Range, NtRange As Range, strNT As String
Application.ScreenUpdating = False
Set myRange = ActiveDocument.Content
NF: With myRange.Find
.ClearFormatting
.Format = True
.Font.Size = 14
Do While .Execute = True
Set NtRange = ActiveDocument.Range(myRange.Start, myRange.Start)
strNT = myRange.Text
myRange.Delete
ActiveDocument.Footnotes.Add NtRange, , strNT
myRange.SetRange myRange.End, ActiveDocument.Content.End - 1
GoTo NF
Loop
End With
Application.ScreenUpdating = True
End Sub
返回Word界面之后,按下Alt+F8组合键,选中列表框中的“脚注转换”宏,单击右侧的“运行”按钮即可。

相关文档
最新文档