WORDVBA录制宏编辑宏与优化宏手把手教程之三.docx
- 文档编号:13479669
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:18
- 大小:310.39KB
WORDVBA录制宏编辑宏与优化宏手把手教程之三.docx
《WORDVBA录制宏编辑宏与优化宏手把手教程之三.docx》由会员分享,可在线阅读,更多相关《WORDVBA录制宏编辑宏与优化宏手把手教程之三.docx(18页珍藏版)》请在冰点文库上搜索。
WORDVBA录制宏编辑宏与优化宏手把手教程之三
WORD2016VBA录制宏、编辑宏与优化宏
--手把手教程之三
WORD2016VBA录制宏、编辑宏与优化宏
--手把手教程之三
1.录制宏
本节重点:
1、熟悉录制宏的基本操作方法;
2、了解字体格式设置的VBA程序代码;
3、了解段落格式设置的VBA程序代码。
编写程序代码,对于初入VBA的新手来说,往往是感到无从下手,那么多语句、语法及名目繁多的各种参数,秆头万绪,一团乱麻,无法理清。
但你不用担心,WORDVBA给我们提供了一个极其方便的工具—录制宏。
录制宏的作用就是把我们对WORD的操作自动转换成VBA程序代码,这样不仅省去了我们编写代码的时间,更主要的是使我们知道每一个操作所对应的程序代码和应该设置那些参数,从而使我们的学习效率大大提高。
下面我们就来开始学习怎样录制宏的打操作。
如果无法确定要使用的VisualBasic方法或属性,可打开宏录制器并进行手动操作。
宏录制器会将操作译成VisualBasic代码。
录制操作完成后,可根据需要修改代码。
实例1、我们的要求是这样的,对全文档中的字体设置为:
华文细黑,粗体,12号(小四号);段落设置为:
首行缩进2字符,行距1.5,段前12磅,段后12磅。
操作步骤如下:
1、在“开发工具”菜单上,指向“录制宏”,然后单击“录制宏”,打开录制宏面板,如图1-1、图1-2所示。
录制宏按钮健
图1-1录制宏按钮
图1-2
2、默认宏的名称是:
宏1、宏2、宏3……,如果需要,可更改默认的宏名称,在本例中我们把宏的名称改为“Ourexample”然后单击“确定”启动录制器。
3、回到开始菜单,同时按下Ctrl+A键,全选择文档
4、在“字体”工具栏上,点击右下角的小箭头,打开字体设置面板,把字体设置为:
华文细黑,粗体,12号(小四号),然后单击“确定”。
5、在“段落”菜单上,工具栏上,点击右下角的小箭头,打开段落设置面板,把段落设置为:
首行缩进2字符,行距1.5,段前12磅,段后12磅,然后单击“确定”。
6、录制结束,千万别忘了在工具栏上点击“停止录制”按钮。
停止录制宏哟,点“停止录制”而非关闭“停止录制宏”工具栏,如图1-4所示,否则,要绕些小圈子了。
图1-3
图1-4字体格式设置面板
图1-5段落格式设置面板
停止录制宏按钮健
图1-6停止录制宏按钮
在上图的录制宏对话框中,我们可以自定义宏名,将宏指定到工具栏或者键盘上,保存宏的位置(作用范围),如果是“所有文档(Normal.dot)”,则它是全局的宏,可以为所有文档所调用,是公共的宏;如果是本文档,则是私有的,仅作用于当前文档。
同理,如果我们指定在工具栏或者键盘中,如果是“所有文档(Normal.dot)”,则该工具栏作用于所有WORD文档,反之则仅作用于当前文档,其它文档中将不会出现此宏、工具栏或者键盘快捷键。
好,我们进入VBE,你可以使用ALT+F8,在宏位置中为当前文档,找到该宏名,点右侧的“编辑”命令,或者直接ALT+F11,找到该文档的工程资源管理器,双击“NewMacros"模块,则在右侧的代码窗口中,会看到以下代码,如图1-7所示。
点这里可以查看宏代码健
村夫把它注释一下(如果在VBE代码窗口中,我们将光标位于代码中或者选定某个关键字,按下F1,会出现详细的VBA帮助),以使大家更快地明白它的意思:
SubOurexample()
'Ourexample宏
'该宏由黄山村夫于2020年2月26日录制
Selection.WholeStory'全选文档,相当于按下Ctrl+A
WithSelection.Font'对选定文字
.NameFarEast="华文细黑"'东亚字体
.NameAscii="华文细黑"'设置拉丁文(字符代码从0(零)到127的字符)所用的字体
.NameOther="Tahoma"'设置字符代码从128到255的字符的字体
.Name="华文细黑"'字体名称
.Size=12'字号12就是"小四"号字
.Bold=True'粗体
.Italic=False'非斜体
.Underline=wdUnderlineNone'无下划线
.UnderlineColor=wdColorAutomatic'下划线颜色自动
.StrikeThrough=False'无删除线格式
.DoubleStrikeThrough=False'无双删除线格式
.Outline=False'无镂空格式
.Emboss=False'无阳文格式
.Shadow=False'无阴影格式
.Hidden=False'不隐藏文字
.SmallCaps=False'不小型大写字母
.AllCaps=False'不全部字母大写
.Color=wdColorAutomatic'自动字体颜色
.Engrave=False'不阴文
.Superscript=False'不上标
.Subscript=False'不下标
.Spacing=0'字符间距
.Scaling=100'不缩放
.Position=0'正常位置
.Kerning=1'最小字号
.Animation=wdAnimationNone'无动态效果
.DisableCharacterSpaceGrid=False'不忽略选定文本每行中的字符数
.EmphasisMark=wdEmphasisMarkNone'不设置着重号
.Ligatures=wdLigaturesNone'不使用连字符
.NumberSpacing=wdNumberSpacingDefault'数字空格采用默认值
.NumberForm=wdNumberFormDefault'数字形式采用默认形式
.StylisticSet=wdStylisticSetDefault'样式集采用默认值
.ContextualAlternates=0'不使用上下文替换
EndWith
WithSelection.ParagraphFormat'对于选定内容的段落格式
.LeftIndent=CentimetersToPoints(0)'左缩进为0,即无
.RightIndent=CentimetersToPoints(0)'右缩进为0,即无
.SpaceBefore=12'段前12磅
.SpaceBeforeAuto=False'不自动设置指定段落的段前间距
.SpaceAfter=12'段后为12磅
.SpaceAfterAuto=False'不自动设置指定段落的段后间距
.LineSpacingRule=wdLineSpace1pt5'行距为1.5倍
.Alignment=wdAlignParagraphJustify'段落对齐方式,常规,两端对齐
.WidowControl=False'重新分页时段中的首行或末行有可能单独位于上页的页尾或下页的页首。
.KeepWithNext=False'文档重新分页时,指定段落与下一段可能位于下一页
.KeepTogether=False'Word对文档重新分页时同一段中的各行可能不位于同一页上。
.PageBreakBefore=False'指定段落前不插入分页符
.NoLineNumber=False'不设置行号
.Hyphenation=True'段落进行自动断字
.FirstLineIndent=CentimetersToPoints(0)'首行缩进为0,即无首行缩进
.OutlineLevel=wdOutlineLevelBodyText'大纲级别为正文文本
.CharacterUnitLeftIndent=0'段落的左缩进为0字符
.CharacterUnitRightIndent=0'段落的右缩进为0字符
.CharacterUnitFirstLineIndent=0'段落的首行缩进为0字符
.LineUnitBefore=0'设置指定段落的段前间距(以网格线为单位),0
.LineUnitAfter=0'设置指定段落的段后间距(以网格线为单位),0
.MirrorIndents=False'不采用对称缩进
.TextboxTightWrap=wdTightNone'不在相同样式的段落增加间距
.CollapsedByDefault=False
.AutoAdjustRightIndent=True'指定的每行字符数,自动调整所选段落的右缩进。
.DisableLineHeightGrid=False'段落中的字符与行网格不进行对齐。
.FarEastLineBreakControl=True'应用东亚语言文字的换行规则
.WordWrap=True'西文单词中间断字换行
.HangingPunctuation=True'允许标点溢出边界
.HalfWidthPunctuationOnTopOfLine=False'行首标点符号不改为半角字符
.AddSpaceBetweenFarEastAndAlpha=True'中文文字和拉丁文字之间自动添加空格
.AddSpaceBetweenFarEastAndDigit=True'中文文字和数字之间添加空格
.BaseLineAlignment=wdBaselineAlignAuto'自动调整活动文档中的基线字体对齐方式
EndWith
EndSub
哇,简单地几步操作,这么多的代码(70多行),别急,您对比一下以下我们的操作:
字体对话框和段落对话框,您就明白了:
在上面的代码中,有代码,有注释,注释是良好程序员的一个重要标志,一个程序,需要必要的注释,不但对使用者,阅读者有利,对编程人员今后的代码维修升级也是十分必要的.注释有两种方式,一种使用撇号('),也可以使用关键字"Rem",通常使用前者,可以直接写在代码旁或者另起一行。
2.如何运行宏
好家伙,WORD的宏记录把所有对话框中的信息都录上去了,这样子,尽管我们可以方便地使用它,总是感觉不太"纤美",太"铺张"了.我们来试试看这个宏是否能达到我们的要求:
运行宏的方法:
(常规)
1、把文档恢复到录制宏前的状态,按下ALT+F8,找到活动文档中的这个"OurExample"宏,点击运行,如图1-8所示。
图1-8运行宏
2、使用ALT+F11,直接在VBE代码窗口中运行,将光标定位于活动文档的工程资源管理的代码窗口中,注意,光标位置处于此过程(一个宏,我们术语称之为过程,即将光标置于当前过程中,其过程名(宏名)也就是本例中所指的"OurExample")如图1-9所示:
图1-9运行子过程/窗体"按钮
按下快捷键F5或者使用VBE标准工具栏中的"运行子过程/窗体"按钮,也可以使用运行菜单下的"运行子过程/窗体"菜单.看到了吧,这就是我们宏的作用,它可以代替我们以后的手动操作,如果经常使用某个操作(或者某几个操作组合的话),我们可以使用宏。
另外,从录制的宏代码来看,它分了三个部分,一部分是全选文档代码(只有一句代码),一个是字体部分,另一个是段落部分(两个With……EndWith结构),也就是说,宏是命令的组合。
3.修改录制的宏代码
前面自动录制的宏代码,事无具细,全都录制下来了,显得太允余。
您如果觉得看得懂村夫的注释和我们录制宏时的目的,那么,我们一起来修改一下,使其既能完成我们的任务,达到目的,所需的代码最少。
修改后的代码如下:
SubRevOurExample()
'简化后的宏代码
Selection.WholeStory
WithSelection.Font
.Name="华文细黑"
.Size=12
.Bold=True
EndWith
WithSelection
.ParagraphFormat
.SpaceBefore=12
.SpaceAfter=12
.LineSpacingRule=wdLineSpace1pt5
EndWith
EndSub
试着运行一下这个宏,大家看到这个仅仅13行代码的宏,正是我们想要的结果。
看了上述村夫的讲述,和您试运行了"RevOurExample"宏后,您是不是开始对WORD的宏有感觉了?
4.优化宏代码
下面,我浅谈一下(在以后的讲座中将会深入),上面的"RevOurExample"宏中,代码还不是最好的,为什么,因为,它仍然使用了SELECTION对象,而非RANGE对象,这里,我们可以使用以下代码,能高效地达到我们初始目的:
"对全文档中的字体设置为:
华文细黑,粗体,12号,行距1.5,段前12磅,段后12磅",OK,来看一下,优化后的代码是怎么样的:
SubExample()
'进一步修改后,宏的代码更简洁
WithActiveDocument.Content
With.Font
.Name="华文细黑"
.Size=12
.Bold=True
EndWith
With.ParagraphFormat
.SpaceBefore=12
.SpaceAfter=12
.LineSpacingRule=wdLineSpace1pt5
EndWith
EndWith
EndSub
显然,代码行数基本没有变动,变动的只是对象,前者"RevOurExample"使用了selection对象,并且进行了全选操作,而在这个"Example"中,直接对全文档(Content对象)的字体和段落格式进行了设置。
在这个"Example"中,我们使用了三个"With……EndWith"语句,我们来看一下,这个语句结构的特点:
1、With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。
例如,要改变一个对象的多个属性,可以在With控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。
2、注意:
当程序一旦进入With块,object就不能改变。
因此不能用一个With语句来设置多个不同的对象。
3、可以将一个With块放在另一个之中,而产生嵌套的With语句。
但是,由于外层With块成员会在内层的With块中被屏蔽住,所以必须在内层的With块中,使用完整的对象引用来指出在外层的With块中的对象成员。
4、重点一般来说,建议您不要跳入或跳出With块。
如果在With块中的语句被执行,但是With或EndWith语句并没有执行,则一个包含对该对象引用的临时变量将保留在内存中,直到您退出该过程。
5.深入了解VBA
1、代码窗口
图1-10代码窗口
可以使用代码窗口来编写、显示以及编辑VisualBasic代码。
打开各模块的代码窗口后,可以查看不同窗体或模块中的代码,并且在它们之间做复制以及粘贴的动作。
2、如何打开代码窗口
可以按照下列所述的方式,来打开代码窗口:
在工程窗口中,可以选择一个窗体或模块,然后右击选择“查看代码”按钮或者双击该窗体或模块。
在“用户窗体”窗口中,可以双击控件或窗体;也可以从“视图”菜单中选择“代码窗口”,或者按下F7键。
3、窗口部件
(1)“对象”框
如图所示的(通用)部分
显示所选对象的名称。
可以按下列表框中的右边箭头,来显示此窗体中的对象。
(2)“过程/事件”框
如图所示的(声明)部分将“窗体”或“对象”框所含控件中,可以列出所有VisualBasic的事件。
当选择了一个事件,则与事件名称相关的事件过程,就会显示在代码窗口中。
如果在对象框中显示的是“通用”,则过程框会列出所有声明,以及为此窗体所创建的常规过程。
如果正在编辑模块中的代码,则过程框会列出所有模块中的常规过程。
在上述两实例中,在过程框中所选的过程都会显示在代码窗口中。
模块中的所有过程会出现在一个单一滚动条的列表中,它们是按名称的字母来排列的。
可以从代码窗口上端的下拉式列表中选取一个过程,此时指针会移到所选过程的第一行代码上面。
4、关于通用声明部分
我们再来看一下代码窗口图中的通用声明部分,本示例中,我们写了三个通用声明:
OptionExplicit
PublicMyNumberAsInteger
DimMyRangeAsRange
第一句代码OptionExplicit
1、是强制显式声明本模块中的所有变量,如果使用,OptionExplicit语句必须写在模块的所有过程之前。
2、如果模块中使用了OptionExplicit,则必须使用Dim、Private、Public、ReDim或Static语句来显式声明所有的变量。
如果使用了未声明的变量名在编译时间会出现错误。
3、如果没有使用OptionExplicit语句,除非使用Deftype语句指定了缺省类型,否则所有未声明的变量都是Variant类型的。
Variant类型占用大量内存,降低运行效率。
若是编写一些得意的程序员,那是无所谓的。
但若是编写一个稍大一些的程序,处理较复杂的事情,则提高运行速度就是一个值得考虑的问题了
4、注意使用OptionExplicit可以避免在键入已有变量时出错,在变量的范围不是很清楚的代码中使用该语句可以避免混乱。
5、如果您是初学者,不提倡写此句代码或者在VB环境设置中不要勾选显式声明变量选项,因为大家对变量的定义还不理解。
第二句代码PublicMyNumberAsInteger
1、在模块级别中使用,用于声明公用变量和分配存储空间。
2、Public语句声明的变量在所有应用程序的所有没有使用OptionPrivateModule的模块的任何过程中都是可用的,简单地理解就是经public声明的变量,在当前工程中是公用的。
3、MyNumbe变量名
4、Integer变量类型
第三句代码:
DimMyRangeAsRange
1、通常会使用Dim语句来声明变量。
一个声明语句可以放到过程中以创建属于过程的级别的变量。
或在声明部分可将它放到模块顶部,以创建属于模块级别的变量。
2、当dim语句如本例中所示时,它将MyRange变量声明为本模块中公用;当dim语句的变量声明位于如sub……EndSub中时,仅为该过程所有,过程运行结束,变量即在内存中消失。
5、对程序代码的解说
再看一下我们的sub……endsub过程
SubExample()
……
EndSub
1、sub语句:
声明子过程的名称,参数,以及构成其主体的代码。
无论你如何理解,简单一句话,只要你想编程,简单的,就使用sub……endsub,过程名尽可能不要与WORD命令、函数、关键字一致就行了(如果与WORD命令一致,就是修改WORD命令了)。
2、如果没有使用Public、Private或Friend显式指定,Sub过程按缺省情况就是公用的。
3、如果是privatesubExample()……endsub,那么,这个"Example"过程,表示只有在包含其声明的模块中的其它过程可以访问该Sub过程。
6、WORDDOCUMNT对象的三个重要事件
接着,我们进入WORDDOCUMNT对象的三个重要事件:
注意,DOCUMENT对象仅隶属于THISDOCUMENT类模块中,也就是当前工程下的"THISDOCUMENT"模块,它是一个类模块.而我们通常录制宏时,WORD会自动新建一个模块,它是标准模块。
'关闭文档时将会触发此事件
PrivateSubDocument_Close()
EndSub
'新建文档时,将会触发此事件(通常用于模板中)
PrivateSubDocument_New()
EndSub
'打开文档时,将发触此事件
PrivateSubDocument_Open()
EndSub
OK,我们可以试着在代码窗口中粘贴以下代码:
PrivateSubDocument_Close()
MsgBox"这是一个关闭文档事件!
"
EndSub
PrivateSubDocument_Open()
MsgBox"这是一个打开文档的事件"
EndSub
保存文件,关闭和打开这个文件,你看到了什么?
当你关闭文件时会看到图这个对会窗口
当你打开文件时会看到图这个对会窗口
好了,这一讲,守柔就先说到这儿,您有什么问题和疑问,请随时与我交流!
下一讲,我们将讨论对象,属性,方法.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WORDVBA 录制 编辑 优化 手把手 教程