当前位置: 首页 > 学习 > 电脑学习 > 电脑基础 > Word教程 > 正文

修改录制的宏来提高效率

http://www.zk168.com.cn  招考学习网 2006-1-17 1:55:56
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
   宏录制器通过宏将操作翻译为 Visual Basic 代码。但是,录制宏时会受到一些限制。不能记录下面的宏:
  • 条件分支
  • 变量指定
  • 循环结构
  • 自定义用户窗体
  • 错误句柄
  • 鼠标选定文字(必须使用组合键)

为了提高录制的宏的功能,就可能需要修改录制到模块中的代 码。

11.5.1 删除 Selection 属性
    使用宏录制器创建的宏通过对所选内容进行操作。在大多数录制 的宏指令的开头都有Selection。录制的宏使用 Selection 属性返 回 Selection 对象。例如,下面的示例将所选内容移动到 Book 书 签,并在书签后插入文字。

Sub test()
Selection.Goto What:=wdGotoBookmark, Name:="Book"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="New text"
End Sub
    尽管这个宏会完成任务,但却有一些缺点。首先,如果文档没有 一个名为 Book 的书签,则这个宏会产生错误。其次,这个宏可能 会不正确地移动选定内容。修改这个宏后,不使用 Selection 对象, 就可以解决上面的两个问题。下面就是修改之后的宏。


Sub Mytest()
If ActiveDocument.Bookmarks("Book").Exists = True
Then
loc = ActiveDocument.Bookmarks("Book").End
ActiveDocument.Range ( Start:=loc,
End:=loc).InsertAfter "New text"
End If
End Sub

    Exists 方法用来检查是否存在名为 Book 的书签。如果找到了 这个书签,则 End 属性返回该书签的结束字符位置。最后,Range 方 法用来返回一个 Range 对象,该对象引用书签的结束位置,以使用InsertAfter 方法插入文字。

11.5.2 使用 With …End With
    可使用 With … End With 结构简化对相同对象进行引用的宏指 令。例如,当在文档顶部添加一个标题(Title)时,会录制下面的 宏。


Sub Macro()
Selection.HomeKey Unit:=wdStory
Selection.TypeText Text:="Title"
Selection.ParagraphAlignment.Alignment =
wdAlignParagraphCenter
End Sub

    每个指令都使用 Selection 属性以返回一个 Selection 对象。 可以简化这个宏,这样只需使用一次 Selection 属性。

Sub MyMacro()
With Selection
.HomeKey Unit:=wdStory
.TypeText Text:="Title"
.ParagraphAlignment.Alignment =
wdAlignParagraphCenter
End With
End Sub

    不使用 Selection 对象也可以完成相同的任务。下面的宏在活 动文档的开头使用 Range 对象,就能完成相同的任务。

Sub MyMacro()
With ActiveDocument.Range(Start:=0, End:=0)
.InsertAfter "Title"
.ParagraphFormat.Alignment =
wdAlignParagraphCenter
End With
End Sub

11.5.3 删除不必要的属性
    如果录制了一个关于选中对话框中的选项的宏,即使只更改一个或两个选项,宏录制器也会记录该对话框中的所有选项的设置。如果不想更改所有选项,可从记录的宏中删除不必要的属性。下面录制的宏包含【格式】菜单中【段落】对话框的一些选项。

Sub Macro()
With Selection.ParagraphFormat
.LeftIndent = InchesToPoints(0)
.RightIndent = InchesToPoints(0)
.SpaceBefore = 6
.SpaceAfter = 6
.LineSpacingRule = 0
.Alignment = wdAlignParagraphLeft
.WidowControl = True
.KeepWithNext = False
.KeepTogether = False
.PageBreakBefore = False
.NoLineNumber = False
.Hyphenation = True
.FirstLineIndent = InchesToPoints(0)
.OutlineLevel = 10
End With
End Sub
但是如果只想更改段前和段后间距,可将宏改为:

Sub MyMacro()
With Selection.ParagraphFormat
.SpaceBefore = 6
.SpaceAfter = 6
End With
End Sub

    因为只需设置少数属性,所以简化后的宏运行得更快。只更改选定段落的段前和段后的间距,而所有其他设置都没有改变。

11.5.4 删除不必要的参数
    当宏录制器记录一个方法时,会包含所有参数值。下面的宏录制打开名为 Test.doc 的文档。所得到的宏包含了 Open 方法的所有参数。

Sub Macro()
Documents.Open FileName:="C:\My Documents\Test.doc",
ConfirmConversions:= _
False, ReadOnly:=False, AddToRecentFiles:=False,
PasswordDocument:="", _
PasswordTemplate:="", Revert:=False,
WritePasswordDocument:="", _
WritePasswordTemplate:="",
Format:=wdOpenFormatAuto
End Sub

    可以删除宏中不需要的参数。例如,可以删除所有设置为空字符串的参数,如 WritePasswordDocument:="",如下所示。

Sub MyMacro()
Documents.Open FileName:="C:\My Documents\Test.doc",
ConfirmConversions:= _
False, ReadOnly:=False, AddToRecentFiles:=False, _
Revert:=False, Format:=wdOpenFormatAuto
End Sub

-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·关于\"&\"运算符效率低下的问题
·改进ASP应用程序中的字符串处理性能
·如何提高IIS 5.0网站伺服器的执行效率呢
·加速ASP程序的显示速度
·提高ASP页面的执行效率
·如何增强ASP程序性能
·认识和优化connection对象
·微软建议的ASP性能优化28条守则
·什么才是提高ASP性能的最佳选择(三)
·什么才是提高ASP性能的最佳选择(二)
相关内容:
 
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>