nba30支球队名称及标志:CommandBar介绍-菜单栏

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 16:33:41

CommandBar介绍-菜单栏

2009年2月20日评论 发表评论

在Excel5和Excel95时,菜单和工具栏分别使用不同的对象。从Excel97开始,所有的菜单和工具栏都使用同一种对象CommandBar来表示。

一般来说包括三种常用的CommandBar类型。通过CommandBar对象的Type属性可以判断该对象是下列三种类型的其中之一。Type属性返回一个msoBarType常量(包括msoBarNormal, msoBarMenu, msoBarPopup)。
第一种是菜单栏,msoBarMenu,可以自定义菜单以及子菜单添加在工作表的菜单上。如下图:

第二种是工具栏,msoBarNormal,可以在Excel的各个位置创建自定义工具栏。如下图:

第三种是右键菜单,msoBarPopup,可以自定义右键菜单,或在默认右键菜单上添加菜单项。如下图:

CommandBar对象包含的项目叫做Control。Excel2003包括大约124个内置CommandBar和上千个Control。

接着的三篇文章将介绍怎样使用VBA代码创建自定义菜单和工具栏。

自定义菜单

Excel有两种常用的菜单,一个叫做工作表菜单栏(Worksheet Menu Bar),另外一个叫做图表菜单栏(Chart Menu Bar)。Chart Menu Bar在选择图表时显示。
下面的代码分别创建工作表菜单和图表菜单。

Sub DeleteMenu()On Error Resume Next'关闭文件前删除自定义菜单    CommandBars("Worksheet Menu Bar").Controls("MyMenu").DeleteCommandBars("Chart Menu Bar").Controls("MyMenu").DeleteEnd SubSub CloseMe()DeleteMenuThisWorkbook.Close FalseEnd SubSub Auto_Close()Call CloseMeEnd SubSub Auto_Open()Dim newMenu As CommandBarControlDim i As Integer '如发现有相同菜单,关闭该菜单后再打开本文件    On Error Resume NextCommandBars("Worksheet Menu Bar").Controls("MyMenu").DeleteOn Error GoTo 0 '在帮助菜单后添加自定义菜单    Set newMenu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, _Temporary:=True, Before:=CommandBars("Worksheet Menu Bar").Controls.Count)With newMenu.Caption = "MyMenu"' 第一级菜单        With .CommandBar.Controls.Add(Type:=msoControlButton).Caption = "Menu 01".State = msoButtonDown.Style = msoButtonCaption.OnAction = "CheckMenu"End With'添加弹出菜单        With .CommandBar.Controls.Add(Type:=msoControlPopup).Caption = "Menu 02"'第二级菜单            With .Controls.Add(Type:=msoControlButton).Caption = "SubMenu 01"'.Style = msoButtonCaption                ' 设置Face ID,Style属性不能设置为msoButtonCaption                .FaceId = 16.OnAction = "MenuProc"End WithWith .Controls.Add(Type:=msoControlButton).Caption = "SubMenu 02".Style = msoButtonCaption.OnAction = "MenuProc"End WithEnd With' 退出菜单        With .CommandBar.Controls.Add(Type:=msoControlButton).Caption = "退出".BeginGroup = True.Picture = LoadPicture(ThisWorkbook.Path & "\menufore.bmp").Mask = LoadPicture(ThisWorkbook.Path & "\menumask.bmp").OnAction = "CloseMe"End WithEnd With ' 如果已经存在菜单,删除    On Error Resume NextCommandBars("Chart Menu Bar").Controls("MyMenu").DeleteOn Error GoTo 0 '在帮助菜单后添加自定义图表菜单    With CommandBars("Chart Menu Bar").Controls.Add(Type:=msoControlPopup, _Temporary:=True, Before:=CommandBars("Chart Menu Bar").Controls.Count).Caption = "MyMenu"With .CommandBar.Controls.Add(Type:=msoControlButton).Caption = "ChartMenu".Style = msoButtonCaption.OnAction = "MenuProc"End WithEnd WithEnd SubSub CheckMenu()With CommandBars.ActionControlIf .State = msoButtonDown Then.State = msoButtonUpElse.State = msoButtonDownEnd IfEnd WithEnd SubSub MenuProc()Dim sCall As StringsCall = CommandBars.ActionControl.CaptionMsgBox "你点击了: " & sCall, vbInformationEnd Sub

