VBA编程24学时教程017.pdf

上传人:索**** 文档编号:76249443 上传时间:2023-03-08 格式:PDF 页数:8 大小:342.93KB
返回 下载 相关 举报
VBA编程24学时教程017.pdf_第1页
第1页 / 共8页
VBA编程24学时教程017.pdf_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《VBA编程24学时教程017.pdf》由会员分享,可在线阅读,更多相关《VBA编程24学时教程017.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第17学时菜单在前一个学时中,已经学习到工具栏是定义为执行菜单项命令的一种替代方法。既然已经知道了怎样去修改工具栏,你很可能想进一步弄清楚怎样修改菜单。在这个学时中,将学习通过手工和编程方式来使用菜单。这个学时的重点包括:?学习手工修改菜单?使用 V BA代码来创建菜单栏、菜单和菜单项?显示和删除菜单栏17.1 手工修改菜单当使用菜单时,实际上使用了三个对象:包容器、菜单和菜单项。包容器跟工具栏中的一样,叫做命令栏,也叫做菜单栏,位于命令栏中的就是菜单。菜单有“文件”、“编辑”、“帮助”菜单等等,每个菜单中内容的就是菜单项,比如,“文件”菜单包含了像“打开”、“保存”和“打印”之类的菜单项(或

2、者叫做菜单命令)。当采用手工方式来自定义菜单时,可以添加菜单和菜单项。可以添加预先定义好的菜单和菜单项,也可以创建自己的菜单词条。要创建能够用来执行宏命令的新菜单和菜单项,请执行下面的步骤:1)打开 Guest Expenses工作簿。2)用鼠标右键单击菜单栏,从弹出的菜单中选择“自定义”,“自定义”对话框显示出来。3)选择“命令”选项卡,就显示了可以使用的菜单类别和命令的列表,如图1 7-1所示。4)在“类别”列表框中,找到并选择“新菜单”,在“命令”列表框中,就将看到“新菜单”。5)从“命令”列表框中拖拉“新菜单”。我们准备把“新菜单”放置在“数据”和“窗口”菜单之间,当定位合适时,就能够

3、看到这两个菜单之间将出现黑色的竖条。图17-1 在“类别”列表框中,可以看到列出了一些熟悉的菜单6)释放鼠标键,把菜单放置到新位置上,新的菜单如图1 7-2所示。7)添加了这个菜单以后,下一步是重新给新菜单命名。用鼠标右键单击“新菜单”,选择“名称”,输入&Guest作为该菜单的名称。字母G前面的&就把该字母设置为这个菜单的加速键。8)下一步是添加一个新的菜单项到G uest菜单中。再次从“命令”列表框中选择“新菜单”,把它拖到 G uest菜单。当拖到该菜单上时,G uest菜单下面就显示出一个灰色框,把新菜单拖到这个框中。当定位合适时,这个框中将显示一条竖直方向的黑线,如图1 7-3所示。

4、释放鼠标键来创建这个新的菜单项。从技术上来说,可以给G uest菜单指定宏,不过,界面设计的通常标准是把宏分配给菜单项而不是菜单,通过菜单项来执行宏。第17学时菜单使用145图17-2 当新菜单最初添加到菜单栏上时,它的标题是“新菜单”图17-3 在G u e s t 菜单下面显示的框表明菜单现在还是空的9)用鼠标右键单击“新菜单”,选择“重新命名”。1 0)输入&Expenses作为名称。11)现在可以准备给E xpenses菜单项指定宏了。用鼠标右键单击E xpenses,从弹出的菜单中选择“指定宏”,“指定宏”对话框显示出来。1 2)选择 S howSplash宏,然后单击“确定”按钮。

5、1 3)单击“关闭”按钮来关闭“自定义”对话框。关闭“自定义”对话框以后,就可以准备使用新菜单了。选择Guest,Expenses,We lcome对话框就显示出来,单击“确定”按钮,然后单击“取消”按钮,于是现在又有了一种启动应用程序的方式。17.2 通过编程方式来使用菜单使用 V BA代码来添加菜单跟添加工具栏非常相似。实际上是把菜单项添加到跟工具栏共用的集合,也就是叫做C ommandBars的集合中。添加菜单栏的基本语法如下:CommandBars.Add(Name,Position,MenuBar,Te mporary)N ame参数指定了命令栏的名称。令人惊奇的是,N ame参数居

