目的 定制自已的工具栏。 示例工作簿 如下图所示,工作簿包含4个工作表。工具栏是动态的,当在组合框中选择工作表名时会使该工作表成为当前工作表,并在组合框右侧显示相应的下拉命令;或者激活某工作表时,组合框中会显示该工作表名称,并在组合框右侧显示相应的下拉命令。 程序代码及解析 类模块 在VBE中,插入一个类模块,将其命名为:clsCustomMenu。输入下面的代码:
说明:
代码主要用于在激活工作簿及相应的工作表、选取组合框中的项目时的响应。 WorkbookActivate事件用于激活代码所在工作簿时的响应。若当前工作簿不是代码所在工作簿,则自定义工具栏不能使用。 SheetActivate事件用于激活工作表时的响应。将在自定义工具栏的组合框中添加所有工作表的名字作为其条目,并定位到当前工作表。 drop_Change事件为选取组合框中的条目时,调用相应的子过程。例如,如果选取条目“Suppliers”,那么调用子过程“setMNUSUPPLIERS”。 代码中的FindControl方法用于查找工具栏中参数Type的值为msoControlDropdown,参数Tag的值为myList的控件,本例中为组合框控件。 AddItem方法在组合框中添加工作表名作为其条目。 代码:
For i = 1 To g_cmdbarcboBox.ListCount If g_cmdbarcboBox.List(i) = Sh.NameThen g_cmdbarcboBox.ListIndex = i Exit For End If Next i 将组合框中显示的条目与所选择的工作表相匹配。 标准模块 在标准模块中,输入下面的代码:
说明: 代码首先声明了一些表示工具栏及下拉按钮名称的常量,声明工具栏、组合框等公共变量。 BuildMenus过程用于创建自定义工具栏。代码创建一个名为“DYNAMIC MENU”的工具栏并添加一个组合框控件和一个帮助按钮,并设置相应的属性。 DeleteMenus过程用于在创建工具栏前确保没有重复创建该工具栏,或者在关闭工作簿前确保删除已创建的工具栏,并释放对象。 deleteControls过程用于在工具栏中添加控件前清除已有的控件,确保添加的控件不冲突。 selectedSheet过程响应在组合框中选取某工作表名时的动作,即激活与组合框当前条目相同名称的工作表。 setMNUSUPPLIERS 过程、setMNUCUSTOMERS 过程、setMNUACCOUNTS过程等设置在选取组合框中的条目后,在其右侧添加相应的下拉控件。
工作簿事件模块 在ThisWorkbook模块中,输入下列代码:
说明: 小结 本例给出了一段自定义工具栏的框架。在类模块中,实现工作簿、工作表及控件的事件响应代码。在标准模块中,创建相应的工具栏控件,以及根据选择项目的不同,动态设置下拉按钮。可以基于此代码,在其中添加相应的代码来增加控件和实现控件功能的过程。 由于Excel 2007及以上版本舍弃了原来经典的菜单和工具栏界面,因此自定义的菜单和工具栏将出现在“加载项”选项卡中。 尽管自定义菜单和工具栏的原理不复杂,但由于涉及到众多类型的命令,因此需要熟悉Excel内置控件的属性才能更加游刃有余地创建自已的菜单和工具栏。
|