雀巢雪丽糍多少钱一个:在Excel 中自定义菜单栏和工具栏-添加、删除、禁止等

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 20:50:36

 


    关于在 Excel 中如何自定义菜单栏和工具栏,甚至快捷菜单,微软有篇很详细的文档:如何在 Excel 中自定义菜单和菜单栏。我再把自己的经验补充一下: 
    当我们打开 Excel 的时候,我们会看到一个菜单栏,还有根多工具栏。具体显示哪些工具栏,我们可以通过 View->Toolbars 来控制。同时,这个长长的列表最后一项“Customize”很有用,我们可以通过这个命令来修改 Offcie 系统本身提供的各种各样的菜单项和工具栏,包括改名,删除,添加分隔线等,我们还可以添加自己的菜单项和工具栏。
    对 Excel 菜单和工具栏的操作,用“Customize”命令和用VBA 的效果是一样的,不过,用VBA 可以进行更多的自定义操作,我这里总结的就是用 VBA 操作 Excel 菜单和工具栏的知识和经验。 
    Excel 里的所有菜单栏,工具栏,以及快捷菜单,在 Office 系统里都是用 CommandBar (命令栏)这个类来表示的。每个工具栏都是一个 CommandBar 对象,比如我们点 View->Toolbars 看到的 “Standard”、“Formatting”等都是单独的 CommandBar 对象。对于一个 Office 应用程序,比如 Excel,里面的所有菜单栏都放在一个 CommandBars 集合对象里。CommandBars 类是 CommandBar 类的集合,当我们想访问某个具体的菜单栏和工具栏,还有快捷菜单时,我们可以使用如下的表达方式: 
    Application.CommandBars(index)     Application 对象指当前的应用程序,在这里具体的就是 Excel。这里的 CommandBars 是 Application 对象的属性,返回一个 CommandBars 对象,CommandBars(index) 这种表示法则返回一个具体的 CommandBar 对象。index 可以是 CommandBar 对象的编号,也可以是 CommandBar 对象的名称。我编了段代码把我自己机器上安装的 Excel 的所有 CommandBar 对象的名称的编号打了份列表出来。如果想通过 VBA 来控制 Excel 的 命令栏,其中有几个常用的名称我们应该要了解的。Excel 的菜单栏名称是“Worksheet Menu Bar”,编号是 1。常用的工具栏有“Standard”,编号 3;“Formatting”, 编号 4。鼠标右键点工作表区域出来的快捷菜单名称是“Cell”,编号是 36。用名称和用编号访问 CommandBar 对象是等价的。     Application.CommandBars(“Worksheet Menu Bar”) 和 Application.CommandBars(1) 两个写法效果是一样的。     当我们想添加自己的工具栏时,我们是用 CommandBars 的 Add 方法,语法如下:     CommandBars.Add(Name, Position, MenuBar, Temporary)     Name 参数是我们给自定义的工具栏起的名称。已经存在的名字不能重复使用,否则会报错(Run-Time error 5,无效的参数)。
    Position 参数不仅决定自定义工具栏的位置,还决定自定义工具栏的类型。这个参数是 MsoBarPosition 枚举常量里的一个。msoBarLeft, msoBarTop, msoBarRight, msoBarBottom 四个值表示 自定义工具栏出现在 Excel 窗口的上、下、左、右四个位置,是 docked 的。msoBarFloating 表示新工具栏 不是 docked 的,浮在窗体上方。msoBarPopup 则表示创建的是快捷菜单。msoBarMenuBar 这个值 Windows 用不到,只用在 Macintosh 操作系统。
    MenuBar 参数是个布尔值,决定创建的新命令栏是菜单栏还是工具栏,因为 Windows 的传统是一个程序只有一个菜单栏。当我们指定为 True 时,我们自定义的菜单栏将替换 Excel 默认的菜单栏,最好不要做这件事情。这个参数默认是 False,也就意味着我们新建的命令栏是工具栏或者快捷菜单。
    Temporary 参数也是个布尔值。True 决定 Excel 程序关闭再打开后这个新命令栏就没用了 。这个参数默认值是 False,也就是说我们自定义的命令栏将一直跟随 Excel 程序存在。比如 Adobe 公司的 PDF Maker 工具栏。 用上述语句生成的新工具栏不会直接显示出来,我们还需要把新工具栏的 Visible 属性设为 True,在某些 Office 版本里,可能还要先把 Enabled 属性设为 True。在 Office 2003 里,只要 Visible 属性设为 True 就可以了。下面是示例代码: 

