vba开发实用指南
唐大中 附录文章
vba(visual basic for application)是office自带的二次开发工具,可为日常办公带来极大的便利。本文讲述office各个成员vba开发的常用对象和其相关的属性、方法和事件(包括word、excel、powerpoint等),并给出相关的实例代码。
一、vba基础
1.什么是vba
在office对于一些烦琐、重复的操作,用户可以通过“宏”来实现。“宏”即是由一系列命令和指令组合而成的命令集,其本质是vba代码组成的程序。vba是微软在其开发的应用程序中共享的通用自动化语言。
2.录制/运行宏
vba初期开发可通过录制“宏”的操作来获取代码,在office中几乎所有的操作均可通过录制“宏”来获取代码。这里,我们通过一个简单的“宏”录制实例来学习:在word中将所有的“电脑”字样替换为“计算机”,并插入一张4行2列的表格。
在office中录制宏,可单击“工具→宏→录制新宏…”菜单命令实现,单击该命令后将出现“录制宏”对话框,如图1所示。
其中,“宏名”框用于为录制的宏设置名称,可使用默认的“macro1”。“工具栏”和“键盘”二个按钮分别用于设置宏的触发位置。“将宏保存在”框可设置宏的保存位置,一般包括“normal.dot”(共用模板)和当前文档2种,建议保存在当前文档中,以免对所有文档产生影响。在“说明”框中可输入对该宏的相关说明。单击“确定”按钮,即可开始录制宏。此时在文档编辑界面中将显示“宏录制”工具栏。该工具栏有2个与录音机非常类似的按钮,第一个按钮为“停止录制”,第二个按钮为“暂停录制”。在录制过程中可随时通过这二个按钮来进行控制。
随后按常规操作来实现前述的任务,操作完成后单击“停止录制”按钮,结束录制即可。
注意:录制“宏”时可使用鼠标单击菜单和按钮,但无法录制鼠标在文档窗口中的移动,因此必须通过键盘来实现这些动作。此外,office中所有录制的“宏”,其名称的首字符必须为字母或汉字、数字及下划线(名称最多可为255个字符),且“宏”名称中不允许包含空格。
运行已录制的“宏”,可单击“工具→宏→宏”菜单命令。在出现的“宏”对话框的“宏名”下拉框中选择需运行的宏,然后单击“运行”按钮即可。随后word将自动重现前述执行的操作,避免了重复的办公操作。
3.宏的局限性
虽然office的大部分操作均可用录制“宏”的方法来保存,但录制的“宏”仅“忠实”地再现了特定的操作,对于一些需要进行逻辑判断和流程控制的操作,则显得力不从心,如自动替换多个不同的内容时,按录制“宏”的方式操作,需要按替换内容的数量录制多个“宏”,且每个“宏”仅可用于某个内容的替换,反而为工作增添了麻烦。
录制“宏”存在很多局限性,除无法进行逻辑判断和流程控制操作外,还包括很多。如交互能力较差、无法显示office的内置对话框、无法显示用户自定义的窗体和无法创建复杂的工具栏或修改菜单等。
4.vba编辑环境
虽然“宏”存在很多局限性,但通过录制“宏”获取了vba代码后即可通过vba编辑器来为代码添加逻辑控制并设计流程等。以word 2002为例,“宏”录制完成后,可在运行宏对话框中选择录制的宏并单击“编辑”按钮,即可显示vba编辑环境,如图2所示。
vba编辑环境由工程资源管理器、属性窗口和代码编辑/窗体设计窗口等部分组成。在工程资源管理器中列出当前打开的所有vba项目,属性窗口用于设置相关对象的属性,代码编辑/窗体设计窗口则可输入模块的代码或编辑窗体和类模块。
二、vba开发共用对象详解
vba和其他面向对象的开发语言类似,同样有非常多的对象组成,且不同的office成员即提供了大量的开发对象,如工具栏、office助手、内置对话框和窗体等。
(一)工具栏及其控件对象
在office中通过vba开发工具栏和菜单,需使用office提供的commandbar、commandbarbutton、commandbarcombobox等对象,这些对象即代表工具栏、工具栏按钮和工具栏下拉框,通过这些对象可编制出各类复杂的工具栏或菜单。
1.commandbars集合
该集合代表office所有的工具栏,可用名称或索引号指定菜单栏或工具栏,但仅可用名称指定一个菜单、快捷菜单或子菜单。如两个或两个以上自定义菜单或子菜单名称相同,则返回第一个具有该名称的对象。
其add方法用于新建一个工具栏,并返回 commandbar对象。
语法:expression.add(name, position, menubar, temporary)
参数说明:
name为可选的variant 类型,代表新工具栏的名称。如果省略,则使用默认的名称;position为可选的variant 类型,代表新工具栏的位置。该参数值可通过vba常量进行设置,如msobarleft、msobartop、msobarright、msobarbottom常量(设置新工具栏位于软件工具栏中位置);msobarfloating常量(代表新工具栏可移动);msobarpopup常量(代表新工具栏为快捷菜单)等;menubar为可选的variant 类型,用于设置是否用新工具栏替换活动工具栏;temporary为可选的variant 类型,用于设置新工具栏是否暂时有效。
2.commandbar对象
该对象代表应用程序中的工具栏,新建工具栏的控件均以该对象为载体。
(1)controls属性:返回commandbarcontrols对象,代表指定工具栏中的所有控件。
(2)namelocal属性:返回由应用程序版本语言所设置的工具栏名称,如对软件的内置工具栏设置会出现错误。
(3)position属性:返回或设置工具栏的位置,值可通过vba常量进行设置,如msobarleft、msobartop、msobarright、msobarbottom、msobarfloating、msobarpopup或msobarmenu等。
(4)type属性:返回或设置工具栏的类型,值可通过vba常量进行设置,如msobartypenormal(工具栏为普通类型)、msobartypemenubar(工具栏为菜单类型)、msobartypepopup(工具栏为弹出菜单类型)等。
(5)reset方法:将内置工具栏重置为默认设置,在恢复软件原有工具栏或菜单时非常有用。重置内置工具栏将删除其中的自定义控件并恢复其内置控件。
3.commandbarcontrols集合
该集合代表工具栏中的所有工具栏控件。
其add方法用于在commandbarcontrols集合中增加一个工具栏控件。
4.commandbarcontrol对象
该对象代表工具栏控件,对自定义工具栏控件,可使用 commandbarbutton、commandbarcombobox和commandbarpopup对象进行定义,而对软件内置的控件进行操作,而该控件又无法使用上述三个对象表示,则可使用commandbarcontrol对象。
(1)begingroup属性:用于设置工具栏控件是否分组显示。
(2)caption属性:用于设置工具栏控件的标题文字,并可作为默认的控件屏幕提示。
(3)id属性:用于设置commandbarbutton、commandbarcombobox和commandbarcontrol对象的功能,这些控件可直接设置为内置工具栏控件的id,这样该控件即具备了软件内置的相应功能,自定义控件的id属性均需设置为1。
(4)copy方法:将工具栏控件复制到已有的工具栏中。
语法:expression.copy(bar, before)
参数说明:
bar为可选的variant 类型,代表目标工具栏,如果省略,则控件将复制到自身所在的工具栏;before为可选的variant 类型,代表新控件在指定工具栏的位置,即新控件将添加至该位置的控件前,如果省略,则控件将复制到工具栏的末尾。
(5)type属性:返回工具栏控件的类型,可通过vba常量进行引用,常用的工具栏控件类型如下表所示:
常量名称
含义
msocontrolbutton
控制按钮
msocontrolbuttondropdown
带下拉列表的按钮
msocontrolbuttonpopup
带弹出菜单的按钮
msocontrolcombobox
下拉组合控制框
msocontroldropdown
下拉列表控制框
msocontroledit
文本框
msocontrolexpandinggrid
可扩展的表格
msocontrolgraphiccombo
图像下拉组合框
msocontrolgraphicdropdown
图像下拉列表框
msocontrolgrid
表格
msocontrolpopup
弹出菜单
5.commandbarbutton对象
该对象代表工具栏的按钮控件。
(1)onaction属性:返回或设置visual basic代码过程名(该代码过程不可使用参数),该过程将在单击按钮后运行。
(2)style属性:返回或设置工具栏按钮的显示方式。值可通过vba常量进行设置,常用的工具栏按钮控件类型如下表所示:
常量名称
含义
msobuttonicon
包含图标的按钮
msobuttoncaption
包含标题的按钮
buttoniconandcaption
包含图标和标题的按钮
msobuttoniconandcaptionbelow
包含图标和标题,且标题位于底部的按钮
msobuttoniconandwrapcaption
包含图标和标题,且标题自动换行的按钮
msobuttonwrapcaption
包含标题,且标题自动换行的按钮
(3)tooltiptext属性:返回或设置工具栏按钮控件的屏幕提示。
(4)faceid属性:返回或设置工具栏按钮的图标编号,设置工具栏按钮的外观而非其功能,自定义图标的工具栏按钮,其 faceid属性值为 0。
(5)copyface方法:将工具栏按钮控件的图标复制到剪贴板。
(6)pasteface方法:将剪贴板的图标内容粘贴至工具栏按钮控件。
(7)execute方法:运行工具栏控件对应的过程或内置命令。
6.commandbarcombobox对象
该对象代表工具栏中的组合框控件。
(1)dropdownlines属性:返回或设置组合框控件的行数,如将其设置为 0,则控件行数将取决于列表的条目数。
(2)list属性:返回或设置组合框控件中某列表项的值,对内置组合框控件只读。
(3)onaction属性:返回或设置visual basic代码过程名(该代码过程不可使用参数),该过程在单击或更改组合框控件值时运行。
(4)type属性:返回或设置组合框控件的显示方式。
(5)additem方法:用于在组合框控件中添加一个列表项,且该组合框控件必须为自定义的控件。
(6)removeitem方法:用于从组合框控件中删除一个列表项。
(二)助手对象
office助手是一组卡通动画人物,这些助手可提供友好的信息提示,并可通过自定义对话框(又称“气球”)的文字格式和控件来实现简单的交互。
1.assistant对象
该对象代表office助手,可通过application对象的assistant属性返回assistant对象。默认助手为“大眼夹”(即“clippit”),用户可在右键单击助手后出现的快捷菜单中单击“选择助手”菜单项,在弹出的“office助手”对话框中即可选择不同的助手。
(1)animation属性:用于返回或设置office 助手的动画效果。如应用于 balloon对象,则“助手”仅在显示气球时才会出现动作,可通过常量赋值,常用的常量及其含义如下表所示:
常量名称
代表的动作
msoanimationappear
助手出现
msoanimationbeginspeaking
助手开始说话
msoanimationcheckingsomething
助手检查动作
msoanimationdisappear
助手消失
msoanimationgoodbye
助手说“再见”
msoanimationgreeting
助手致欢迎的动作
msoanimationidle
助手休息的动作(为默认动画效果类型)
msoanimationprinting
助手打印的动作
msoanimationsaving
助手保存的动作
msoanimationsearching
助手开始查找的动作
msoanimationthinking
助手考虑的动作
(2)assistwithalerts属性:用于设置助手气球是否发送给应用程序警告信息。
(3)assistwithhelp属性:用于设置当用户按f1键显示帮助时助手是否出现。
(4)assistwithwizards属性:用于设置助手是否提供向导型的联机帮助。
(5)featuretips属性:用于设置助手是否更有效地提供有关应用程序功能信息。
(6)guesshelp属性:用于设置助手是否显示帮助主题列表。
(7)filename属性:用于设置助手所使用的文件名,助手文件的扩展名为“acs”,一般位于office的安装目录下。其中“孙悟空”为mnkyking.acs;“大眼夹”为clippit.acs;“恋恋”为offcat.acs;“聪聪”为rocky.acs;“七巧板”为logo.acs;“小灵通”dot.acs;“美丽家园”为mnature.acs;“f1”为f1.acs。
(8)newballoon属性:用于新建助手气球,并返回balloon对象。
(9)on属性:用于设置是否使用助手。
(10)sounds属性:用于设置助手是否发出与动画对应的声音。
(11)tipofday属性:用于设置每次启动office时,助手是否显示专用的提示。
2.balloon对象
该对象代表气球,助手可在该气球中显示标题、文字和一些控件,通过newballoon属性可返回balloon对象,且任意时刻仅有一个气球可视。
(1)balloontype属性:用于设置助手所用的气球类型,可通过常量赋值。创建balloon对象时,初始值为msoballoontypebuttons常量。
(2)button属性:用于设置助手气球底部按钮类型。创建balloon对象时,初始值为msobuttonsetok。
(3)icon属性:用于设置助手气球左上角的图标类型,可通过常量赋值。
(4)checkboxes属性:返回ballooncheckboxes集合,即气球中的所有复选框。
(5)heading属性:用于设置助手气球中的标题。气球标题和文本均支持包含下划线和系统调色板16色的文字。
如需显示包含下划线的文字,可通过“{ul}”、“{ul 1}”语法来开始下划线和“{ul 0}” 语法来清除下划线;如需改变文字颜色,可通过“{cf number}”语法,其中number常数为系统调色板支持的16种颜色。
(6)labels属性:返回balloonlabels 集合,即气球中的所有标签。
(7)mode属性:用于设置气球的模态,即是否在显示气球的同时允许用户在程序中继续工作。
(8)text属性:用于设置助手在气球标签、复选框或直接显示部分的文字。
(9)close方法:用于关闭活动的非模态气球,仅在回调过程中才可使用。
(10)show方法:用于显示指定的气球对象。
3.ballooncheckbox对象
该对象代表气球中的复选框控件。
checked属性:返回是否已选择气球中的指定复选框。
(三)内置对话框对象
office使用了大量的内置对话框,在word和excel中提供了开发接口,使开发者可充分利用内置对话框实现很多操作,尤其在word中可使用多种方法显示内置对话框,实现不同的功能需求,这里,我们以word的内置对话框为例进行讲解。
1.dialogs集合对象
该集合对象代表word或excel中的dialog对象集合,其中每个dialog对象均代表一个内置对话框,无法在dialogs集合中创建新的内置对话框,也无法添加对话框。
2.dialog对象
该对象代表内置对话框。
(1)commandname属性:用于返回显示指定内置对话框对应的过程名。
(2)defaulttab属性:用于设置显示指定对话框时,其被激活的选项卡。
(3)display方法:用于显示指定的内置对话框,并直至用户关闭该对话框或超时,使用显示内置对话框时,不会执行任何操作(即仅用于显示),但可返回用户关闭对话框时所单击的按钮代号。
其中,返回-2,代表“关闭”按钮;返回-1,代表“确定”按钮;返回0,代表“取消”按钮;返回大于 0的值,则1代表第一个按钮,2代表第二个按钮,以此类推。
(4)execute方法:用于应用内置对话框的当前设置。
(5)show方法:用于显示并执行内置对话框,即如同用户通过菜单或工具栏打开对话框,和display方法相同,均返回用户关闭对话框时所单击的按钮代号。
(6)update方法:用于更新内置对话框的参数值。
3.显示内置对话框
通过vba代码可控制内置对话框的显示,如需调用指定的内置对话框,可将dialogs属性通过常量进行赋值,如“dialogs(wddialogfileopen).show”可显示word的“打开”对话框。在前述代码中,如将该语句的返回值赋予dialog变量,即可通过该变量返回或设置对话框的选项,代码如下所示:
set testdialog = dialogs(wddialogfileopen)
合理使用内置对话框可实现很多的功能,word和excel中提供接口的内置对话框非常多,限于篇幅,本文不做详细介绍,读者可参考vba的联机帮助。
(四)窗体和相关控件对象
vba的编辑器和vb非常类似,因此也提供了窗体和相关的控件,但又由于office的特点使vba中的窗体、控件和vb存在一些差异。
1.用户窗体知识点
窗体是程序实现和用户交互的接口,通过窗体不仅可改善程序的界面友好性,而且可进一步增强、完善程序的功能。在vba编辑器中可创建用户窗体,在工程资源管理器中右键单击项目,在出现的菜单中选择“插入→用户窗体”命令,随后在设计界面中将显示默认窗体和控件工具箱,该控件工具箱和vb的控件工具箱很类似,如图3所示。
2.用户窗体常用控件
虽然vba窗体开发所用的控件和vb较为类似,但其属性和方法和vb存在一定的差异:
(1)标签控件:该控件用于显示不可编辑的文本,默认属性为caption属性,默认事件为click事件。
(2)文本框控件:该控件用于显示可编辑的文本信息,是vba开发中最常用编辑控件,默认属性为value属性,默认事件为change事件。
(3)复合框控件:该控件将列表框和文本框进行结合,用户可进行输入和列表框选择操作,默认属性为value属性,默认事件为change事件。
(4)列表框控件:该控件用于显示值列表,用户可选择一个或多个列表项,vba中的列表框可通过列表形式和选项按钮或复选框的形式使用,默认属性为value属性,默认事件为click事件。
(5)复选框控件:该控件用于显示选择的状态,即允许用户从两个值(如true或false)中选择一个。如选择则将显示标记,默认属性为value属性,默认事件为click事件。
(6)选项按钮控件:该控件用于显示多选项中每一项的选择状态,默认属性为value属性,默认事件为click事件。
(7)切换按钮控件:该控件用于显示选择状态,默认属性为value属性,默认事件为click事件。
(8)框架控件:该控件用于创建功能或视觉角度的控件组,默认事件为click事件。
(9)命令按钮控件:该控件用于启动、结束或中断操作,其click事件是窗体编程中最常用的事件代码,默认属性为value属性,默认事件为click事件。
(10)表头控件:该控件用于将一系列相关控件显示为一个多表的集合,默认属性为selecteditem属性,默认事件为change事件。
(11) 多页控件:该控件用于将多页面的内容以单个控件的方式实现,在处理不同类别的大量信息时很有用,默认事件为change事件。
(12)滚动条控件:该控件用于按滚动块位置,返回或设置变量值,默认属性为value属性,默认事件为change事件。如需创建横向或纵向的滚动条,可在窗体设计时横向或纵向拖动滚动条控制点。
(13)旋转按钮控件:该控件用于增加及减少变量数值,默认属性为value属性,默认事件为change事件。
(14)图像控件:该控件用于显示图片,其支持的图片文件格式包括:bmp、cur、gif、ico、jpg和wmf等,默认事件为click事件。
在vba窗体设计中,可将一些开发中使用的控件全部选择后,直接拖至工具箱中,工具箱会添加一个“控件组”,在窗体设计中可直接将该控件组放置于窗体,大大提高了效率(该特点为vba所独有)。
如开发者需使用vba标准控件箱未提供的其他控件,可右键单击工具箱,在出现的菜单中选择“附加控件”命令,在出现的对话框中进行选择即可。
3.用户窗体常用事件
用户窗体的常用事件和vb窗体有一定的区别。
(1)initialize事件:该事件发生在加载对象后和显示对象前,通常在该事件中初始化变量值或设置控件的属性。
(2)queryclose事件:该事件发生在用户窗体关闭前,通常在该事件中检查用户窗体中未完成的操作。
cancel参数:整型,如将该参数设置未非零值,则可阻止关闭用户窗体。
closemode参数:该参数用于获取触发queryclose事件的原因。
(3)terminate事件:该事件将所有引用的对象变量设置为nothing常量,即删除对象的引用。该事件发生在卸载对象后。如非正常退出程序,则不会触发。
(五)类模块
vba开发也提供了类模块结构,使开发者可将常用操作通过类进行合理封装,实现代码的复用和程序的结构化。
1.创建类模块
vba中创建类模块非常简单,在vba编辑器的工程资源管理器中右键单击项目,在出现的菜单中选择“插入→类模块”命令,随后在“工程资源管理器”中会出现添加的类模块,默认名称为“类1”,单击该类模块,可设置其属性,一般需设置其“name”属性,以方便使用。双击该类模块,即可按窗体的操作方法来输入代码。
2.类模块常用事件
类模块中包含initialize和terminate二个事件。
(1)initialize事件:该事件用于初始化类模块所用的数据。当程序中创建类模块时触发该事件。
(2)terminate事件:当程序中类实例从内存删除时触发该事件,且该事件仅在程序正常结束时触发。
三、office xp开发对象知识详解
vba程序的开发主要由大量的对象组成。这里,我们精选了常用的office vba开发常用对象的知识,以方便读者速查。
(一)word 2002开发对象
1.application对象
该对象代表 word 应用程序,通过该对象可访问word中的其他所有对象。
(1)activedocument属性:返回document对象,代表活动文档。
(2)activeprinter属性:返回或设置当前打印机的名称。
(3)activewindow属性:返回window对象,代表活动窗口。
(4)documents属性:返回documents集合,代表所有打开文档。
(5)selection属性:返回selection对象,代表已选择的范围或插入点。
(6)windows属性:返回windows集合,代表所有文档窗口。
(7)activate方法:用于激活指定的对象。
(8)printout方法:打印全部或部分的文档。
(9)quit方法:用于退出word程序。
2.document对象
该对象代表word中打开的文档。通过“documents(index)”的语法可获取document对象,其中index参数代表文档的名称或索引号,此外还可用activedocument属性获取当前编辑的文档。
(1)attachedtemplate属性:返回template对象,代表活动文档关联的模板。
(2)builtindocumentproperties属性:返回documentproperties集合,代表指定文档的所有内置属性,如作者、主题或关键词等。
(3)characters属性:返回characters集合,代表文档中的字符。
(4)tables属性:返回tables集合,代表文档中所有的表格。
(5)checkgrammar方法:检查字符串是否存在语法错误。
(6)checkspelling方法:用于检查字符串是否存在拼写错误。
(7)computestatistics方法:用于获取指定文档的统计数据,如字数、页数等。
(8)printpreview方法:在打印预览和视图方式间进行切换。
(9)save方法:用于保存文档或模板。
(10)undo方法:用于撤消文档的最后一次操作。
3.bookmark对象
该对象是bookmarks集合中的元素,代表文档中的书签。通过“bookmarks( index )”的语法可获取bookmark对象,其中index参数代表书签名称或索引号。
(1)select方法:用于选择指定的书签。
(2)delete方法:用于删除指定的书签。
4.field对象
该对象是fields集合中的元素,代表文档中的域。通过“fields(index) ”的语法可获取field对象。
5.template对象
该对象是templates集合中的元素,代表文档模板。通过“templates(index)”的语法可获取template对象。
6.fontnames对象
该对象代表有效的字体名称列表。通过fontnames、landscapefontnames 或 portraitfontnames属性可获取fontnames对象。
7.options对象
该对象代表 word 的应用程序和文档选项。
8.autotextentries集合对象和autotextentry对象
autotextentries集合对象由autotextentry对象组成,代表模板中所有的“自动图文集”词条。autotextentry对象代表单一的“自动图文集”词条。
insert方法:用于在指定的范围中通过插入“自动图文集”词条的方式来替换原内容。
9.selection对象
该对象代表当前文档的选择内容,可为区域或插入点,每个文档仅有一个 selection对象,且任意时刻仅可激活一个selection对象,通过selection属性可获取selection对象。
(1)text属性:返回或设置所选内容中的文本。
(2)copy方法:将指定对象复制到剪贴板。
(3)paste方法:将剪贴板内容粘贴至选择区域。
(4)typeparagraph方法:用于插入新段落,等同于在编辑时按回车键。
(5)typetext方法:用于插入指定的文本。
(6)wholestory方法:用于扩展选择内容,并包含整个文字部分。
(7)goto方法:将插入点移至指定位置。
(8)homekey方法:等同于按下“home”键。
(9)endkey方法:等同于按下“end”键。
(二)excel 2002开发对象
1.application对象
该对象代表excel应用程序,通过该对象可访问excel中的其他所有对象。
(1)activecell属性:返回range对象,代表活动窗口或指定窗口的活动单元格。
(2)activechart属性:返回chart对象,代表活动图表。
(3)activesheet属性:返回worksheet对象,代表活动工作簿中的活动工作表。
(4)activeworkbook属性:返回workbook对象,代表活动的工作簿。
(5)cells属性:返回 range对象,代表活动工作簿中所有单元格。
(6)charts属性:返回sheets集合,代表活动工作簿中所有图表。
(7)range属性:返回range对象,代表单元格或单元格区域。
(8)sheets属性:返回sheets集合,代表当前工作簿的所有工作表。
(9)statusbar属性:返回状态栏的文本。
(10)workbooks属性:返回workbooks集合,代表所有打开的工作簿。
(11)worksheets属性:返回sheets集合,代表活动工作簿的所有工作表。
(12)calculate方法:用于对指定区域的单元格进行计算。
(13)evaluate方法:用于将字符串的值进行转义操作,即可将以字符串表示的运算式进行求解的操作。
(14)inputbox方法:用于显示接收输入的对话框,并返回对话框中输入的信息。
(15)quit方法:用于退出excel应用程序。
2.addin对象
该对象代表加载宏,通过“addins(index)”语法可返回addin对象,其中index参数为加载宏标题或编号。
fullname属性:返回加载宏的文件名。
3.chart对象
该对象代表工作簿中的图表,包括嵌入式图表和单独的图表。
(1)chartarea属性:返回chartarea对象,代表指定图表中的全部图表区域。
(2)charttitle属性:返回charttitle对象,代表指定图表的标题。
(3)charttype属性:返回或设置图表的类型。
(4)datatable属性:返回datatable对象,代表图表数据表。
(5)walls属性:返回walls对象,代表三维图表的背景墙。
4.workbook对象
该对象代表工作簿。
(1)styles属性:返回styles集合,代表指定工作簿的所有样式。
(2)add方法:用于新建工作簿,并将其设置为活动工作簿。
(3)open方法:用于打开工作簿。
(4)opentext方法:用于载入文本文件,并将其进行分列处理,然后在工作表中插入经过分列处理的文本数据。
5.worksheet对象
该对象代表工作表,通过“worksheets(index)”的语法可获取worksheet对象,其中index参数工作表索引号或名称。
(1)autofilter属性:用于设置是否进行筛选。
(2)usedrange属性:返回range对象,代表指定工作表中的已用区域。
(3)printout方法:用于打印指定的对象。
(4)printpreview方法:将切换之打印预览视图。
(5)select方法:用于选择指定的对象。
6.range对象
该对象代表选择区域,是excel开发中一个常用的对象。
(1)address属性:返回对指定区域的引用名称。
(2)areas属性:返回areas集合,代表多重选择区域中的所有区域。
(3)column属性:返回第一块指定区域中的第一列的序号。
(4)columns属性:返回range对象,代表指定区域中的所有列。
(5)columnwidth属性:返回或设置指定区域中所有列的列宽。
(6)formula属性:用于设置range对象使用的公式。
(7)mergearea属性:返回range对象,代表指定单元格的合并范围。
(8)mergecells属性:返回区域中是否包含合并单元格。
(9)numberformat属性:返回或设置指定对象的格式代码。
(10)row属性:返回第一块指定区域中的第一行的序号。
(11)rows属性:返回range对象,代表指定区域中的所有行。
(12)activate方法:用于激活对象。
(13)applynames方法:用于将名称应用于指定的单元格。
(14)autofill方法:用于对指定的单元格进行自动填充。
(15)autofit方法:用于将列宽和行高调整为适当值。
(16)find方法:用于在区域内查找特定信息,并返回代表第一个包含所查找信息的单元格。
(17)merge方法:用于从指定的range对象中创建合并单元格。
(18)replace方法:用于在指定区域内查找和替换。
(19)subtotal方法:用于创建指定区域内的分类汇总。
(三)powerpoint 2002开发对象
1.application对象
该对象代表powerpoint应用程序,通过该对象可访问powerpoint中的其他所有对象。
(1)active属性:返回指定窗格是否被激活。
(2)activepresentation属性:返回presentation对象,代表活动窗口中打开的演示文稿。
(3)activewindow属性:返回documentwindow对象,代表当前文档窗口。
(4)presentations属性:返回presentations集合,代表所有打开的演示文稿。
(5)slideshowwindows属性:返回 slideshowwindows集合,代表所有打开的幻灯片放映窗口。
(6)quit方法:用于退出powerpoint程序。
2.documentwindow对象
该对象代表文档窗口。使用“windows(index) ”语法可返回documentwindow对象。
(1)activepane属性:返回pane对象,代表文档窗口中的活动窗格。
(2)panes属性:返回panes集合,代表文档窗口中的所有窗格。
(3)viewtype属性:返回指定的文档窗口内的视图类型。
3.presentation对象
该对象代表演示文稿,通过“presentations(index)”语法可返回presentation对象。
(1)builtindocumentproperties属性:返回documentproperties集合,代表演示文稿的所有文档属性。
(2)colorschemes属性:返回colorschemes 集合,代表演示文稿的配色方案。
(3)pagesetup属性:返回pagesetup对象,用于控制演示文稿的幻灯片页面设置属性。
(4)slidemaster属性:返回幻灯片母版对象。
(5)slideshowsettings属性:返回slideshowsettings对象,代表演示文稿的幻灯片放映设置。
(6)slideshowwindow属性:返回幻灯片放映窗口对象。
(7)addtitlemaster方法:为演示文稿添加标题母版。
(8)applytemplate方法:对演示文稿应用设计模板。
4.slideshowwindow对象
该对象代表幻灯片放映窗口。
isfullscreen属性:用于设置是否全屏显示幻灯片放映窗口。
5.master对象
该对象代表幻灯片母版、标题母版、讲义母版或备注母版。
textstyles属性:为幻灯片母版返回textstyles 集合,代表标题文本、正文文本和默认文本。
6.slide对象
该对象代表幻灯片。
(1)slideid属性:返回幻灯片的唯一标识符。
(2)slideindex属性:返回幻灯片在slides集合中的索引号。
7.slideshowview对象
该对象代表幻灯片放映窗口中的视图。
(1)acceleratorsenabled属性:用于设置是否允许在幻灯片放映时使用快捷键。
(2)currentshowposition属性:返回当前幻灯片在放映中的位置。
(3)drawline方法:在指定幻灯片放映视图中绘制直线。
(4)erasedrawing方法:用于清除通过drawline方法或绘图笔工具在放映中绘制的直线。
(5)gotoslide方法:用于切换指定幻灯片。
四、vba综合开发实例温馨贺卡向导
(一)例程分解
本例程是一个简单的贺卡向导,可直接运行并可辅助生成简单的贺卡。程序主界面与word的标准向导程序类似,单击“上一步”和“下一步”按钮或直接单击窗体左侧的切换按钮均可直接跳转至相应步骤。单击“取消”按钮将关闭向导窗体,如图4所示。
单击“下一步”按钮切换至下一页,在该页面中可选择贺卡的节日并输入发送者和接受者的姓名,如图5所示。
单击“下一步”按钮切换至下一页,在该页面中可输入贺词,如图6所示。
单击“下一步”按钮切换至向导程序的末一页,单击“完成”按钮即可生成文档。生成的文档将包含将用户在前述步骤中填写的信息,生成一份简单的贺卡。
(二)程序知识点
1.向导的编制原理
向导程序的本质即前述的word模板文件(dot文件),唯一区别在于其扩展名为“wiz”,因此编制向导程序首先需编制模板并调试代码,在调试无误后将扩展名改为“wiz”即可。向导编制的常规步骤如下所述:
(1)创建向导所需的自动图文集:向导所需的自动图文集是包含书签的自动图文集,最后生成文档时即调用了预保存的图文集,而在word中用于定位的书签对象,可在需填写输入内容的位置上帮助程序实现定位并替换。该步骤是编制向导程序的关键。
(2)编辑窗体和模块:向导程序需通过窗体来实现交互功能,因此通过合理运用控件,完全可设计出美观易用的窗体,然后对窗体的控件进行事件编程,实现流程控制。窗体设计完毕后,需通过模块来保存通用的功能,常用的功能包含生成文档、替换书签和删除书签等。
(3)设置向导程序入口:向导程序需通过特定的事件来触发,建议在“thisdocument”对象的“new”事件中输入调用向导程序入口的代码。document对象的事件包括new事件(在创建基于模板的文档时触发。按功能分析,向导程序入口即通过该事件执行)、open 事件(在打开文档时触发)和close事件(在关闭文档时触发)。
2.界面设计知识点
(1)向导程序需逐步引导用户,因此建议使用多页控件(multipage)实现界面切换。
(2)vba的窗体设计中未提供类似vb的控件数组功能,因此需访问controls集合对象来控制一些外观和功能均类似的控件。
(3)由于从前述知识点可得向导程序本质为模板文件,因此开发者可直接打开word已提供的向导程序(如“实用文体向导”等),然后通过工程资源管理器导出其界面窗体,然后在此基础上进行参考和修改,可大大提高编制的效率。
(4)controls集合:窗体的controls集合代表其包含的全部控件。controls集合中的每个控件均有唯一的索引,也可通过控件名称来引用。在向导程序中,为有效地控制功能和外观均类似的控件(如切换按钮),可通过名称引用来枚举访问窗体的controls集合,即可控制这些控件。
(5)多页控件:多页控件(multipage)是pages集合的容器,每个多页控件均包含一个或多个page对象,其常用属性和方法如下:
value属性:为多页控件默认属性,返回当前活动页面的索引号,从“0”开始编号,依此类推。
style属性:用于设置多页控件标签的显示风格,在向导中建议设置为“2”(即不显示表头)。
(6)page对象:该对象代表多页控件的页面。每个 page对象均可放置不同的控件,以实现多界面切换的效果,第一个page对象默认名称为“page1”,其常用属性和方法如下:
picture属性:用于设置页面的背景图片。
picturetiling属性:用于设置是否平铺图片。
picturesizemode属性:用于设置显示背景图片的方式。
(三)程序实现步骤
1.创建向导所需的自动图文集
通过前述内容可得创建向导所需的自动图文集是关键的步骤,因此首先在编辑界面中输入相关的文字,然后在需插入内容的位置添加书签,最后选择全部内容,以“hk”命名并保存于模板的自动图文集中。如图7所示:
2.编制窗体
在vba编辑器的工程资源管理器中添加窗体,放置多页控件、标签、文本框、列表框等控件(也可采用前述的导入并修改的方法来设计窗体),由于该窗体使用的控件较多,限于篇幅,不在逐一介绍,可按效果图自行设计,本文仅对一些需在代码中使用的控件进行介绍。
首先切换至多页控件的第二页,该页面中需编程的控件位置和名称如图8所示:
如图8所示,其中“frmhkwiz”为用户窗体,“page1”为多页控件的页面对象,“txtfsz”和“txtjsz”均为文本框控件,“shpmap0”至“shpmap3”、“lblmap0”至“lblmap3”均为label控件,“lstjr”为列表框控件。切换至多页控件的第三页,该页面中需编程的控件位置和名称如图9所示:
如图9所示,其中“page2”为多页控件的页面对象,“shpchartpath”为标签控件,“txthc”为文本框控件,“cmdcancel”、“cmdback”、“cmdnext”和“cmdfinish”均为命令按钮控件。
窗体界面设计完毕后,切换至代码编辑窗口,首先输入常量声明,代码如下所示:
代表页面数量
const p_count = "3"
标签名称的常量
const const_lbl = "lblmap"
标签名称的常量
const const_shp = "shpmap"
然后输入公共变量,代码如下所示:
用于保存当前页面编号的变量
dim indexpanel as integer
输入自定义的过程代码,如下所示:
初始化控件的过程
private sub init_controls()
with lstjr
.additem "圣诞节"
.additem "中秋节"
.additem "国庆节"
end with
end sub
切换页面的过程
private sub changepage(inewpanel as integer)
if indexpanel = inewpanel or fwizardcallback then
exit sub
end if
通过controls集合对象来实现页面切换效果
frmhkwiz.controls(const_shp & indexpanel).backcolor = vbwhite
frmhkwiz.controls(const_lbl & indexpanel).fontbold = false
indexpanel = inewpanel
frmhkwiz.controls(const_shp & indexpanel).backcolor = vbgreen
frmhkwiz.controls(const_lbl & indexpanel).fontbold = true
mpgwizardpage.value = indexpanel
end sub
最后输入各控件的事件代码,如下所示:
用于模拟切换按钮的标签单击事件
private sub lblmap0_click()
changepage (0)
end sub
private sub lblmap1_click()
changepage (1)
end sub
private sub lblmap2_click()
changepage (2)
end sub
private sub lblmap3_click()
changepage (3)
end sub
private sub shpmap0_click()
changepage (0)
end sub
private sub shpmap1_click()
changepage (1)
end sub
private sub shpmap2_click()
changepage (2)
end sub
private sub shpmap3_click()
changepage (3)
end sub
private sub shpmap4_click()
changepage (4)
end sub
“上一步”按钮单击事件
private sub cmdback_click()
if indexpanel > 0 then
changepage (indexpanel – 1)
end if
end sub
“下一步”按钮单击事件
private sub cmdnext_click()
if indexpanel < p_count then
changepage (indexpanel + 1)
end if
end sub
“取消”按钮单击事件
private sub cmdcancel_click()
关闭窗体
unload me
end sub
“完成”按钮单击事件
private sub cmdfinish_click()
application.screenupdating = false
调用模块中创建文档的过程,即窗体和模块的接口过程
createnewdoc (true)
end sub
窗体初始化事件
private sub userform_initialize()
indexpanel = 0
mpgwizardpage.value = 0
changepage (0)
init_controls
end sub
3.编制模块
模块用于保存向导程序中公用的代码,在工程资源管理器中添加标准模块,命名为“common”,然后输入代码(也可模仿窗体的导入操作,将word提供的向导程序包含的模块导入,参考并使用其中的很多过程),如下所示:
启动向导,即向导程序的入口
public sub startwizard()
显示窗体
frmhkwiz.show
end sub
创建新文档的过程,通过“fdummy”参数可使该public类型的过程不在word的“宏”列表中出现。
public sub createnewdoc(fdummy as boolean)
application.screenupdating = false
设置鼠标为“等待”形状
system.cursor = wdcursorwait
获取向导程序的模板
set objwiztemplate = activedocument.attachedtemplate
application.displayautocompletetips = true
插入已创建的自动图文集
activedocument.attachedtemplate.autotextentries("hk").insert selection.range, true
activedocument.select
调用替换书签的过程,将窗体中输入的内容在文档中进行替换
replacebookmark "jr", frmhkwiz.lstjr.text
replacebookmark "fsz", frmhkwiz.txtfsz.text
replacebookmark "jsz", frmhkwiz.txtjsz.text
replacebookmark "hc", frmhkwiz.txthc.text
设置新文档的属性
with activedocument
.spellingchecked = true
.grammarchecked = true
.undoclear
end with
application.displayautocompletetips = true
selection.homekey wdstory
恢复默认鼠标形状
system.cursor = wdcursornormal
application.screenupdating = true
关闭窗体
unload frmhkwiz
调用删除所有书签的过程
deleteallbookmark
end sub
替换书签内容的过程
private sub replacebookmark(which as string, what as string)
if len(what) = 0 then
what = ""
end if
选择指定的书签
selection.goto what:=wdgotobookmark, name:=which
替换内容
selection.typetext what
end sub
删除所有书签的过程
private sub deleteallbookmark()
dim bm as bookmark
遍历所有的书签
for each bm in activedocument.bookmarks
删除书签
bm.delete
next
end sub
4.设置向导入口
代码编写完毕后,在工程资源管理器中切换至“thisdocument”对象,输入事件代码,如下所示:
private sub document_new()
调用模块(common)中启动向导的过程
common.startwizard
end sub
5.后续工作
向导程序编制、调试无误后,可将其扩展名改为“wiz”,然后搜索“normal.dot”文件所在的文件夹,并将该向导程序放置于该目录,随后启动word xp后即可在“模板”窗体的“常用”栏中显示该向导的图标。
