全部显示

添加和修改工具栏

   

所有宿主应用程序都有一个扩展接口,以便添加和设计自定义工具栏(添加内置按钮、添加作为按钮的宏,甚至给工具栏添加弹出式控件)。用 Visual Basic 代码所作的设计期修改通常用于添加或修改组合框控件。而用代码对工具栏所作的修改几乎完全属于运行时间修改(改变按钮的状态、外观、功能等等)。

对工具栏作运行时间修改

在运行时间可对工具栏作多种不同的修改。其中之一是改变命令栏按钮在工具栏上的状态。每个按钮控件都有两种活动状态:按下状态 (True) 和未按下状态 (False)。要改变按钮控件的状态,可为 State 属性赋予适当的常量,如本主题后面的表中所述。

在运行时间可作的另一种修改是改变按钮的外观或功能。要改变按钮的外观而不改变其功能,可用 CopyFacePasteFace 方法。这些方法可用于将某个特殊按钮的图符复制到“剪贴板”,或将该按钮图符导入另一个应用程序以改变它的某些特性。用 PasteFace 方法可将按钮图符从“剪贴板”转移到指定的按钮上。

要将按钮的动作改为自定义的功能,可给该按钮的 OnAction 属性指定一个自定义过程名。

下表列举了大多数常用的修改按钮状态、外观或动作的属性和方法。

属性或方法 说明
CopyFacePasteFace 将图像复制或粘贴在按钮的图符上。用 CopyFace 方法可将指定按钮的图符复制到“剪贴板”上。用 PasteFace 方法可将“剪贴板”上的内容粘贴到指定按钮的图符上。如果“剪贴板”上没有图像,那么 PasteFace 方法失效。如果“剪贴板”上的图像对按钮图符来说太大,那么该图像不会按比例缩小。

一般来说,在设计期复制和粘贴按钮图符更方便,但也可在运行时间修改按钮图符。还可用 FaceId 属性为按钮指定一个不同的内置按钮图符。

Id 指定代表按钮内置函数的值。例如,一个可将突出显示文本复制到“剪贴板”上的按钮,具有的 Id 值为 19。
State 指定按钮的外观或状态。该值可设置为 MsoButtonState 的以下常量之一:msoButtonDownmsoButtonMixedmsoButtonUp
Style 指定按钮图符是显示其图标还是显示其标题。该值可设置为 MsoButtonStyle 的以下常量之一:msoButtonAutomaticmsoButtonIconmsoButtonCaptionmsoButtonIconandCaptionmsoButtonIconAndCaptionBelowmsoButtonIconAndWrapCaptionmsoButtonIconAndWrapCaptionBelowmsoButtonWrapCaption
OnAction 指定在用户单击按钮、显示菜单或更改一个组合框控件的内容时所运行的过程。
Visible 指定控件对用户是显示还是隐藏。
Enabled 使一个命令栏生效或失效。失效的命令栏名不显示在有效命令栏列表中。

以下示例创建了包含一个命令按钮的命令栏。通过 CommandBarButton 对象的 OnAction 属性,可用 CopyFace 方法将内置的“打开”按钮的按钮图符复制到“剪贴板”上,再用 PasteFace 方法将其粘贴到已存在的按钮上。这样就在运行时间修改了命令栏按钮的外观。

Sub testAddModifyToolbars1()
Set myBar = CommandBars _
    .Add(Name:="ChangingButton", Position:=msoBarTop, _
    Temporary:=True)
myBar.Visible = True
Set oldControl = myBar.Controls _
    .Add(Type:=msoControlButton, _
    ID:=CommandBars("Standard").Controls("Copy").Id)
oldControl.OnAction = "changeFaces"
End Sub

Sub changeFaces()
Set newControl = CommandBars.FindControl _
    (Type:=msoControlButton, _
    ID:=CommandBars("Standard").Controls("Paste").Id)
newControl.CopyFace
Set oldControl = _
CommandBars("ChangingButton").Controls(1)
oldControl.PasteFace
End Sub

添加和修改组合框控件

编辑框、下拉式列表框和组合框都是功能强大的新控件,可以添加到 Visual Basic 应用程序的工具栏中。然而,大多数容器应用程序需要用 Visual Basic 代码来设计这些控件。要设计一个组合框,可用下表所述的属性和方法。

属性或方法 说明
Add 如果要在命令栏中添加一个组合框控件,可为 Type 参数指定以下 MsoControlType 常量之一:msoControlEditmsoControlDropdownmsoControlComboBox
AddItem 在下拉式列表框或组合框的下拉式列表区中添加一个列表项。可为已有列表中的新项指定一个索引号,但其数值不能大于列表中的项目数,否则 AddItem 方法失败。
Caption 为组合框控件指定标签。如果将 Style 属性设置为 msoComboLabel,那么该标签将在该控件旁显示。
Style 确定指定控件的标题是否显示在该控件旁。该值可设置为 MsoComboStyle 的以下常量之一:msoComboLabel(显示标签)或 msoComboNormal(不显示标签)。
OnAction 指定当用户改变组合框控件的内容时要运行的过程。

以下示例在自定义工具栏中添加一个带标签“Quarter”的组合框,并给该控件分配一个名为“ScrollToQuarter”的宏。

Set myBar = CommandBars _
    .Add(Name:="Custom", Position:=msoBarTop, _
    Temporary:=True)
myBar.Visible = True
Set newCombo = myBar.Controls _
    .Add(Type:=msoControlComboBox)
With newCombo
    .AddItem "Q1"
    .AddItem "Q2"
    .AddItem "Q3"
    .AddItem "Q4"
    .Style = msoComboNormal
    .OnAction = "ScrollToQuarter"
End With

在运行应用程序时,每次用户改变组合框控件时,都将调用分配给该控件的 OnAction 属性的过程。在该过程中,可用 CommandBars 对象的 ActionControl 属性找出被修改的控件,并返回改变的值。ListIndex 属性将返回组合框中所键入或选择的项。