添加和管理菜单栏和菜单项

   

有些容器应用程序不提供新建菜单栏的方法,因此,需用 Visual Basic 创建菜单栏。在用 Visual Basic 创建了一个菜单栏之后,就可用容器应用程序接口或继续用 Visual Basic 定义该菜单栏。

在运行时间添加菜单栏

要在运行时间给应用程序添加一个菜单栏,可用 CommandBars 集合的 Add 方法并将 MenuBar 参数指定为 True。以下示例将添加一个不可移动的菜单栏,并将该菜单栏固定在应用程序窗口的右边。

Set menubar = CommandBars.Add _
    (Name:="mBar", Position:=msoBarRight, MenuBar:=True)
With menubar
    .Protection = msoBarNoMove
    .Visible = True
End With

运行时间修改菜单栏

在运行时间可同时修改菜单栏及其控件。对菜单栏的修改可能会影响其外观或位置;对控件的修改取决于该控件的类型。下表是在运行时间修改菜单栏的最常用属性和方法。

属性或方法 说明
Add CommandBars 集合的 Add 方法添加一个菜单栏并指定 MenuBar 参数为 True
Enabled 如果该属性设置为 True,那么用户可用 Visual Basic 代码显示指定的菜单栏;如果该属性设置为 False,那么用户不能显示菜单栏,但该菜单栏将列在有效菜单栏列表中。
Protection 禁止用户对菜单栏进行特定操作。可将该值设置为以下 MsoBarProtection 常量之一或组合:msoBarNoChangeDockmsoBarNoChangeVisiblemsoBarNoCustomizemsoBarNoHorizontalDockmsoBarNoMovemsoBarNoProtectionmsoBarNoResizemsoBarNoVerticalDock
Position 指定新菜单栏相对于应用程序窗口的位置。可将其设置为以下 MsoBarPosition 常量之一:msoBarLeftmsoBarTopmsoBarRightmsoBarBottommsoBarFloatingmsoBarPopup(用于创建快捷菜单)或 msoBarMenuBar(Macintosh 专用)。
Visible 指定对用户是显示还是隐藏控件。如果该控件对用户是隐藏的,那么该菜单栏名仍将显示在有效命令栏列表中。

以下示例可实现:隐藏活动菜单栏并用一个临时菜单栏代替,该临时菜单栏固定在应用程序窗口右边,并且对用户处于保护状态。

Set oldMbar = CommandBars.ActiveMenuBar
Set newMbar = CommandBars.Add _
(Name:="newMenubar", Position:=msoBarRight, _
MenuBar:=True, temporary:=True)
With newMbar
    .Visible = True
    .Protection = msoBarNoMove
End With

在运行时间合并菜单栏

对加载应用程序中的自定义菜单栏,如果要指定其在容器应用程序中的表示方式,可用 CommandBarPopup 对象的 OLEMenuGroup 属性指定菜单栏合并的方式。

对菜单项作运行时间修改

对菜单项的修改范围取决于控件的类型。通常,按钮具有有效和隐藏两种状态,而编辑框、下拉式列表框和组合框可进行的操作更为多样化:可在列表中添加或删除列表项,也可根据选中的值确定要执行的动作。用户可将任意控件的动作改为内置功能或自定义功能。

下表是改变控件状态、动作或内容的最常用的属性和方法。

属性或方法 目的
Add 在命令栏中添加一个菜单项。对内置控件,Type 变量可以是以下 MsoControlType 常量之一:msoControlButtonmsoControlEditmsoControlDropdownmsoControlComboBox
AddItem 在下拉式列表框或组合框的下拉式列表区中添加一个列表项。可为已有列表中的新项指定一个索引号,但其数值不能大于列表中的项目数,否则 AddItem 方法失败。
Style 指定按钮外观是显示其图标还是显示其标题。该值可为以下 MsoButtonStyle 常量之一:msoButtonAutomaticmsoButtonIconmsoButtonCaptionmsoButtonIconAndCaptionmsoButtonIconAndCaptionBelowmsoButtonIconAndWrapCaptionmsoButtonIconAndWrapCaptionBelowmsoButtonWrapCaption
OnAction 指定当用户改变特定控件的值时要运行的过程。
Visible 指定控件对用户是显示还是隐藏。

以下示例在活动菜单栏的末尾添加一个命名为“Custom”的临时弹出式控件,然后在该自定义弹出式命令栏中添加一个按钮控件“Import”。

Set myMenuBar = CommandBars.ActiveMenuBar
Set newMenu = myMenuBar.Controls.Add(Type:=msoControlPopup, _
    Temporary:=True)
newMenu.Caption = "Custom"
Set ctrl1 = newMenu.Controls _
    .Add(Type:=msoControlButton, Id:=1)
ctrl1.Caption = "Import"
ctrl1.TooltipText = "Import"
ctrl1.Style = msoButtonCaption