VBA进阶撑杆跳-应用案例集锦

上传人:小** 文档编号:58962791 上传时间:2022-03-01 格式:DOC 页数:54 大小:1.36MB
返回 下载 相关 举报
VBA进阶撑杆跳-应用案例集锦_第1页
第1页 / 共54页
VBA进阶撑杆跳-应用案例集锦_第2页
第2页 / 共54页
VBA进阶撑杆跳-应用案例集锦_第3页
第3页 / 共54页
点击查看更多>>
资源描述
VBA进阶撑杆跳应用案例集锦文/安平一、VBA入门热身2004年电脑爱好者22期24期连续为广大读者介绍了VBA的相关知识和比较经典的实例,由于版面的限制,而且VBA开发涉及的内容又非常宽泛,在此,我们把更多的精彩实例奉献给大家。另外,在此期间我们也收到很多读者的投稿,一并奉上。关于Office VBA的入门知识请参考2004年下半年电脑爱好者合订本的正文分册。二、实例之Word批量替换众所周知,Word提供了强大的替换功能,可方便地满足多种替换需求,但细心的读者会发现,在Word中每次仅能操作一对文字内容(即“替换”和“替换为”的内容),当需对文字资料进行多内容的批量替换时,则需逐个操作,比较烦琐。那么略有VBA知识的读者或许会通过录制宏的方法来获取替换操作的代码,然后反复复制、修改这些代码,实现连续替换的需求,但该方法缺乏灵活性,如需修改批量替换的内容,将非常烦琐。通过VBA和Word加载模板的方法,笔者为Word开发了一个“超级替换”的工具,该工具不仅可批量替换,且可方便地修改替换内容。2.1实例效果本文程序通过工具栏的按钮触发运行,工具栏的按钮如图2-1-1所示:图2-1-1图2-1-1单击该按钮后,将进行批量替换的操作,即连续替换一系列指定的内容,大大提高了工作效率。2.2实例知识点笔者在每个实例中均会对本实例VBA程序代码中将使用的VBA开发对象、VBA常用函数和语法等知识先行介绍,读者可在实例操作中参考,下同。2.2.1相关对象1、Paragraphs对象集合该对象集合代表指定文档、区域或选择内容的所有段落。2、Selection对象该对象代表当前选择的内容,即文档中被选择(高亮度显示)的区域,如无选择内容,则代表插入点。Word应用程序中仅存在一个当前的Selection对象。3、Find对象该对象代表查找操作的执行条件,其属性、方法和“替换”对话框中选项一致,具体如下所述:(1)Font属性该属性由于返回或设置Font对象,代表指定对象的字符格式。(2)Wrap属性该属性用于设置在搜索时进行的相关操作,可通过常量进行赋值,具体如下所述:A、wdFindAsk常量:搜索完毕后,显示是否搜索文档的其他部分的消息框。B、wdFindContinue常量:搜索完毕后,继续执行。C、wdFindStop常量:搜索完毕后,停止执行。(3)Format属性该属性用于设置是否在查找操作中包含格式。(4)MatchCase属性该属性用于设置在查找时是否区分大、小写。(5)MatchWholeWord属性该属性用于设置是否在查找时仅对完整单词进行匹配。(6)MatchByte属性该属性用于设置是否在查找时区分全角和半角的字符。(7)MatchWildcards属性该属性用于设置是否在查找时允许使用查找通配符。(8)MatchSoundsLike属性该属性用于设置是否在查找时返回与待查文字发音相近的单词。(9)Execute方法该方法用于执行替换或查找操作。(10)ClearFormatting方法该方法用于清除替换或查找的内容。4、Replacement对象该对象代表查找和替换操作的替换条件,其属性、方法和“查找和替换”对话框中的选项一致,具体如下所述:(1)Text属性该属性用于设置选择内容中需查找或替换的文本。2.2.2相关函数1、Split函数该函数用于按指定分隔符拆分字符串,并返回下标从零开始的一维数组。其语法如下所示:Split(expression, delimiter, limit, compare)其常用参数作用如下所述:(1)expression参数:该参数用于设置需拆分的字符串。(2)delimiter参数:该参数用于设置分隔符字符串。 2、Replace函数该函数返回指定子字符串被替换后的字符串。其语法如下所示:Replace(expression, find, replace, start, count, compare)其常用参数作用如下所述:(1)expression参数:该参数用于设置需替换的字符串。(2)find参数:该参数用于设置需查找的子字符串。(3)replace参数:该参数用于设置需替换的子字符串。(4)start参数:该参数用于设置查找的开始位置。2.3 实例编制步骤2.3.1程序设计思路由程序功能需求和前述知识点可得设计思路,具体如下所述:1、按特定格式输入替换和被替换的内容。2、编制批量替换的代码,在代码中拆分替换和被替换的内容。3、保存为模板并加载。2.3.2输入替换和被替换的内容新建Word文件,按特定的格式输入替换和被替换的内容。本文实例程序使用“=”(即三个等号)做为分隔符。在输入内容时,分隔符的左面为需替换的内容,右面为替换后的内容,每行输入一对替换内容,且可使用Word的替换通配符,如图2-3-1所示:图2-3-1图2-3-12.3.3编制代码单击Word主界面“工具”菜单的“宏”子菜单的“Visual Basic编辑器”项,进入VBA的编辑窗体,在工程资源管理器中为当前的Word文件工程添加一个模块,然后双击该模块图标,切换至代码编辑窗体。首先定义分隔符常量,代码如下所示:定义“=”为分隔符Const splitsymbol = =然后输入用于实现批量替换的子程序,具体如下所示:实现批量替换的子程序Sub superreplace()设置如发生意外错误时,代码继续执行On Error Resume NextDim i As Integer定义存放拆分后内容的数组Dim temparray() As String遍历加载模板中所有的段落For i = 1 To ThisDocument.Paragraphs.Count 通过Split函数,按预定义的分隔符来拆分替换和需替换的内容 temparray = Split(CStr(ThisDocument.Paragraphs(i).Range), splitsymbol) 清除替换的内容 Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting 设置替换对象的相关属性 With Selection.Find 设置需替换的内容 .Text = CStr(temparray(0) 通过Replace函数去除段落结尾的回车符号,并设置替换的内容 .Replacement.Text = Replace(CStr(temparray(1), Chr(13), ) 设置替换操作的其他属性 .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With 开始执行替换操作 Selection.Find.Execute Replace:=wdReplaceAllNext iEnd Sub2.3.4保存为模板并加载代码输入完毕后,将该Word文件保存为“文档模板”格式,即可在Word中按前述方法加载。加载模板后,可单击“视图”菜单的“工具栏”子菜单的“自定义”项,在弹出的“自定义”窗体中选择“命令”选项卡,在“类别”列表框中选择“宏”,在“命令”列表框中选择前述代码中相应的子程序名称(本文实例为“superreplace”),如图2-3-2所示:图2-3-2图2-3-2然后将该命令拖动至工具栏的适当位置并重命名,即可新建工具栏按钮来触发相关代码的运行了。小提示如需修改、添加批量替换的内容,需通过Word的“打开”对话框来打开模板文件(注意:不可直接执行模板文件来打开),然后按前述方法编辑替换的内容并保存和重新加载即可。三、实例之Excel盖章Excel以其强大的计算和图表功能,成为很多读者制作表格的首选工具。在某些工作场合,处于美观或正式的要求,很多表格往往需添加公章或个人名章图片,如每次均通过外部图片的方式插入,不仅效率较差,且会大大增加文件的尺寸。为此笔者利用Excel绘制印章,并通过VBA加载宏开发了一个自动盖章程序,大大提高了效率。3.1实例效果本文开发的加载宏(xla)文件可直接执行,执行后Excel将自动启动,并新增一个工具栏,该工具栏包含一个按钮(用于显示文字)和一个下拉框,下拉框的列表项内容为可使用的公章和个人章名称,如图3-1-1所示:图3-1-1图3-1-1选择下拉框中的相应印章,在Excel表格中即可添加印章图片,加盖各类印章后的Excel表格如图3-1-2所示:图3-1-2图3-1-23.2实例知识点3.2.1 加载宏Excel加载宏是扩制名为“xla”的特殊Excel文件,该类文件通过在标准Excel文件中调试VBA程序,正确无误后添加相关事件代码,最后将其保存为“Microsfot Excel 加载宏”的方法生成,且加载宏程序无法查看其VBA代码,具有较强的安全性。在Excel中使用加载宏可单击“工具”菜单的“加载宏”,在弹出窗口中单击“浏览”按钮,在弹出的对话框中选择需加载的文件或直接执行加载宏文件即可。加载宏一般均需进行初始化操作,以实现诸如添加工具栏等操作,这些代码必须通过特定触发的事件来执行。这些事件均由工作簿(Workbook)对象提供,具体如下所述:1、AddinInstall事件该事件在工作簿以加载宏方式载入时触发。2、AddinUninstall事件该事件在工作簿以加载宏方式卸载时触发。3、Open事件该事件在打开工作簿时触发。4、BeforeClose事件该事件在关闭工作簿前触发。5、BeforeSave事件该事件在保存工作簿前触发。6、NewSheet事件该事件在工作簿中新建工作表时触发。7、SheetChange事件该事件在更改工作表的单元格时触发。8、SheetSelectionChange事件该事件在工作表选择区域发生改变时触发。3.2.2 工具栏开发前一个实例的工具栏按钮需读者手工添加,而本例则自动在工具栏中添加了控件。其实,大部分Office软件均提供了工具栏的VBA开发接口,Excel也不例外。该开发接口主要包括CommandBar、CommandBarButton和CommandBarComboBox等对象,这些对象命名方式很直观,只需“望文生义”即可了解对象的用途。常用工具栏开发对象的相关知识点如下所述:1、CommandBars集合对象该集合对象代表工具栏,可通过名称或索引号来访问工具栏,其常用方法和属性如下所述:(1)Add方法该方法用于新建工具栏并返回CommandBar对象。2、CommandBar对象该对象代表工具栏,在工具栏上新建控件均需通过该对象来实现,其常用方法和属性如下所述:(1)Position属性该属性用于返回或设置工具栏的位置。(2)Type属性该属性用于返回或设置工具栏的类型。(3)Delete方法该方法用于删除工具栏。3、CommandBarButton对象该对象代表工具栏的按钮控件,其常用方法和属性如下所述:(1)OnAction属性该属性用于设置程序代码子程序名,且不可使用参数,该子程序在单击按钮后运行。(2)Style属性该属性用于设置工具栏按钮的显示方式。(3)Caption属性该属性用于返回或设置工具栏按钮显示的文字。4、CommandBarComboBox对象该对象代表工具栏中的组合框控件,是常用的工具栏开发控件,其常用方法和属性如下所述:(1)List属性该属性用于返回组合框控件中某列表项的值。(2)OnAction属性该属性用于设置程序代码子程序名,且不可使用参数,该子程序在更改组合框控件值时触发运行。(3)Type属性该属性用于返回或设置组合框控件的显示方式。(4)ListIndex属性该属性用于设置组合框控件下拉部分所选择的表项。(4)AddItem方法该方法用于在组合框控件中添加列表项。3.2.3 印章制作简介本文程序使用的印章图片均通过Excel自带的绘图工具绘制,大大减小了文件的尺寸,制作方法如下所述: 1、制作印章轮廓由于印章轮廓一般多为圆形,可通过Excel的“绘图”工具栏的“椭圆”按钮配合Shift键来实现。绘制适当大小的圆后,需将其线条色设置为红色,粗细设置为3磅,颜色设置为无填充颜色,环绕方式为四周型。个人名章轮廓一般为圆角矩形,可通过 “绘图”工具栏的“流程图”按钮来实现。此外印章中间一般均有五角星或其他图形。五角星可通过“绘图”工具栏的“星与旗帜”按钮来实现,其线条和填充颜色也相应设置为红色。2、编辑印章文字印章文字一般为半圆形环绕,因此可通过“绘图”工具栏的“插入艺术字”按钮来实现,单击该按钮,在弹出的对话框中编辑艺术字的文字,最后只需调整艺术字的形状、大小和位置,使其可放入印章轮廓中即可。3、组合印章图形调整印章各组成部分的大小、位置至满意后,逐个选择(可按下Ctrl键后逐个单击),然后单击右键,在弹出菜单中选择“组合”项,即可将分散的对象组合为一个完整的印章图片。3.3实例编制步骤3.3.1 程序设计思路由程序功能可得盖章器的设计思路,具体如下所述:(1)将各类印章图形在Excel中绘制后,放置在一个工作表中(如:“Sheet1”),并分别进行命名。(2)编写代码,遍历工作表中所有的图形并显示在列表框中。(3)触发相应事件,通过复制和粘贴的方式将印章图片粘至所需的位置。(4)编写工作簿对应事件,使其在加载时自动执行初始化操作。3.3.2 绘制印章并命名新建Excel文件,在“Sheet1”工作表中按前述的方法绘制印章图形,然后选择该图形,在Excel的“命名”框中输入相应的名称,如图3-3-1所示:图3-3-1图3-3-1小提示需注意:印章图形的名称不可重复。3.3.3 编制模块打开Excel的VBA编辑器(在主界面中按“Alt+F11”键),在工程资源管理器中添加一个模块,如图3-3-2所示:图3-3-2图3-3-2双击模块的图表,切换至代码编辑窗体。首先定义一些公共变量,代码如下所述:定义工具栏名称常量Public Const toolbar_name = Excel盖章工具栏定义工具栏变量Dim signet_toolbar As CommandBar定义工具栏按钮变量Dim toolbar_button As CommandBarButton定义工具栏下拉框变量Dim picture_dropdown As CommandBarComboBox然后输入自定义的子程序,如下所述:新建工具栏的子程序Sub new_exceltoolbar()Dim i As Integer新建工具栏Set signet_toolbar = Application.CommandBars.Add(Name:=toolbar_name, Position:=msoBarTop)在新建的工具栏中添加按钮Set toolbar_button = signet_toolbar.Controls.Add(Type:=msoControlButton)设置该按钮的相关属性With toolbar_button 设置该按钮风格 .Style = msoButtonCaption 设置该按钮的文字 .Caption = 请在下拉框中选择印章: .Visible = TrueEnd With在新建的工具栏中添加下拉框Set picture_dropdown = signet_toolbar.Controls.Add(Type:=msoControlDropdown)设置该下拉框的相关属性With picture_dropdown 遍历“Sheet1”工作表中所有的图形 For i = 1 To ThisWorkbook.Worksheets(Sheet1).Shapes.Count 将图形的名称添加至下拉框中 .AddItem ThisWorkbook.Worksheets(Sheet1).Shapes(i).Name Next i .Visible = True 设置分组 .BeginGroup = True 设置第一项被选择 .ListIndex = 1 设置事件内容 .OnAction = insert_signetEnd With设置工具栏的相关属性With signet_toolbar .Visible = True .Enabled = TrueEnd WithEnd Sub插入印章图片的子程序Sub insert_signet()定义区域变量Dim excel_range As RangeIf Application.Workbooks.Count 0 Then 通过名称的方法复制“Sheet1”工作表中的图形 ThisWorkbook.Worksheets(Sheet1).Shapes(picture_dropdown.Text).Copy 禁止屏幕刷新 Application.ScreenUpdating = False 获取当前选择的区域 Set excel_range = ActiveWindow.RangeSelection 粘贴复制的印章图片 excel_range.PasteSpecial 恢复屏幕刷新 Application.ScreenUpdating = TrueEnd IfEnd Sub3.3.4 编制工作簿事件在图3-3-2所示的工程资源管理器中双击“ThisWorkbook”对象,切换至该对象的代码编辑窗体,输入与加载宏相关的事件代码,具体如下所述:通过xla文件方式加载的入口子程序Private Sub Workbook_AddinInstall()Dim tempbar As CommandBar循环遍历工具栏For Each tempbar In Application.CommandBars 如已存在名称相同的工具栏 If tempbar.Name = toolbar_name Then 删除重复的工具栏 tempbar.Delete End IfNextApplication.ScreenUpdating = False调用新建工具栏的子程序new_exceltoolbarApplication.ScreenUpdating = TrueEnd Sub通过xla文件方式加载的出口子程序Private Sub Workbook_AddinUninstall()On Error Resume NextApplication.CommandBars(toolbar_name).DeleteEnd Sub通过xls文件方式使用的入口子程序Private Sub Workbook_Open()调用xla文件方式加载的入口子程序Call Workbook_AddinInstallEnd Sub通过xls文件方式使用的出口子程序Private Sub Workbook_BeforeClose(Cancel As Boolean)调用xla文件方式加载的出口子程序Call Workbook_AddinUninstallEnd Sub3.3.5 保存为加载宏和修改方法代码调试无误后,可将Excel文件另存为加载宏(xla)文件,随后按前述方法调用即可。如需修改印章的内容,可打开工作簿(xls)文件,按前述方法修改、绘制新印章,并重命名后另存为加载宏文件即可。小提示需注意:在修改时不可将原始工作表中的印章图形全部删除,应至少保留一个,否则程序会出现错误。四、实例之增强Word图片插入功能在录制“宏”的子程序中,读者会发现录制子程序中调用的对话框,在最后生成的宏代码中均无相应的代码语句,即“宏”仅可保存操作的结果,而无法记录具体的步骤(即无法录制一个仅显示某个内置对话框的“宏”)。Word和Excel的VBA开发环境中均提供了软件内置对话框的开发接口,且Word中的接口功能非常强大,提供了多种调用对话框的方式。很多撰写文稿的读者,经常需在Word文件中插入图片,并相应地设置其格式。但Word中需打开对话框,然后选择文件,最后还需设置格式。能否通过录制“宏”来实现图片插入和设置格式的操作呢?非也,如前所述,录制后的宏仅可插入录制时记录的图片文件,无法实现用户选择图片的功能,但通过调用Word的内置对话框,可实现该功能。4.1 实例效果在Word XP中开发的实例,加载模板并运行其中的“addbutton”子程序后将在主界面的“插入”菜单中添加一个名为“增强型图片插入”的菜单项,如图4-1-1所示:图4-1-1图4-1-1单击该菜单项将弹出Word的“插入图片”对话框,用户选择图片文件后,该图片将插入文件,并自动设置了样式(本例将图片设置为黑白色和笔者自定义的“图”样式),如图4-1-2所示:图4-1-2图4-1-24.2实例知识点Office软件均使用了大量的内置对话框,在Word和Excel中提供了开发接口,使开发者可充分利用内置对话框实现很多操作,尤其在Word中,可使用多种方法显示内置对话框,实现不同的功能需求。笔者以Word的内置对话框为例进行知识点介绍。4.2.1 Dialogs集合对象该集合对象代表Word或Excel中的Dialog对象集合,其中每个Dialog对象均代表一个内置对话框,且开发者无法在Dialogs集合中创建新的内置对话框,也无法添加对话框。4.2.2 Dialog对象该对象代表内置对话框,其常用方法和属性如下所述:1、CommandName属性该属性用于返回显示的指定内置对话框对应的子程序名。2、DefaultTab属性该属性用于设置显示指定对话框时,其被激活的选项卡。3、Display方法该方法用于显示指定的内置对话框,并直至用户关闭该对话框或超时,且返回用户关闭对话框时所单击的按钮代号,如下所述:A、返回-2:代表“关闭”按钮。B、返回-1:代表“确定”按钮。C、返回0:代表“取消”按钮。D、返回大于 0的值:则1代表第一个按钮,2代表第二个按钮,以此类推。使用该方法显示内置对话框时,不会执行任何操作,即仅用于显示。4、Execute方法该方法用于应用内置对话框的当前设置。5、Show方法该方法用于显示并执行内置对话框,即如同用户通过菜单或工具栏打开对话框。该方法和Display方法相同,均返回用户关闭对话框时所单击的按钮代号。6、Update方法该方法用于更新内置对话框的参数值。4.2.3显示内置对话框通过VBA代码可控制内置对话框的显示,如需调用指定的内置对话框,可将Dialogs属性通过常量进行赋值,如“Dialogs(wdDialogFileOpen).Show”可显示Word的“打开”对话框。在前述代码中,如将该语句的返回值赋予Dialog变量,即可通过该变量返回或设置对话框的选项,代码如下所示:Set testDialog = Dialogs(wdDialogFileOpen)4.2.4对话框调用方法的比较如前所述,在Word中调用内置对话框可通过Display、Execute和Show三种方法,这三种方法各有其特点和适用场合,如下所述:1、Display方法该方法显示对话框但不执行对话框的相应操作,可用于显示内置对话框并提示用户的场合。2、Execute方法该方法执行对话框中的设置而不显示对话框,可用于仅调用对话框功能的场合(如调用“字数统计”对话框并获取其包含的字数、行数等参数)。3、Show方法该方法用于显示并执行内置对话框,即模拟用户通过菜单或工具栏打开对话框,可用于自定义菜单或工具栏中需集成Office原有功能的场合。小提示合理使用内置对话框可实现很多的开发,Word和Excel中提供接口的内置对话框非常多,限于篇幅不做详细介绍,读者可参考VBA的联机帮助以获取更具体和全面的资料。4.3 实例编制步骤4.3.1 调用内置对话框并进行相关操作在VBA的工程资源管理器中添加一个模块,在该模块中输入以下代码:调用内置对话框插入图片并设置格式的子程序Sub insertpic()定义图片变量Dim ls As InlineShape 定义对话框变量Dim opendia As Dialog 将“插入图片”对话框赋予该变量Set opendia = Dialogs(wdDialogInsertPicture) 如显示的对话框并非单击“取消”按钮后关闭If opendia.Display = -1 Then插入对话框中选择的图片文件Set ls = Selection.InlineShapes.AddPicture(FileName:=opendia.Name, LinkToFile:=False, SaveWithDocument:=True)设置图片为黑白色ls.PictureFormat.ColorType = msoPictureGrayscale选择该图片ls.Select设置图片的样式为预定义的“图”Selection.Style = 图Else显示警告信息MsgBox 请先选择图片!, vbExclamationEnd IfEnd Sub4.3.2添加自定义菜单项由于菜单项在VBA中从技术上等同于工具栏按钮,因此在添加的模块中,可按前述介绍的方法实现菜单项操作,代码如下所述:首先定义全局变量,代码如下所述:菜单栏变量Dim oMnu As CommandBarControl菜单项变量Dim oMnuctl As CommandBarButton在“插入”菜单栏中新建菜单项的子程序Sub addbutton()将主菜单的“插入”菜单赋予变量Set oMnu = Application.CommandBars(Menu Bar).Controls(4)新增菜单项Set oMnuctl = oMnu.Controls.Add(Type:=msoControlButton, ID:=1)设置菜单项的属性With oMnuctl .Style = msoButtonIconAndCaption设置菜单项图标 .FaceId = 3174设置菜单项标题 .Caption = 增强型图片插入 .TooltipText = .Caption设置触发事件代码 .OnAction = insertpicEnd WithEnd Sub删除菜单项的子程序Sub deletebutton()重设系统主菜单栏Application.CommandBars(Menu Bar).ResetEnd Sub小提示在使用本VBA程序时,请读者先自定义一个名为“图”的样式,以免出错。五、实例之Excel工作表状态查看一个功能强大的VBA应用程序应提供用户的交互界面和面向对象的实现方法,和VB类似,VBA提供了用户窗体和类模块,使开发者可方便实现界面交互的功能和面向对象的结构。读者掌握VBA的窗体和类模块开发后,无疑可进一步开发界面友好、功能强大的Office应用程序。5.1实例效果本实例运行“addbuttom”子程序后将添加一个包含按钮的新工具栏,单击该按钮将弹出窗体,并显示当前打开工作簿包含的工作表数量和名称,单击列表框中相应的文件名,将在窗体的文本框中显示该工作表已使用的行数和列数,如图5-1-1所示:图5-1-1图5-1-15.2实例知识点5.2.1用户窗体对编程稍有所知的读者应该对窗体不会陌生,窗体是程序实现和用户交互的接口,通过窗体不仅可改善程序的界面友好性,而且可进一步增强和完善程序的功能。VBA中提供了用户窗体的概念,使开发者可如同使用VB一般编制窗体。(1)创建用户窗体在Office软件的Visual Basic编辑器中可创建用户窗体,在工程资源管理器中右键单击项目,在弹出的快捷菜单中选择“插入”子菜单的“用户窗体”项,如图5-2-1所示:图5-2-1图5-2-1随后在Visual Basic编辑器的设计界面中将显示默认的窗体和控件工具箱,该控件工具箱和VB的控件工具箱很类似,如图5-2-2所示:图5-2-2图5-2-2(2)用户窗体常用控件虽然VBA窗体开发所用的控件和VB较为类似,但其属性和方法和VB有一定的差异,限于篇幅,本文对VBA窗体开发控件的属性和方法不做详细介绍,读者可查阅VBA的相关帮助。针对图5-2-2所示的控件,本文进行简单介绍,如下所述:A、复选框控件该控件用于显示选择的状态,即许用户从两个值(如True或False)中选择一个。如选择,则将显示标记。该控件的默认属性为Value属性,默认事件为 Click 事件。B、组合框控件该控件将列表框和文本框进行结合,用户可进行输入和列表框选择操作。该控件的默认属性为 Value 属性,默认事件为 Change 事件。注意:如要求使用组合框时仅列出值,可设置其Style属性。C、命令按钮控件该控件用于启动、结束或中断操作,其Click事件是窗体编程中最常用的事件代码。该控件的默认属性为 Value 属性,默认事件为 Click 事件。D、框架控件该控件用于创建功能或视觉角度的控件组。该控件的默认事件为 Click 事件。E、图像控件该控件用于显示图片,其支持的图片文件格式包括:bmp、cur、gif、ico、jpg和wmf等。该控件的默认事件为 Click 事件。F、标签控件该控件用于显示不可编辑的文本。该控件的默认属性为 Caption 属性,默认事件为 Click 事件。G、列表框控件该控件用于显示值列表,用户可选择一个或多个列表项,VBA中的列表框可通过列表形式和选项按钮或复选框的形式使用。该控件的默认属性为 Value 属性,默认事件为 Click 事件。H、多页控件该控件用于将多页面的内容以单个控件的方式实现,在处理不同类别的大量信息时很有用。该控件的默认事件为 Change 事件。I、选项按钮控件该控件用于显示多选项中每一项的选择状态。该控件的默认属性为 Value 属性,默认事件为 Click 事件。J、滚动条控件该控件用于按滚动块位置,返回或设置变量值。该控件的默认属性为 Value 属性,默认事件为 Change 事件。注意:如需创建横向或纵向的滚动条,可在窗体设计时横向或纵向拖动滚动条控制点。K、数值调节钮控件该控件用于增加及减少变量数值。该控件的默认属性为 Value 属性,默认事件为 Change 事件。L、表头控件该控件用于将一系列相关控件显示为一个多表的集合。该控件的默认属性为 SelectedItem 属性,默认事件为 Change 事件。M、文本框控件该控件用于显示可编辑的文本信息,是VBA开发中最常用编辑控件。该控件的默认属性为Value 属性,默认事件为 Change 事件。N、切换按钮控件该控件用于显示选择状态。该控件的默认属性为 Value 属性,默认事件为 Click 事件。(3)控件组和其他控件在VBA窗体设计中,可将一些开发中使用的控件全部选择后,直接拖放至工具箱中,工具箱会添加一个“控件组”,在窗体设计中可直接将该控件组放置于窗体,大大提高了效率。(该特点为VBA特有),控件组的图标如图5-2-3所示:图5-2-3图5-2-3如开发者需使用VBA标准控件箱未提供的其他控件,可右键单击工具箱,在弹出的快捷菜单中选择“附加控件”,将弹出附加控件窗体,供开发者选择(和VB中的部件窗体类似),如图5-2-4所示:图5-2-4图5-2-4(4)用户窗体常用事件用户窗体的常用事件和VB窗体有一定的区别,具体如下所述:A、Initialize事件该事件发生在加载对象后和显示对象前,通常在该事件中初始化变量值或设置控件的属性。B、QueryClose事件该事件发生在用户窗体关闭前,通常在该事件中检查用户窗体中未完成的操作。该事件提供的参数如下所述: cancel参数:整型,如将该参数设置未非零值,则可阻止关闭用户窗体。Closemode参数:该参数用于获取触发QueryClose事件的原因。C、Terminate事件该事件将所有引用的对象变量设置为Nothing常量,即删除对象的引用。该事件发生在卸载对象后。如非正常退出程序,则不会触发。5.2.2类模块面向对象方法已成为程序开发的主流技术,Office的VBA开发也不例外,其提供类模块结构,使开发者可将常用操作通过类进行合理封装,实现代码的复用和程序的结构化。类模块中的代码描述了通过类创建的对象特性和行为。VBA的类模块从严格意义上分析并非真正的对象,但其可自定义属性和方法,已基本具备类的特征。(1)使用类模块的优点程序开发的本质即组织指令的方法,这些方法代表指令的存放位置和执行顺序。复杂的程序对组织或结构的要求较高,因此除对程序执行进行控制外,还需进一步优化结构。由于VBA程序仍基于对象开发,因此开发者可将与窗体或控件无关的代码放入标准模块中,以实现代码复用,而类模块既包含代码又包含数据类模块,是创建对象的更好解决方案。(2)类模块和标准模块的区别为更好理解类模块,将类模块和前述实例使用的标准模块进行比较,具体如下所述:A、标准模块数据仅存在单个备份,如公共变量值改变后,程序中再次读取该变量,将得到同一个值,而类模块数据则相对于类实例单独存在。B、标准模块数据在程序作用域内存在,即存在于程序存活期。类实例数据仅存在于对象存活期,随对象创建而创建,随对象释放而释放。(3)创建类模块VBA中创建类模块非常简单,在Visual Basic编辑器的工程资源管理器中右键单击项目,在弹出的快捷菜单中选择“插入”子菜单的“类模块”项,如图5-2-5所示:图5-2-5图5-2-5随后,在“工程资源管理器”中会出现添加的类模块,默认名称为“类1”,单击该类模块,可设置其属性,一般需设置其“Name”属性,以方便使用。双击该类模块,即可按窗体的操作方法来输入代码。(4)类模块常用事件类模块中包含Initialize和Terminate二个事件,具体如下所述:A、Initialize事件该事件用于初始化类模块所用的数据。当程序中创建类模块时触发该事件。B、Terminate事件当程序中类实例从内存删除时触发该事件,且该事件仅在程序正常结束时触发。5.3实例编制步骤按前述功能分析可得本实例的实现步骤和要点,如下所述:(1)创建类模块并设计其方法和属性。(2)创建窗体并调用类模块对象实例。(3)创建模块,以创建工具栏控件。5.3.1创建类模块并设计其方法和属性在工程资源管理器中添加一个类模块,并命名为“excelclass”,切换至类模块代码编辑界面,首先定义类全局变量,代码如下所述:Dim csheetname As String 保存工作表名的变量添加一个类属性,代码如下所述:类的工作表名属性,该属性可读写设置工作表名属性Property Let sheetname(ByVal nfn As String)csheetname = nfn 保存工作表名End Property获取工作表名属性Property Get sheetname() As Stringsheetname = csheetnameEnd Property添加类的子程序和函数,代码如下所述:激活工作表的子程序Sub activesheet()Sheets(csheetname).SelectEnd Sub获取工作表已用行数的函数Function get_rows() As IntegerDim ls As WorksheetSet ls = Application.activesheet通过访问UsedRange对象来获取工作表已用行数get_rows = ls.UsedRange.Rows.CountEnd Function获取工作表已用列数的函数Function get_cols() As IntegerDim ls As WorksheetSet ls = Application.activesheet通过访问UsedRange对象来获取工作表已用列数get_cols = ls.UsedRange.Columns.CountEnd Function5.3.2创建窗体并调用类模块对象实例在工程资源管理器中添加一个用户窗体,在窗体上放置一个标签、一个列表框和一个文本框控件,如图5-3-1所示:图5-3-1图5-3-1按图5-3-1所示,设置各控件的名称。其中txtsheet控件的MultiLine属性值需设置为True,ScrollBars属性值需设置为2,其他可按图5-3-1设置(控件的尺寸和位置读者可自行调整)。切换至窗体代码编辑界面,首先定义全局的类对象数组,代码如下所述: 通过New关键字创建类对象数组Dim excelarray() As New excelclass列表框单击事件代码Private Sub lstsheet_Click()遍历类对象数组For i = 1 To UBound(excelarray)如名称相同If excelarray(i).sheetname = lstsheet.List(lstsheet.ListIndex) Thentxtsheet.Text = 调用类对象的激活工作表方法excelarray(i).activesheet调用类的相应函数获取工作表信息txtsheet.SelText = 已使用的行数: & excelarray(i).get_rows & vbCrLftxtsheet.SelText = 已使用的列数: & excelarray(i).get_cols & vbCrLfEnd IfNext iEnd Sub用户窗体初始化事件代码Private Sub UserForm_Initialize()Dim i As Integer按工作表数量重定义类对象数组ReDim excelarray(Worksheets.Count)遍历所有工作表For i = 1 To Worksheets.Count添加工作表名称至列表框lstsheet.AddItem Worksheets(i).Name将工作表名称保存于对应的类属性excelarray(i).sheetname = Worksheets(i).NameNext i显示工作表数lblcount.Caption = 目前共有 + Str(i - 1) + 个工作表End Sub5.3.3创建模块并创建工具栏控件在工程资源管理器中添加一个模块,按前述内容来新增工具栏和控件,代码如下所述(读者可结合前述实例代码进行分析):代表整个工具栏Dim obar As CommandBar代表工具栏按钮Dim oCtl As CommandBarButton创建工具栏和按钮控件的子程序Sub addbutton()Dim i As IntegerFor i = 1 To Application.CommandBars.CountIf Application.CommandBars(i).Name = testcustombar ThendeletebuttonEnd IfNext iSet obar = Application.CommandBars.Add(testcustombar)Set oCtl = obar.Controls.Add(Type:=msoControlButton, ID:=1) id=1: means self defined controlWith oCtl .Caption = 工作表信息统计 .Style = msoButtonIconAndCaption .FaceId = 984 .TooltipText = .Caption .BeginGroup = True .OnAction = showformEnd WithWith obar .Visible = True .Enabled = True .Position = msoBarTopEnd WithEnd Sub删除工具栏子程序Sub deletebutton()Dim i As IntegerFor i = 1 To Application.CommandBars.CountIf Application.CommandBars(i).Name = testcustombar ThenApplication.CommandBars(i).Visible = FalseApplication.CommandBars(i).DeleteEnd IfNext iEnd Sub显示用户窗体子程序Sub showform()UserForm1.ShowEnd Sub六、实例之PowerPoint卡通式交互在使用Office的子程序中,读者对可爱的“助手”想必不会陌生,这些助手可大大提高程序的友好性,且助手的功能远比标准的系统对话框功能强大,开发者可自定义文字的颜色和下划线,还可定义助手对话框中的控件,使其更符合程序的需求。此外,通过对Office助手的自定义开发,使其完全取代一些功能简单的对话框。6.1实例效果在播放PowerPoint 幻灯片时,如可通过动作按钮调用Office助手,并实现诸如提供简单的帮助、进行简单的用户交互等功能,将使幻灯片大为增色。在PowerPoint XP中开发的实例,播放后的界面包含三个动作按钮,单击“开始交互”将弹出助手(角色为用户设置的“孙悟空”),通过复选框的形式提出一些简单的问题,且文字中包含了颜色和下划线,如图6-1-1所示:图6-1-1图6-1-1用户选择相关的复选框后,助手将再次出现,并显示用户选择的内容,如图6-1-2所示:图6-1-2图6-1-2单击“帮助”按钮,将调用助手显示一些帮助信息,如图6-1-3所示:图6-1-3图6-1-3单击“退出”按钮,将关闭幻灯片放映。6.2实例知识点Office助手是一组卡通动画人物,这些助手可提供友好的信息提示,并可通过自定义对话框(又称“气球”)的文字格式和控件实现简单的交互。6.2.1 Assistant对象该对象代表Office助手,可通过Application对象的Assistant属性返回 Assistant对象。默认助手为“大眼夹”(即“Clippit”),用户可在右键单击助手后弹出的快捷菜单中单击“选择助手”菜单项,在弹出的“Office助手”窗体中即可选择不同的助手,如图6-2-1所示:图6-2-1图6-2-1该对象的常用方法和属性如下所述:(1)Animation属性该属性用于返回或设置Office 助手的动画效果。如将该属性应用于 Balloon对象,则“助手”仅在显示气球时才会出现动作。该属性可通过常量进行赋值,常用的常量及其含义如表6-2-1所示:表6-2-1图table6-2-1常量名称代表的动作msoAnimationAppear 助手出现msoAnimationBeginSpeaking助手开始说话msoAnimationCheckingSomething助手检查动作msoAnimationDisappear助手消失msoAnimationGoodbye助手说“再见”msoAnimationGreeting助手致欢迎的动作msoAnimationIdle助手休息的动作msoAnimationPrinting助手打印的动作msoAnimationSaving助手保存的动作msoAnimationSearching助手开始查找的动作msoAnimationThink
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!