6、然是可选的。如果没有给这个参数提供值的话,系统就会给这个命令栏分配一个默认的名称,比如Custom 1。P osition(位置)是另外一个可选的参数,这个参数允许选择新命令栏的位置或者类型。因为下面要创建的是菜单栏,所以需要把M enuBar参数设置为 Tr ue。把这个参数设置为Tr ue就用新命令栏取代了当前活动的菜单栏。该参数的默认值是F alse。最后一个参数是Te mporary(临时的),它也是可选的。把这个参数设置为Tr ue就使得新命令栏成为临时的。临时命令栏在包容器应用程序关闭时被删除。这个参数的默认值是F alse。在你的应用程序中,也许想要把这个参数设置为Tr ue,这

7、样就不会把新增加的临时菜单栏遗留在 E xcel环境中。现在开始学习菜单:我们即将创建新菜单,并显示新菜单来取代工作表菜单。要创建自定义菜单的话,关闭所有打开的工作簿,然后打开一个新工作簿,按下A lt+F11切换到 Vi sualB asic编辑器,在这个新工作簿中插入一个模块,接下来请执行下面的步骤:1)创建一个新过程,命名为M yFirstMenubar。2)在这个新过程中输入下面的代码:Dim mybar As CommandBarSet mybar=CommandBars.Add(Name:=Hour17,_P osition:=msoBarTop,MenuBar:=True,tem

8、porary:=Tr ue)m ybar.Visible=Tr ueC ommandBars(Worksheet Menu Bar).Visible=False3)另外创建一个过程,命名为U ndoMyMenu。4)在这个过程中输入下面的代码:CommandBars(Hour 17).Delete5)切换回工作簿,在S heet1上创建一个命令按钮,把宏过程M yFirstMenubar分配给这个命令按钮,并把按钮的标题设置为My Menu。6)另外创建一个命令按钮,把宏过程U odoM yMenu分配给它,并把它的标题设置为146使用 中文Excel 2000编程 2 4学时教程Defaul

9、t Menu。7)单击 My Menu 按钮,就显示出一个空菜单来取代默认的工作表菜单,如图1 7-4所示。8)单击 Default Menu 按钮,工作表菜单又恢复了。完成了上面介绍的这些步骤以后,你已经知道怎样显示自定义的和内置的菜单了。刚才使用 V BA代码不但显示了一个自定义菜单,也创建了该自定义菜单。程序清单1 7-1给出了M yFirstMenu过程的完整代码。程序清单 17-1 MyFirstMenu过程代码1:Sub MyFirstMenu()2:Dim mybar As CommandBar3:4:Set mybar=CommandBars.Add(Name:=Hour17,

10、_P osition:=msoBarTo p,MenuBar:=Tr ue,temporary:=Tr ue)5:mybar.Visible=Tr ue6:CommandBars(Worksheet Menu Bar).Visible=False7:8:End Sub在这个过程中所做的第一件事情是创建了一个对象变量,这个对象变量在用来创建菜单栏的 A dd方法时进行赋值:Dim mybar As CommandBarSet mybar=CommandBars.Add(Name:=Hour 17,Position:=msoBarTop,MenuBar:=True,temporary:=True)

11、菜单栏创建以后,通过把Vi sible属性设置为 Tr ue来显示它,同时也把工作表菜单栏的这个属性设置为 F alse,以便不显示工作表的菜单栏。m ybar.Visible=Tr ueCommandBars(Worksheet Menu Bar).Visible=False第17学时菜单使用147图17-4 这个窗口上部的灰色条实际上是一个空的菜单栏以上就是创建菜单栏的方法。当不再需要某个菜单栏时,就可以使用D elete方法来删除它。下一步是向菜单栏上添加菜单。添加菜单和菜单项创建菜单的下一步是添加菜单和菜单栏。要实现这一点的话,将使用C ontrols集合的 A dd方法:N ameO