Auto_Open和Auto_Close过程分别在打开和关闭工作簿时执行。CommandBars(”Worksheet Menu Bar”)表示工作表菜单,使用该对象的Controls属性的Add方法可以添加自定义菜单。
CommandBarControl对象的Add方法语法如下:

expression.Add(Type, Id, Parameter, Before, Temporary)

expression 必需。该表达式返回一个 CommandBarControls 对象。
Type Variant 类型,可选。添加到指定命令栏的控件类型。可以为下列 MsoControlType 常量之一:msoControlButton、msoControlEdit、msoControlDropdown、msoControlComboBox 或 msoControlPopup。
Id Variant 类型,可选。指定内置控件的整数。如果该参数为 1,或者忽略该参数,将在命令栏中添加一个空的指定类型的自定义控件。
Parameter Variant 类型,可选。对于内置控件,该参数用于容器应用程序运行命令。对于自定义控件,可以使用该参数向 Visual Basic 过程传递信息,或用其存储控件信息(类似于第二个 Tag 属性值)。
Before Variant 类型,可选。表示新控件在命令栏上位置的数字。新控件将插入到该位置控件之前。如果忽略该参数,控件将添加到指定命令栏的末端。
Temporary Variant 类型,可选。设置为 True 将使新命令栏为临时命令栏。临时命令栏在关闭容器应用程序时删除。默认值为 False。

对于主菜单的命令栏,Type属性一般使用msoControlPopup。如果第一级菜单不是弹出菜单,Type属性一般使用msoControlButton。如果需要第二级菜单,则需要设置第一级菜单的Type属性为msoControlPopup。

菜单命令栏控件的几个常用属性包括:
Caption:命令栏控件的题注;
OnAction:一个Visual Basic的过程名,该过程在用户单击或更改某命令栏控件的值时运行;
BeginGroup:表示控件是否现在的命令栏控件组的最前面;
State:这个属性没有在帮助文件中显示。这个属性可以为两个常数之一:msoButtonDown和msoButtonUp。msoButtonDown表示在菜单左侧显示一个检查符号。msoButtonUP则取消选择;
可以通过下面的代码来处理菜单栏的选择和取消:

Sub CheckMenu()With CommandBars.ActionControlIf .State = msoButtonDown Then.State = msoButtonUpElse.State = msoButtonDownEnd IfEnd WithEnd Sub

Faceid:菜单栏控件图标;
另外还可以使用Picture和Mask属性来制作自定义的图标。

.Picture = LoadPicture(ThisWorkbook.Path & "\menufore.bmp").Mask = LoadPicture(ThisWorkbook.Path & "\menumask.bmp")

图表菜单栏的创建方法和工作表菜单栏类似。

在关闭文件时,一般需要清除自定义菜单。可以直接使用CommandBarControl对象的Delete方法。

Sub DeleteMenu()On Error Resume Next' 关闭文件前删除自定义菜单    CommandBars("Worksheet Menu Bar").Controls("MyMenu").DeleteCommandBars("Chart Menu Bar").Controls("MyMenu").DeleteEnd Sub

将上面的代码复制到一个标准模块中,保存文件,然后重新打开,将生成如下工作表菜单栏:

图表菜单栏在选择图表时显示,如下图:

示例文件下载:Box.Net | SkyDrive

Related posts:

  1. Excel2003和Excel2007中的Sparkline
  2. 提取丢失数据源的图表中的数据
  3. Excel中VBA关闭PPS文件

以上关联文章由 Yet Another Related Posts Plugin 提供支持。