




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
守柔 WORD VBA 入门 教程 第 9 页 共 9 页第二课:录制宏、编辑宏与优化宏上一课中,我们初步认识了VBA是什么,怎么进入VBE编辑器,以及VBE的环境设置等。本课中,我们来录制宏、编辑宏与优化宏。录制宏有两种方式,一是双击状态栏中的录制命令,或者鼠标单击工具宏录制新宏命令,WORD将记录下您的操作并转换为VB语言.在XP以下版本中,录制宏操作不支持鼠标操作,您可以使用键盘操作,请结合键盘加速键、键盘快捷键等进行操作,此处不再解释加速键和快捷键的含义。另外,在XP版本中,对部分右键菜单不支持的情况下,可以使用SHIFT+F10进行调用右键快捷菜单等。OK,我们选择上述方法之一,来录个一个宏,我们的操作是这样的,对全文档中的字体设置为:华文细黑,粗体,12号,行距1.5,段前12磅,段后12磅,录制结束,千万别忘了停止录制宏哟,点“停止”而非关闭“停止录制宏”工具栏,否则,要绕些小圈子了。如图:在上图的录制宏对话框中, 我们可以自定义宏名, 将宏提定到工具栏或者键盘上, 保存宏的位置(作用范围), 如果是“所有文档(Normal.dot)”, 则它是全局的宏, 可以为所有文档所调用, 是公共的宏; 如果是本文档, 则是私有的, 仅作用于当前文档。 同理, 如果我们指定在工具栏或者键盘中, 如果是“所有文档(Normal.dot)”, 则该工具栏作用于所有WORD 文档, 反之则仅作用于当前文档, 其它文档中将不会出现此宏、 工具栏或者键盘快捷键。 好, 我们进入 VBE, 你可以使用 ALT+F8, 在宏位置中为当前文档, 找到该宏名, 点右侧的“编辑” 命令, 或者直接 ALT+F11 , 找到该文档的工程资源管理器, 双击“NewMacros模块, 则在右侧的代码窗口中, 会看到以下代码, 守柔把它注释一下(如果在 VBE 代码窗口中, 我们将光标位于代码中或者选定某个关键字, 按下 F1 , 会出现详细的 VBA 帮助),以使大家更快地明白它的意思: Sub OurExample() 这部分说明来自录制宏对话框 OurExample Macro 宏在 2005-7-20 由 I Love You_Word! 录制 &chr(10)&WORD-VBA专题讲座之二 Selection.WholeStory全选文档,CTRL+A With Selection.Font 对选定文字 .NameFarEast = 华文细黑 东亚字体 .NameAscii = Tahoma 设置拉丁文(字符代码从 0(零) 到 127 的字符)所用的字体 .NameOther = Tahoma 设置字符代码从 128 到 255 的字符的字体 .Name = 华文细黑 字体名称 .Size = 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 不设置着重号 End With With Selection.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 = FalseWord 对文档重新分页时同一段中的各行可能不位于同一页上。 .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 .AutoAdjustRightIndent = True指定的每行字符数,自动调整所选段落的右缩进。 .DisableLineHeightGrid = False段落中的字符与行网格不进行对齐。 .FarEastLineBreakControl = True应用东亚语言文字的换行规则 .WordWrap = True西文单词中间断字换行 .HangingPunctuation = True允许标点溢出边界 .HalfWidthPunctuationOnTopOfLine = False行首标点符号不改为半角字符 .AddSpaceBetweenFarEastAndAlpha = True中文文字和拉丁文字之间自动添加空格 .AddSpaceBetweenFarEastAndDigit = True中文文字和数字之间添加空格 .BaseLineAlignment = wdBaselineAlignAuto自动调整活动文档中的基线字体对齐方式 End With End Sub - 哇,简单地几步操作,这么多的代码(70 多行),别急,您对比一下以下我们的操作:字体对话框和段落对话框,您就明白了: 在上面的代码中,有代码,有注释,注释是良好程序员的一个重要标志,一个程序,需要必要的注释,不但对使用者,阅读者有利,对编程人员今后的代码维修升级也 是十分必要的.注释有两种方式,一种使用撇号(),也可以使用关键字Rem,通常使用前者,可以直接写在代码旁或者另起一行. 好家伙,WORD 的宏记录把所有对话框中的信息都录上去了,这样子,尽管我们可以方便地使用它,总是感觉不太纤美,太铺张了. 我们来试试看这个宏是否能达到我们的要求: 运行宏的方法: (常规) 1 . 把文档恢复到录制宏前的状态,按下 ALT+F8,找到活动文档中的这个OurExample宏,点击运行。 2. 使用 ALT+F11, 直接在 VBE 代码窗口中运行, 将光标定位于活动文档的工程资源管理的代码窗口中, 注意, 光标位置处于此过程(一个宏, 我们术语称之为过程,即将光标置于当前过程中, 其过程名(宏名) 也就是本例中所指的OurExample) 如图: 按下快捷键 F5 或者使用 VBE 标准工具栏中的运行子过程/窗体命令,也可以使用运行菜单下的运行子过程/窗体命令. 看到了吧,这就是我们宏的作用,它可以代替我们以后的手动操作,如果经常使用某个操作(或者某几个操作组合的话),我们可以使用宏. 另外,从录制的宏代码来看,它分了三个部分,一是全选操作, 一个是字体部分,另一个是段落部分(两个 With End With 结构), 也就是说, 宏是命令的组合。 您如果觉得看得懂守柔的注释和我们录制宏时的目的,那么,我们一起来修改一下: Sub RevOurExample() Selection.WholeStory With Selection.Font .Name = 华文细黑 .Size = 12 .Bold = True End With With Selection.ParagraphFormat .SpaceBefore = 1 2 .SpaceAfter = 12 .LineSpacingRule = wdLineSpace1pt5 End With End Sub 试着运行一下这个宏, 大家看到这个仅仅 1 3 行代码的宏, 正是我们想要的结果。 看了上述守柔的讲述,和您试运行了RevOurExample宏后,您是不是开始对WORD的宏有感觉了? 下面,我浅谈一下(在以后的讲座中将会深入),上面的RevOurExample宏中,代码还不是最好的,为什么,因为,它仍然使用了 SELECTION对象,而非 RANGE对象,这里,我们可以使用以下代码,能高效地达到我们初始目的: 对全文档中的字体设置为: 华文细黑, 粗体, 12 号, 行距1 .5,段前 12 磅,段后 12 磅,OK,来看一下,优化后的代码是怎么样的: Sub Example() With ActiveDocument.Content With .Font .Font.Name = 华文细黑 .Font.Size = 12 .Bold = True End With With .ParagraphFormat .SpaceBefore = 12 .SpaceAfter = 12 .LineSpacingRule = wdLineSpace1pt5 End With End With End Sub 显然, 代码行数基本没有 变动 , 变动 的 只 是对象, 前者RevOurExample 使用 了selection 对象,并且进行了全选操作,而在这个 Example中,直接对全文档(RANGE 对象)的字体和段落格式进行了设置. 在这个 Example中,我们使用了三个With End With语句, 我们来看一下, 这个语句结构的特点: 1. With 语句可以对某个对象执行一系列的语句, 而不用重复指出对象的名称。 例如,要改变一个对象的多个属性, 可以在 With 控制结构中加上属性的赋值语句, 这时候只是引用对象一次而不是在每个属性赋值时都要引用它。 2.注意 当程序一旦进入 With 块, object 就不能改变。 因此不能用一个 With 语句来设置多个不同的对象。 3.可以将一个 With 块放在另一个之中, 而产生嵌套的 With 语句。 但是, 由于外层 With 块成员会在内层的 With 块中被屏蔽住, 所以必须在内层的 With 块中, 使用完整的对象引用来指出在外层的 With 块中的对象成员。 4.重点 一般来说, 建议您不要跳入或跳出 With 块。 如果在 With 块中的语句被执行, 但是 With 或 End With 语句并没有执行, 则一个包含对该对象引用的临时变量将保留在内存中, 直到您退出该过程。 代码窗口:可以使用代码窗口来编写、 显示以及编辑 Visual Basic 代码。 打开各模块的代码窗口后, 可以查看不同窗体或模块中的代码, 并且在它们之间做复制以及粘贴的动作。 可以按照下列所述的方式, 来打开代码窗口:在工程窗口中, 可以选择一个窗体或模块, 然后右击选择“查看代码” 按钮或者双击该窗体或模块。 在 “用户窗体” 窗口中, 可以双击控件或窗体; 也可以从“视图” 菜单中选择“代码窗口”, 或者按下 F7 键。 窗口部件“对象” 框 如图所示的(通用)部分 显示所选对象的名称。 可以按下列表框中的右边箭头, 来显示此窗体中的对象。 “过程/事件” 框 如图所示的(声明)部分 将“窗体” 或“对象” 框所含控件中, 可以列出所有 Visual Basic 的事件。 当选择了一个事件, 则与事件名称相关的事件过程, 就会显示在代码窗口中。 如果在对象框中显示的是“通用”, 则过程框会列出所有声明, 以及为此窗体所创建的常规过程。 如果正在编辑模块中的代码, 则过程框会列出所有模块中的常规过程。 在上述两实例中, 在过程框中所选的过程都会显示在代码窗口中。 模块中的所有过程会出现在一个单一滚动条的列表中, 它们是按名称的字母来排列的。可以从代码窗口上端的下拉式列表中选取一个过程, 此时指针会移到所选过程的第一行代码上面。 我们再来看一下代码窗口图中的通用声明部分,本示例中,我们写了三个通用声明: Option Explicit Public MyNumber As Integer Dim MyRange As Range 第一句代码 Option Explicit 1. 是强制显式声明本模块中的所有变量, 如果使用, Option Explicit 语句必须写在模块的所有过程之前。 2. 如果模块中使用了 Option Explicit, 则必须使用 Dim、 Private、 Public、 ReDim 或 Static 语句来显式声明所有的变量。 如果使用了未声明的变量名在编译时间会出现错误。 3. 如果没有使用 Option Explicit 语句, 除非使用 Deftype 语句指定了缺省类型, 否则所有未声明的变量都是 Variant 类型的。 4. 注意 使用 Option Explicit 可以避免在键入已有变量时出错, 在变量的范围不是很清楚的代码中使用该语句可以避免混乱。 5. 如果您是初学者,不提倡写此句代码或者在 VB 环境设置中不要勾选显式声明变量选项,因为大家对变量的定义还不理解. 第二句代码 Public MyNumber As I nteger 1. 在模块级别中使用, 用于声明公用变量和分配存储空间. 2. Public 语句声明的变量在所有应用程序的所有没有使用 Option Private Module 的模块的任何过程中都是可用的,简单地理解就是经 public声明的变量,在当前工程中是公用的. 3. MyNumbe 变量名 4. Integer 变量类型 第三句代码:Dim MyRange As Range 1. 通常会使用 Dim 语句来声明变量。 一个声明语句可以放到过程中以创建属于过程的级别的变量。 或在声明部分可将它放到模块顶部, 以创建属于模块级别的变量。 2. 当 dim 语句如本例中所示时,它将 MyRange 变量声明为本模块中公用;当 dim 语句的变量声明位于如 sub End Sub 中时, 仅为该过程所有, 过程运行结束, 变量即在内存中消失。 再看一下我们的 sub end sub 过程 Sub Example() End Sub 1. sub 语句: 声明子过程的名称, 参数, 以及构成其主体的代码。 无
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业资格-拍卖师真题库-1
- 2025年工程法规考试模拟试题及答案
- 新入党员考试试题及答案
- 银行信贷考试试题及答案
- 防旱抗旱面试题及答案
- iq测试题及答案
- 幼教资格考试试题及答案
- 邮政综合知识考试试题及答案
- 大疆飞行证试题及答案
- 厨师做菜考试题及答案
- GB/T 33289-2016馆藏砖石文物保护修复记录规范
- GB/T 2506-2005船用搭焊钢法兰
- GB/T 15256-2014硫化橡胶或热塑性橡胶低温脆性的测定(多试样法)
- 小学三年级下册道德与法治课件-10.爱心的传递者-部编版(25张)课件
- GB/T 1095-2003平键键槽的剖面尺寸
- 婴幼儿食品领域:贝因美企业组织结构及部门职责
- 《光的直线传播》教学设计 省赛一等奖
- 人工智能的诞生简述课件
- 子宫破裂的护理查房
- 出货检验报告
- 无机材料科学基础-第3章-晶体结构与晶体中的缺陷
评论
0/150
提交评论