如果想在Excel 2007中创建一个工具栏,应注意下面的一些限制:
(1)不能够自由浮动;
(2)总是显示在加载项选项卡自定义工具栏组中;
(3)Excel会忽略一些CommandBar的属性和方法;
创建工具栏的代码:
这里的代码假定有一个带有两个名为Macro1和Macro2宏的工作簿,并且在该工作簿打开时创建这个工具栏,在关闭该工作簿时删除这个工具栏。
注意,与Ribbon定制不同,不管当前是哪个工作簿,自定义工具栏者是可见的。
在ThisWorkbook代码模块中,输入下面的过程。第一个过程为在打开工作簿时调用创建工具栏的过程,第二个过程为在关闭工作簿时调用删除工具栏的过程。
Private;Sub;Workbook_Open() Call;CreateToolbar End;SubPrivate Sub;Workbook_BeforeClose(Cancel;As;Boolean) Call;DeleteToolbar End;Sub;过程CreateToolbar的代码如下: Const;TOOLBARNAME;As;String;=;"我的工具栏" Sub;CreateToolbar() Dim;TBar;As;CommandBar Dim;Btn;As;CommandBarButton '如果存在则删除已存在的工具栏 On;Error;Resume;Next CommandBars(TOOLBARNAME).Delete On;Error;GoTo;0 '创建工具栏 Set;TBar;=;CommandBars.Add With;TBar .Name;=;TOOLBARNAME .Visible;=;True End;With '添加按钮 Set;Btn;=;TBar.Controls.Add(Type:=msoControlButton) With;Btn .FaceId;=;300 . .Caption;=;"这里是Macro1的提示" End;With '添加另一个按钮 Set;Btn;=;TBar.Controls.Add(Type:=msoControlButton) With;Btn .FaceId;=;25 . .Caption;=;"这里是Macro2的提示" End;With End;Sub |
代码中使用了一个模块级的常量TOOLBARNAME,用来存储工具栏的名称,并用于这两个过程中。
如果已存在具有相同名字的工具栏,则该过程先删除该工具栏。这样将会避免企图创建与已存在的工具栏有相同名称的工具栏时,产生错误。
通过使用CommandBars对象的Add方法来创建该工具栏,使用Controls对象的Add方法来添加两个按钮,每个按钮都有三个属性:
FaceID:确定显示在按钮中的图像的数字。
OnAction:在单击按钮时执行的宏。
Caption:鼠标指针悬浮在按钮上时显示的屏幕提示。
技巧:不仅可以设置FaceID属性,还可以设置Picture属性,使用任何的imageMso图像。例如,下面的语句晶粒示一个绿色的勾号:
PLAIN;TEXT Visual;Basic: .Picture;=;Application.CommandBars.GetImageMso;_ ("AcceptInvitation",;16,;16) |
在关闭工作簿时,触发Workbook_BeforeClose事件过程,调用过程DeleteToolbar:
Sub;DeleteToolbar() On;Error;Resume;Next CommandBars(TOOLBARNAME).Delete On;Error;GoTo;0 End;Sub |