12、fMenu.Controls.Add(Type,Id,Parameter,Before,Te mporary)你很可能已经猜测到,N ameOfMenu需要用要添加的菜单名称来替换,而Ty pe参数对于菜单而言,取值应该是m soControlPopup。参数 I d的取值取决于要添加的菜单类型。如果添加的是自定义菜单,那么I d取值应该为 1。如果是内置菜单,那么I d取值应该是一个整数,这个整数指定了所希望的菜单。那么,怎样去找到哪个菜单对应哪个整数呢?实际上,最简单的方式是开始录制一个宏,把需要向菜单栏添加的菜单添加进去,记录的菜单就拥有了所需要的那个整数值。要添加内置菜单到菜单栏的话,

13、用鼠标右键单击菜单栏,从弹出的菜单中选择“自定义”,切换到“命令”选项卡页。在“类别”列表框中找到并选择“内置菜单”,选中以后,内置菜单就在“命令”列表框中显示出来。把所要添加的菜单拖到菜单栏上,该菜单就添加到了菜单栏中,并且其中包括了该菜单的所有菜单项。P arameter参数可选,它的取值取决于要使用的菜单类型。如果是内置菜单,那么很可能就不需要提供该参数的值。如果是自定义菜单,就可以使用这个参数来把信息发送到Vi sualB asic过程中。还可以利用这个参数来存储控件的有关信息。B efore参数也可选,它的取值是一个代表菜单栏上新控件位置的数字。菜单(或者菜单项)将插入到位于所提供位

14、置上的那个控件的前面。如果没有给该参数提供值的话,菜单或者菜单项就添加到最后。如果想要菜单或者菜单项成为临时的,那么就应该把可选参数Te mporary的值设置为 Tr ue。该参数的默认值是F alse。如果想要把菜单添加到活动的菜单栏上,那么可以使用C ommandB ars集合的 A ctiveMenuBar属性来返回活动菜单栏的名称,应用举例如下:Set CurrMenuBar=CommandBars.ActiveMenuBar有时候,可能想要自定义自己的菜单,以便能够启动简单的过程,下面的练习将介绍怎样实现这一点,将添加“文件”菜单和一个自定义菜单到Hour 17 菜单栏上。首先,需

15、要修改M y F i r s t M e n u 过程以添加菜单到菜单栏上,然后将添加菜单项到菜单中。现在修改M yFirstMenu,使得它跟程序清单1 7-2一样。注意,修改的部分用黑粗体表示。程序清单 17-2 修改后的 M yFirstMenu过程代码1:Sub MyFirstMenu()2:Dim mybar As CommandBar3:Dim mymenu As Object 148使用 中文Excel 2000编程 2 4学时教程4:Dim mymenuitem As Object5:6:Set mybar=CommandBars.Add(Name:=Hour17,_P osi

16、tion:=msoBarTo p,MenuBar:=Tr ue,_7:Te mporary:=Tr ue)8:9:mybar.Controls.Add Type:=msoControlPopup,ID:=30002,Before:=11 0:11:Set mymenu=mybar.Controls.Add(Type:=msoControlPopup,_12:Te mporary:=Tr ue)13:mymenu.Caption=Hour 171 4:15:Set mymenuitem=mymenu.Controls.Add(Ty pe:=msoControlButt on,ID:=1)16:m

17、ymenuitem.Caption=Macro Demo17:mymenuitem.Style=msoButtonCaption18:mymenuitem.OnAction=ShowMe1 9:20:mybar.Visible=Tr ue21:CommandBars(Worksheet Menu Bar).Visible=False22:End Sub我们需要创建一个新过程,在这个例子中,把它命名为S howMe。在这个新过程中输入下面的代码:MsgBox It Wo rks!现在,返回到工作簿的S heet1,单击 My Menu 按钮来运行程序,现在菜单栏中就有菜单了,如图 1 7-5所示