Dim myNewBar As CommandBar
Set myNewBar = Application.CommandBars.Add ("littlegirl", msoBarFloating)
myNewBar.Enabled = True
myNewBar.Visible = True 

    如果创建的是快捷菜单,情形有点复杂,Visible 属性设为 True 也不会显示快捷菜单,我们需要在 Workbook_SheetBeforeRightClick 事件里添加如下语句:     Application.CommandBars("myShortcutBar").ShowPopup 200,200     我前面说过,Excel 默认的快捷菜单叫“Cell”,我们加了自定义的快捷菜单后会干扰使用固有的快捷菜单。     如果想要删除一个工具栏,不管是自定义的还是固有的,就要用 CommandBar 对象的 Delete 方法。注意, 添加是在集合对象 CommandBars 上操作的,删除则是在单个的 CommandBar 对象上执行的。     Application.CommandBars("myShortcutBar").Delete     如果我们修改过了某些工具栏,我们可以用 CommandBar 对象的 Reset 方法将它们还原:     Application.CommandBars("Cell").Reset     上面讲的是添加/删除整个的命令栏,但更多时候,我们是在系统菜单栏里加个菜单项,或者在 “Standard”工具栏上加个我们自己开发的程序的按钮。菜单栏、快捷菜单里的菜单项,还有工具栏上的按钮,是用 CommandBarControl 类来表示的。跟所有的 CommandBar 对象放在一个 CommandBars 集合对象里一样,某个具体的工具栏(菜单栏)上的所有按钮,即所有的 CommandBarControl 对象也是放在一个 CommandBarControls 集合对象里的。CommandBar 对象的 Controls 属性可以返回一个 CommandBarControls 集合对象。我们可以用下面的语句访问某个具体的菜单项或命令按钮:     Application.CommandBars("Formatting").Controls(index)   --访问 “Formatting”工具栏的某个按钮     index 是控件的标题或编号。     工具栏上的按钮形态是多种多样的,有命令按钮,文本框,下拉框等等;菜单项也是一层层嵌套的,有的菜单项只是弹出更多的菜单项来。CommandBarControl 类是个父类,下面派生出  CommandBarButton,CommandBarComboBox,和 CommandBarPopup 三个子类,对应工具栏上不同形态的按钮。但是工具栏上实际出现的按钮类型远远超出这三个子类,这时我们就用 CommandBarControl 对象来表示就行了。

Office 里的 MsoControlType 枚举类型定义了下面这么多的常量:
msoControlActiveX                        22
msoControlAutoCompleteCombo    26
msoControlButton                          1
msoControlButtonDropdown            5
msoControlButtonPopup                 12
msoControlComboBox                    4
msoControlCustom                         0
msoControlDropdown                      3
msoControlEdit                              2
msoControlExpandingGrid              16
msoControlGauge                          19
msoControlGenericDropdown           8
msoControlGraphicCombo              20
msoControlGraphicDropdown           9
msoControlGraphicPopup               11
msoControlGrid                              18
msoControlLabel                            15
msoControlLabelEx                        24
msoControlOCXDropDown               7
msoControlPane                            21
msoControlPopup                          10
msoControlSpinner                         23
msoControlSplitButtonMRUPopup   14
msoControlSplitButtonPopup          13
msoControlSplitDropdown               6
msoControlSplitExpandingGrid       17
msoControlWorkPane                    25  

    我们可以用 CommandBarControl 对象的 Type 属性来查看它是上面的哪个类型,如果能够明确对应的子类, 就可以访问更多的属性。比如“Formatting”工具栏上的“Font”下拉框是 CommandBarComboBox 子类,我们可以用它的 List(index) 属性打印出一个字体列表。 向工具栏添加控件的语法如下:(向菜单栏添加菜单项同理) Application.CommandBars("Standard").Controls.Add(Type, Id, Parameter, Before, Temporary) Id 这个参数的好处是我们可以把 Excel 内置的控件添加到我们自己的工具栏里。当然,你先要知道那个控件 的编号。
添加新控件是在 CommandBarControls 集合对象上执行的,删除则是在具体的  CommandBarControl 对象上执行。