分享

经典代码解析6:自定义工具栏

 L罗乐 2017-08-23


目的

定制自已的工具栏。

 

示例工作簿

如下图所示,工作簿包含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内置控件的属性才能更加游刃有余地创建自已的菜单和工具栏。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多