18、。选择 Hour 17 菜单,然后选择Macro Demo(宏演示),将显示消息对话框,单击“确定”按钮以关闭该对话框。接下来单击Default Menu 按钮以返回到工作表菜单栏,把工作簿另存为Hour 17。现在,我们花一些时间来分析对M yFirstMenu过程所做出的修改。可以看到代码首先创建第17学时菜单使用149图17-5 菜 单 栏 不 再 是 空的了了两个新的对象变量:Dim mymenu As ObjectDim mymenuitem As Object过程中下一行新修改的代码添加了“文件”菜单。为了获得该菜单I D属性的取值,笔者录制了一个添加“文件”菜单的宏。“文件”菜单

19、是这个菜单栏上的第一个菜单,所以B efore参数的取值是 1:m ybar.Controls.Add Type:=msoControlPopup,ID:=30002,Before:=1下一个添加的菜单是自定义类型的:Set mymenu=mybar.Controls.Add(Type:=msoControlPopup,Temporary:=Tr ue)mymenu.Caption=Hour 17添加了自定义菜单以后,又添加了一个自定义菜单项:Set mymenuitem=mymenu.Controls.Add(Type:=msoControlButton,ID:=1)自定义菜单项需要设置它的

20、几个属性,C aption属性的取值就是显示的菜单项文本,S tyle(样式)设置为m soButtonCaption是因为这个菜单项只有显示的文本。菜单项是没有与之相关联的图标的。O nAction属性设置了当菜单项选中时需要运行的那个过程:mymenuitem.Caption=Macro Demomymenuitem.Style=msoButtonCaptionmymenuitem.OnAction=ShowMe现在,你已经知道怎样向菜单栏上添加菜单和菜单项了,不管是添加菜单还是菜单项,都要使用 C ontrols集合,关键是要明白把控件添加到哪种类型的对象中去。添加菜单时,是把控件添加到

21、菜单栏上。而添加菜单项时,是把控件添加到菜单中。17.3 学时小结通过 V BA代码来使用菜单的关键是A dd方法,要创建菜单栏、菜单或者菜单项,都使用到A dd方法。在这个学时中,我们使用了两个集合:C ommandBars集合和 C ontrols集合。现在已经知道,使用菜单的方法跟使用工具栏的方法非常相似,所不同的是参数的取值和属性的设置有区别而已。17.4 专家答疑问题:使用工具栏时,使用的是C ommandBars集合和 C ontrols集合,现在使用菜单时,仍然使用了这两个同样的集合,这是为什么?解答:在 E xcel(和O ff ice)环境中,菜单栏和工具栏两者都是C omm

22、andBars集合的成员。菜单、菜单栏和工具栏按钮也都是C ontrols集合的成员。如果理解了这一点,那么问题就解决了。菜单栏和工具栏是那些用来执行命令的控件的包容器。问题:如果想要创建在应用程序运行时不可使用的菜单或者菜单项,应该怎么办呢?怎样具体实现?解答:把菜单或者菜单项的E nabled属性设置为 F alse就可以实现。17.5 课外作业思考题和练习题是为了使你能够进一步地理解所学内容,答案请参考附录。150使用 中文Excel 2000编程 2 4学时教程17.5.1 思考题1)创建菜单时使用的是什么方法?2)过程是分配给自定义控件(菜单项)的哪个属性呢?3)菜单的控件类型是什么

23、?4)怎样使用 V BA代码来删除菜单?5)修改菜单时,必须打开哪个对话框?6)当使用 A dd方法来创建命令栏时,哪个属性是用来在包容器应用程序关闭时自动地删除命令栏?7)怎样显示菜单栏?17.5.2 练习题使用 V BA代码,创建命名为E xercise17的自定义菜单栏,其中包含“文件”、“编辑”和“帮助”菜单,并且使用V B A代码来显示新创建的菜单栏。另外创建一个过程来删除E xercise17菜单,必要时,可以向工作簿中另外添加一个工作表。在S heet2上,添加两个命令按钮:一个用来执行创建菜单栏的过程,另外一个用来执行删除菜单栏的过程。运行并测试这两个过程。第17学时菜单使用151

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 实施方案

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