精华内容
下载资源
问答
  • VBA自定义菜单和菜单栏

    千次阅读 2013-08-28 20:36:29
    本文着重介绍如何在 Excel 2003版本中通过编程方式自定义菜单和菜单栏方法。其中包含Excel 中管理自定义菜单栏、菜单、命令、子菜单快捷菜单,我将通过代码实例分步说明。 与大家分享关于VBA实现菜单栏

    EXCEL中,我们的操作都是通过工具栏、菜单栏、快捷菜单实现。EXCEL通过菜单给我们提供基本操作功能之外,也为我们提供了扩展自定义功能的接口,即自定义自己的工具栏、菜单栏。

    本文着重介绍如何在 Excel 2003版本中通过编程方式自定义菜单和菜单栏方法。其中包含Excel 中管理和自定义菜单栏、菜单、命令、子菜单和快捷菜单,我将通过代码实例分步说明。

    与大家分享关于VBA实现菜单栏管理与自定义菜单栏功能的实现。

    一、简介

    在 Microsoft Excel 2000以上版本中实现许与自定义菜单栏和菜单相关的常见任务,可以使用“自定义”对话框(见图1.1)。但如果要实现较高级任务或为自定义程序定制菜单栏和菜单,就需要创建 Microsoft Visual Basic for Applications (VBA) 代码。

    有关如何使用“自定义”对话框的更多信息,你可以单击“帮助”菜单上的“Microsoft Excel 帮助”,在“Office 助手”或“搜索向导”中键入自定义菜单栏,然后单击“搜索”查看主题。

    二、命令栏

    在 Microsoft Office 中,所有工具栏、菜单栏和快捷菜单都是被作为“命令栏”这样一种对象以编程方式控制的。下列所有项目在 VBA 中皆用 CommandBar 对象表示:

    l    菜单栏、工具栏和快捷菜单。

    l    菜单栏和工具栏上的菜单。

    l    菜单、子菜单和快捷菜单上的子菜单。

    您可以修改任何内置的菜单栏和工具栏,还可以创建和修改用您自己的 VBA 代码交付的自定义工具栏、菜单栏和快捷菜单。您可以将程序功能以单个按钮的形式放在工具栏上,或以命令名称组的形式放在菜单上。因为工具栏和菜单都是命令栏,所以可以使用同一类型的控件。

     VBA  Microsoft Visual Basic 中,按钮和菜单项用 CommandBarButton 对象表示。显示菜单和子菜单的弹出控件用 CommandBarPopup 对象表示。在以下示例中,名为“Menu”的控件和名为“Submenu”的控件都是用于显示菜单和子菜单的弹出控件,并且这两个控件是各自的控件集中唯一的 CommandBar 对象。

     Microsoft Excel 中,菜单栏和工具栏被视为是同一种可编程对象,即 CommandBar 对象。可以使用CommandBar 对象中的控件来指代菜单、菜单项、子菜单和快捷菜单。可以在 Type 参数中使用一个常量为每个控件指定要用于菜单、子菜单或命令的控件类型。

    三、控件常量

    下面是 Excel 2003 中的各种控件常量的列表,这些常量指定用于特定菜单栏控件的图形控件类型:

     MsoControlActiveX*

     MsoControlAutoCompleteCombo***

     MsoControlButton

     MsoControlButtonDropdown

     MsoControlButtonPopup

     MsoControlComboBox

     MsoControlCustom

     MsoControlDropdown

     MsoControlEdit

     MsoControlExpandingGrid

     MsoControlGauge

     MsoControlGenericDropdown

     MsoControlGraphicCombo

     MsoControlGraphicDropdown

     MsoControlGraphicPopup

     MsoControlGrid

     MsoControlLabel

     MsoControlLabelEx***

     MsoControlOCXDropDown

     MsoControlPane **

     MsoControlPopup

     MsoControlSpinner***

     MsoControlSplitButtonMRUPopup

     MsoControlSplitButtonPopup

     MsoControlSplitDropdown

     MsoControlSplitExpandingGrid

     MsoControlWorkPane**

    表示 Microsoft Excel 2000 中的新增项

    ** 表示 Microsoft Excel 2002 中的新增项

    *** 表示 Microsoft Office Excel 2003 中的新增项

     

    四、菜单栏

    菜单栏是一种命令栏。它是一种可在其中添加菜单、菜单项和子菜单的对象。

    有关如何在 Excel 中管理菜单栏和菜单项的更多信息,请按照下列步骤操作:

     

    1. 启动 Microsoft Visual Basic 编辑器。

    2. 在“帮助”菜单上,单击“Microsoft Visual Basic 帮助”。

    3. 在“Office 助手”框或“应答向导”框中,键入菜单栏,然后单击“搜索”。

    4.  Excel 2003  Excel 2002 中,单击“添加和管理菜单栏和菜单项”。在 Excel 2000 中,单击“关于菜单和工具栏”。

     

    可以在运行时修改菜单栏及该菜单栏上的控件。对菜单栏所做的更改可能会影响菜单栏的外观或位置。可对控件进行的更改取决于控件类型。下表列出了最常见的属性和常用于更改控件的状态、操作或内容的方法:

    属性或方法

    用途

    Add

    添加菜单栏,方法是使用 CommandBars 对象集合的 Add 方法,然后为 Menubar 参数指定 TRUE值。

    Enabled

    如果 Enabled 属性的值为 TRUE,那么用户可以使用 Visual Basic 代码使指定的菜单栏可见。如果Enabled 属性的值为 FALSE,用户就无法让菜单栏可见。不过,菜单栏将出现在可用命令栏列表中。

    Protection

    使您可以通过特定用户操作来保护菜单栏。

    Position

    指定新菜单栏相对于程序窗口的位置。菜单栏相对于程序窗口的位置可以是以下 MsoBarPosition 常量属性之一:msoBarLeftmsoBarTopmsoBarRightmsoBarBottommsoBarFloatingmsoBarPopup(用于创建快捷菜单)或 msoBarMenuBar(仅用于 Apple Macintosh)。

    Visible

    定控件是可见的指,还是隐藏的。

    4.1 Add方法应用于CommandBars对象

    新建一个命令栏并添加到命令栏集合。返回 CommandBar 对象。

    expression.Add ( Name , Position , MenuBar , Temporary )

    l        expression必需。该表达式返回一个 CommandBars 对象。

    l        NameVariant 类型)可选。新命令栏的名称。如果忽略该参数,则为命令栏指定默认名称(例如:Custom 1)。

    l       PositionVariant 类型)可选。新命令栏的位置或类型。可以为下表所列的 MsoBarPosition 常量之一。

    常量

    说明

    msoBarLeftmsoBarTopmsoBarRight msoBarBottom

    指定新命令栏的左侧、顶部、右侧和底部坐标

    msoBarFloating

    指定新命令栏不固定

    msoBarPopup

    指定新命令栏为快捷菜单

    msoBarMenuBar

    仅适用于 Macintosh 

     

    l         MenuBar  (Variant类型)可选。设置为 True 将以新命令栏替换活动菜单栏。默认值为 False

    l         Temporary  (Variant类型)可选。设置为 True 将使新命令栏为临时命令栏。临时命令栏在关闭容器应用程序时删除。默认值为 False

    4.2返回命令栏控件的 ID

    以下代码示例返回活动菜单栏的 ID

    Sub Id_Control ()

    Dim myId as Object

       Set myId = CommandBars("Worksheet Menu Bar").Controls("工具(&T)")

       MsgBox myId.Caption & Chr(13) & MyId.Id

    End Sub

    4.3确定活动菜单栏的名称

    以下代码示例返回活动菜单栏的名称:

    Sub MenuBars_GetName()

       MsgBox CommandBars.ActiveMenuBar.Name

    End Sub

    4.4保存(内置或自定义菜单栏的)活动状态

    您可能需要将 originalMenuBar 变量声明为公共变量,这样,子例程就可以在其他子例程(如 Auto_Close 子例程)中使用该变量。以这种方式声明和使用该变量会将用户的上一个菜单栏重置为初始状态。以下示例宏重置菜单栏:

    Public originalMenuBar as Object

    Sub MenuBars_Capture()

       Set originalMenuBar = CommandBars.ActiveMenuBar

    End Sub

    4.5创建自定义命令栏

    以下代码示例创建名为 My Command Bar 的自定义命令栏:

    Sub MenuBar_Create()

    Application.CommandBars.Add Name:="My command bar"

    End Sub

    您还可以通过使用 Temporary:=True 参数来创建自定义命令栏。Temporary:=True 参数允许命令栏在您退出Excel 时自动重置。以下代码使用 Temporary:=True 参数创建自定义命令栏:

    Sub MenuBar_Create()

    Application.CommandBars.Add Name:="My command bar", Temporary:=True

    End Sub

    4.6显示自定义命令栏

    以下示例创建并显示自定义的“My Custom Bar”菜单栏,然后用它替换内置的菜单栏:

    Sub MenuBar_Show()

    Dim myNewBar As Object

       Set myNewBar = CommandBars.Add(Name:="Custom1", Position:=msoBarFloating)

       '您必须先启用您的自定义菜单栏,然后看见它。

       '使菜单栏添加到自定义对话框列表中的可用菜单栏上。

    '设置菜单属性设置为True取代内置的菜单栏。

       myNewBar.Enabled = True

       myNewBar.Visible = True

    End Sub

    4.7删除自定义命令栏

    以下代码示例删除名为“Custom 1”的自定义菜单栏:

    Sub MenuBar_Delete()

       CommandBars("Custom1").Delete

    End Sub

    4.8隐藏命令栏

    以下代码示例从可用菜单栏列表中删除内置“图表”菜单栏:

    Sub MenuBar_Display()

       CommandBars("Chart").Enabled = False

    End Sub

    4.9显示命令栏

    以下代码示例从可用菜单栏中添加内置“图表”菜单栏:

    Sub MenuBar_Display()

       CommandBars("Chart").Enabled = True

    End Sub

    4.10还原内置命令栏

    还原菜单栏会重置(菜单和菜单项的)默认控件。示例代码还原内置“图表”菜单栏:

    Sub MenuBar_Restore()

       CommandBars("Chart").Reset

    End Sub

    注意:您只能重置内置菜单栏,不能重置自定义菜单栏。

     

     

    五、菜单

    5.1 Add方法用于CommandBarControls对象

    新建一个 CommandBarControl 对象并添加到指定命令栏上的控件集合。

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

    l         expression必需。该表达式返回一个 CommandBarControls 对象。

    l         TypeVariant类型)可选。添加到指定命令栏的控件类型。可以为下列 MsoControlType常量之一:

    常量

    说明

    msoControlButton

    命令按钮

    msoControlEdit

    文本框

    msoControlDropdown

    下拉列表

    msoControlComboBox

    组合框

    msoControlPopup

    弹出菜单

    l         Id Variant 类型)可选。指定内置控件的整数。如果该参数为,或者忽略该参数,将在命令栏中添加一个空的指定类型的自定义控件。

    l         Parameter Variant 类型)可选。对于内置控件,该参数用于容器应用程序运行命令。对于自定义控件,可以使用该参数向 Visual Basic 过程传递信息,或用其存储控件信息(类似于第二个 Tag 属性值)。

    l         BeforeVariant 类型)可选。表示新控件在命令栏上位置的数字。新控件将插入到该位置控件之前。如果忽略该参数,控件将添加到指定命令栏的末端。

    l         TemporaryVariant 类型)可选。设置为True 将使新命令栏为临时命令栏。临时命令栏在关闭容器应用程序时删除。默认值为 False

    5.2向命令栏添加自定义菜单控件

    以下代码示例将您通过编程方式添加的菜单名称添加到“工作表”菜单栏中。例如,此代码会将菜单名称“New Menu”添加到“工作表”菜单栏中。

    注意:您可以根据需要为该菜单指定任何名称。

    Sub Menu_Create()

    Dim myMnu As Object

       Set myMnu = CommandBars("Worksheet menu bar").Controls. _

          Add(Type:=msoControlPopup, before:=3)

       With myMnu

       ' "&" 用以指定快捷键字符 (相当于Alt+M).

          .Caption = "New &Menu"

       End With

    End Sub

    5.3禁用命令栏上的菜单控件

    禁用的菜单控件在命令栏中显示为灰色,并且不可用。以下示例禁用“New Menu”菜单:

    Sub Menu_Disable()

       CommandBars("Worksheet menu bar").Controls("New &Menu").Enabled = False

    End Sub

    5.4启用命令栏上的菜单控件

    以下代码示例启用您在“禁用命令栏上的菜单控件”一节中禁用的 New Menu 菜单:

    Sub Menu_Disable()

       CommandBars("Worksheet menu bar").Controls("New &Menu").Enabled = True

    End Sub

    5.5删除命令栏上的菜单控件

    以下代码示例从“工作表”菜单栏中删除您在“向命令栏添加自定义菜单控件”一节中创建的“New Menu”菜单:

    Sub Menu_Delete()

       CommandBars("Worksheet menu bar").Controls("New &Menu").Delete

    End Sub

    5.6还原命令栏上的菜单控件

    以下代码示例还原“工作表”菜单栏上的内置“图表”菜单栏:

    Sub Menu_Restore()

    Dim myMnu As Object

       Set myMnu = CommandBars("Chart")

       myMnu.Reset

    End Sub

     

    六、命令

    可以对命令进行的修改与控件的类型有关。一般来说,按钮要么被启用,要么被隐藏。而编辑框、下拉列表框和组合框较为灵活一些,因为您可以在列表中添加或删除项目。另外,还可以通过查看在列表中选中的项目的值来确定执行的操作。您可以将任何控件的操作更改为内置函数或自定义函数。

    下表列出了最常见的控件属性和更改控件的状态、操作或内容的方法:

    属性或方法

    用途

    Add

    向命令栏添加命令。

    AddItem

    向下拉列表框或组合框的下拉列表部分添加项目。

    Style

    指定按钮上是显示图标还是显示标题。

    OnAction

    指定用户更改控件值时所运行的过程。

    Visible

    指定控件是可见的,还是隐藏的。

    要了解有关 Excel 2003  Excel 2002 中菜单的更多信息,请按照下列步骤操作:

    1. 启动 Visual Basic 脚本编辑器。

    2. 在“帮助”菜单上,单击“Microsoft Visual Basic 帮助”。

    3. 在“搜索帮助”框中,键入菜单,然后按 Enter

    4. 单击“添加和管理菜单栏和菜单项 (Office)”。

    6.1向菜单控件添加分隔条

    以下代码示例在“插入”菜单上的工作表命令之前添加分隔条:

    Sub menuItem_AddSeparator()

       CommandBars("Worksheet menu bar").Controls("插入(&I)") _

       .Controls("工作表(&W)").BeginGroup = True

    End Sub

    注意:要删除分隔条,请将 BeginGroup 属性设置为 False

    6.2在菜单上创建自定义命令控件

    以下代码示例在“工作表”菜单栏的“工具”菜单上创建名为 Custom1 的新命令,然后,当您单击“Custom1”时,它将运行 Code_Custom1 宏:

    Sub menuItem_Create()

       With CommandBars("Worksheet menu bar").Controls("工具(&T)")

          .Controls.Add(Type:=msoControlButton, Before:=1).Caption = "Custom1"

          .Controls("Custom1").OnAction = "Code_Custom1"

       End With

    End Sub

    6.3在命令控件旁放置选中标记

    以下代码示例在 Custom1 命令未选中的情况下在其旁边放置一个选中标记;如果 Custom1 命令已选中,则将删除该选中标记:

    Sub menuItem_checkMark()

    Dim myPopup as Object

       Set myPopup = CommandBars("Worksheet menu bar").Controls("工具(&T)")

       If myPopup.Controls("Custom1").State = msoButtonDown Then

          ' 删除选中标记旁边的菜单项。

          myPopup.Controls("Custom1").State = msoButtonUp

          MsgBox "Custom1 is now unchecked"

          Else

            '添加复选标记旁边的菜单项。

             myPopup.Controls("Custom1").State = msoButtonDown

             MsgBox "Custom1 is now checked"

        End If

    End Sub

    6.4禁用命令栏上的命令控件

    以下代码示例禁用您在“在菜单上创建自定义命令控件”一节中在“工具”菜单上创建的 Custom1 命令:

    Sub MenuItem_Disable()

    Dim myCmd as Object

       Set myCmd = CommandBars("Worksheet menu bar").Controls("工具(&T)")

       myCmd.Controls("Custom1").Enabled = False

    End Sub

    6.5启用命令栏上的命令控件

    以下代码示例启用您在“禁用命令栏上的命令控件”一节中禁用的 Custom1 命令:

    Sub MenuItem_Enable()

    Dim myCmd as Object

       Set myCmd = CommandBars("Worksheet menu bar").Controls("工具(&T)")

       myCmd.Controls("Custom1").Enabled = True

    End Sub

    6.6删除菜单上的命令控件

    以下代码示例删除“文件”菜单上的“保存”命令:

    Sub menuItem_Delete()

    Dim myCmd As Object

       Set myCmd = CommandBars("Worksheet menu bar").Controls("文件(&F)")

       myCmd.Controls("保存(&S)").Delete

    End Sub

    6.7还原菜单上的内置命令控件

    要还原菜单上的命令控件,必须知道该控件的标识 (ID) 号。要确定 ID 号,请参见“返回命令栏控件的ID”一节。以下示例先删除您在“删除菜单上的命令控件”一节中删除的“保存”命令,然后又将其还原:

    Sub menuItem_Restore()

    Dim myCmd As Object

       Set myCmd = CommandBars("Worksheet menu bar").Controls("文件(&F)")

       ' Id 3 为保存子菜单项ID.

       myCmd.Controls.Add Type:=msoControlButton, ID:=3, Before:=5

    End Sub

     

    七、子菜单

    当您单击某个命令时,父菜单的一侧会出现子菜单。作为子菜单控件的命令在其名称右边有一个黑色小箭头。

    7.1添加子菜单

    以下代码示例向“工作表”菜单栏上的“工具”菜单添加名为“NewSub”的新子菜单:

    Sub SubMenu_Create()

    Dim newSub as Object

       Set newSub = CommandBars("Worksheet menu bar").Controls("工具(&T)")

       With newSub

          .Controls.Add(Type:=msoControlPopup, Before:=1).Caption="NewSub"

       End With

    End Sub

    7.2向子菜单添加命令

    以下代码示例向“NewSub”子菜单添加名为“SubItem1”的新命令,然后,当您单击“SubItem1”时,它将运行 Code_SubItem1 宏:

    Sub SubMenu_AddItem()

    Dim newSubItem as Object

       Set newSubItem = CommandBars("Worksheet menu bar") _

       .Controls("工具(&T)").Controls("NewSub")

       With newSubItem

          .Controls.Add(Type:=msoControlButton, Before:=1).Caption = "SubItem1"

          .Controls("SubItem1").OnAction = "Code_SubItem1"

       End With

    End Sub

    7.3禁用子菜单上的命令控件

    以下代码示例禁用您在“向子菜单添加命令”一节中创建的 SubItem 命令:

    Sub SubMenu_DisableItem()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Controls("SubItem1").Enabled = False

    End Sub

     

    以下代码示例启用同一 SubItem 命令:

    Sub SubMenu_DisableItem()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Controls("SubItem1").Enabled = True

    End Sub

    7.4删除子菜单上的命令

    以下示例删除您在“向子菜单添加命令”一节中在“NewSub”子菜单上创建的 SubItem1 命令:

    Sub SubMenu_DeleteItem()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Controls("SubItem1").Delete

    End Sub

    7.5禁用子菜单控件

    以下代码示例禁用您在“添加子菜单”一节中在“工具”菜单上创建的“NewSub”子菜单:

    Sub SubMenu_DisableSub()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Enabled = False

    End Sub

    注意:要启用已禁用的控件,请将 Enabled 属性设置为 True

    7.6删除子菜单控件

    以下代码示例删除您在“添加子菜单”一节中在“工具”菜单上创建的“NewSub”子菜单:

    Sub SubMenu_DeleteSub()

       CommandBars("Worksheet menu bar").Controls("工具(&T)") _

       .Controls("NewSub").Delete

    End Sub

     

    八、快捷菜单栏

    快捷菜单是在用户右键单击某个对象时出现的浮动命令栏。快捷菜单栏可以包含与命令栏相同的控件类型,而这些控件的作用也和命令栏上控件的作用相同。在大多数程序中,您无法从程序界面创建或修改快捷菜单,因而必须在运行时创建和修改快捷菜单。

    要获取有关Excel 2002Excel 2003中的快捷菜单的更多信息,请按照下列步骤操作:

    1. 启动 Visual Basic 脚本编辑器。

    2. 在“帮助”菜单上,单击“Microsoft Visual Basic 帮助”。

    3. 在“搜索帮助”框中,键入快捷方式,然后按 Enter

    4. 单击“添加和显示快捷菜单”。

    8.1新建快捷菜单栏

    以下代码示例创建名为“myShortcutBar”的快捷菜单栏:

    Sub Shortcut_Create()

    Dim myShtCtBar as Object

       Set myShtCtBar = CommandBars.Add(Name:="myShortcutBar", _

       Position:=msoBarPopup)

       这显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标.

       myShtCtBar.ShowPopup 200,200

    End Sub

    注意:由于没有添加任何控件(菜单项或子菜单),因此快捷菜单栏出现时是空的。

    九、快捷菜单

    当您右键单击特定的 Excel 对象时会出现快捷菜单栏。Excel 有很多快捷菜单栏,其中包含各种菜单。您还可以创建自定义快捷菜单栏和自定义内置菜单栏。

    9.1在快捷菜单栏上创建命令

    以下代码示例在“myShortcutBar”快捷菜单栏上创建名为 Item1 的新菜单命令。当您单击“Item1”时,它将运行 Code_Item1 宏:

    Sub Shortcut_AddItem()

    Dim myBar as Object

       Set myBar = CommandBars("myShortcutBar")

       With myBar

          .Controls.Add (Type:=msoControlButton, before:=1).Caption = "Item1"

          .Controls("Item1").OnAction = "Code_Item1"

       End With

       myBar.ShowPopup 200,200

    End Sub

    9.2禁用快捷菜单栏上的命令控件

    以下代码示例禁用您在“创建快捷菜单上的命令”一节中创建的 Item1 命令:

    Sub Shortcut_DisableItem()

       Set myBar = CommandBars("myShortcutBar")

       myBar.Controls("Item1").Enabled = False

       myBar.ShowPopup 200,200

    End Sub

    注意:要启用已禁用的项目,请将 Enabled 属性设置为 True

    9.3删除快捷菜单栏上的命令

    以下代码示例删除“myShortcutBar”快捷菜单栏上的名为 Item1 的菜单命令:

    Sub Shortcut_DeleteItem()

       Set myBar = CommandBars("myShortcutBar")

       myBar.Controls("Item1").Delete

       myBar.ShowPopup 200,200

    End Sub

    9.4删除快捷菜单栏

    删除快捷菜单栏将导致删除所有菜单项。您无法还原已删除的自定义菜单栏。要还原它,必须重新创建该菜单栏及其所有菜单项和子菜单。

    以下代码示例删除您在“在快捷菜单栏上创建命令”一节中创建的“myShortCutBar”快捷菜单栏:

    Sub Shortcut_DeleteShortCutBar()

       CommandBars("MyShortCutBar").Delete

    End Sub

    9.5还原内置快捷菜单栏上的命令

    以下代码示例还原工作表“单元格”快捷菜单栏上的默认命令:

    Sub Shortcut_RestoreItem()

       CommandBars("Cell").Reset

    End Sub

     

    十、快捷菜单上的子菜单

    可以在快捷菜单栏上创建子菜单。当您单击某个命令控件时,父菜单的一侧会出现子菜单。作为子菜单控件的命令在其名称右边有一个黑色小箭头。

    10.1在快捷菜单栏上新建子菜单

    以下示例在工作表“单元格”快捷菜单上添加名为“NewSub”的新子菜单:

    Sub ShortcutSub_Create()

       CommandBars("Cell").Controls.Add(Type:=msoControlPopup, before:=1) _

       .Caption = "NewSub"

        '显示快捷菜单栏。

        ' 200, 200指的是屏幕上的位置的像素为XY坐标。

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    注意:由于没有添加任何菜单项,因此该子菜单为空。

    10.2在快捷菜单栏的子菜单上创建命令控件

    下面的宏向您在“单元格”快捷菜单上创建的子菜单“NewSub”中添加 SubItem1 命令。然后,当您单击“SubItem1”时,它将运行 Code_SubItem1 宏:

    Sub ShortcutSub_AddItem()

    Dim newSubItem as Object

       Set newSubItem = CommandBars("Cell").Controls("NewSub”)

       With newSubItem

          .Controls.Add(Type:=msoControlButton, before:=1).Caption = "subItem1"

          '点击时subItem1 将运行Code_SubItem1宏。

          .Controls("subItem1").OnAction = "Code_SubItem1"

       End With

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

     

    10.3禁用快捷菜单上的子菜单项控件

    以下代码示例禁用“NewSub”子菜单上的 SubItem1 命令:

    Sub ShortcutSub_DisableItem()

       CommandBars("Cell").Controls("NewSub") _

       .Controls("subItem1").Enabled = False

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    注意:要启用已禁用的项目,请将 Enabled 属性设置为 True

    10.4删除快捷菜单上的子菜单项控件

    以下示例删除“NewSub”子菜单上的 SubItem1 命令:

    Sub ShortcutSub_DeleteItem()

       CommandBars("Cell").Controls("NewSub").Controls("subItem1").Delete

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    10.5禁用快捷菜单上的子菜单控件

    以下代码示例禁用“单元格”快捷菜单栏上的“NewSub”子菜单:

    Sub ShortcutSub_DisableSub()

       CommandBars("Cell").Controls("NewSub").Enabled = False

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    注意:要启用已禁用的项目,请将 Enabled 属性设置为 True

    10.6删除快捷菜单上的子菜单控件

    以下代码示例删除您在“单元格”快捷菜单栏上创建的“NewSub”子菜单:

    Sub ShortcutSub_DeleteSub()

       CommandBars("Cell").Controls("NewSub").Delete

       '显示快捷菜单栏。

       ' 200, 200指的是屏幕上的位置的像素为XY坐标

       CommandBars("Cell").ShowPopup 200, 200

    End Sub

    展开全文
  • 创建调用宏的自定义菜单 列中的空白单元格到向下填充值 HTML 文件中创建的目录等
  • vba自定义菜单和菜单栏Annoyedthat Windows 10 gives you only one setting to change the color of thetaskbar, Start menu, and Action Center all at once? There’s no way to change each color individually, ...
    vba自定义菜单和菜单栏

    vba自定义菜单和菜单栏

    sab_top

    Annoyed that Windows 10 gives you only one setting to change the color of the taskbar, Start menu, and Action Center all at once? There’s no way to change each color individually, but we’ve got a quick Registry hack that will get you part of the way there.

    Windows 10仅提供一种设置来一次更改任务栏,“开始”菜单和“操作中心”的颜色,这让您感到烦恼吗? 没有办法单独更改每种颜色,但是我们有一个快速的Registry hack,可以帮助您融入其中。

    For whatever reason, the Windows 10 Personalization options provide a single option to use an accent color on your taskbar, Start menu, and Action Center all at once instead of letting you choose a color for each. You can apply the color to the title bar of active windows as a separate option and, with another quick Registry hack, even change the color of inactive windows if you want to. But if you’d like keep a black background on your Start menu and Action Center while still using your accent color for your taskbar and window title bars, then read on.

    无论出于何种原因, Windows 10个性化选项都提供了一个选项,可以一次在任务栏,“开始”菜单和“操作中心”上使用强调色,而不必为每种颜色选择一种颜色。 您可以将颜色作为单独的选项应用到活动窗口的标题栏,并且可以通过另一种快速的注册表技巧,甚至根据需要更改非活动窗口的颜色 。 但是,如果您想在“开始”菜单和“操作中心”上保留黑色背景,同时仍将重点色用于任务栏和窗口标题栏,请继续阅读。

    通过编辑注册表使“开始”菜单和操作中心背景保持黑色 (Keep the Start Menu and Action Center Backgrounds Black by Editing the Registry)

    To keep your Start Menu and Action Center backgrounds black, you just need to make an adjustment to one setting in the Windows Registry. Before you get started with the edit, though, go ahead and set your personalization options. Head to Settings > Personalization > Colors. Pick an accent color and turn on at least the “Show color on Start, taskbar, and action center” option.

    要使“开始菜单”和“操作中心”背景保持黑色,您只需要对Windows注册表中的一项设置进行调整。 不过,在开始编辑之前,请继续并设置个性化选项。 转到设置>个性化>颜色。 选择一种强调色,并至少打开“在“开始”,任务栏和操作中心上显示颜色”选项。

    sab_a

    With that done, you’re ready to head into the Registry.

    完成此操作后,您就可以进入注册表了。

    Standard warning: Registry Editor is a powerful tool and misusing it can render your system unstable or even inoperable. This is a pretty simple hack and as long as you stick to the instructions, you shouldn’t have any problems. That said, if you’ve never worked with it before, consider reading about how to use the Registry Editor before you get started. And definitely back up the Registry (and your computer!) before making changes.

    标准警告:注册表编辑器是一个功能强大的工具,滥用它会使您的系统不稳定甚至无法运行。 这是一个非常简单的技巧,只要您按照说明进行操作,就不会有任何问题。 也就是说,如果您以前从未使用过它,请在开始之前考虑阅读有关如何使用注册表编辑器的信息 。 并在进行更改之前一定要备份注册表 (和您的计算机 !)。

    Open the Registry Editor by hitting Start and typing “regedit.” Press Enter to open Registry Editor and give it permission to make changes to your PC.

    通过单击开始并键入“ regedit”来打开注册表编辑器。 按Enter键打开注册表编辑器,并授予其对PC进行更改的权限。

    sab_1

    In the Registry Editor, use the left sidebar to navigate to the following key:

    在注册表编辑器中,使用左侧边栏导航至以下键:

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize
    
    sab_2

    On the right side, double-click the ColorPrevalence value to open its properties window.

    在右侧,双击ColorPrevalence值以打开其属性窗口。

    sab_3

    In the value’s properties window, change the value to 3 in the “Value data” box and then click “OK.”

    在值的属性窗口中,在“值数据”框中将值更改为3,然后单击“确定”。

    sab_4

    And you can now close Registry Editor. You won’t need to restart your computer or anything. The changes should be immediate, so just pop open your Start menu or Action Center to make sure the backgrounds are black.

    现在,您可以关闭注册表编辑器。 您无需重新启动计算机或任何其他操作。 更改应该是立即的,因此只需弹出打开“开始”菜单或“操作中心”以确保背景为黑色即可。

    You’ll want to be careful about changing Personalization options after you make this setting. You won’t break anything, but you may reset that Registry value and have to change it again. It works like this:

    进行此设置后,您在更改“个性化”选项时要格外小心。 您不会破坏任何内容,但是可以重置该注册表值,然后再次进行更改。 它是这样的:

    • You can change your accent color any time you want. Doing so will not affect the Registry setting.

      您可以随时更改您的装饰色。 这样做不会影响注册表设置。
    • You can turn on or off the “Show color on title bar” setting without affecting the Registry setting.

      您可以打开或关闭“在标题栏上显示颜色”设置,而不会影响注册表设置。
    • If you turn off the “Show color on Start, taskbar, and action center” setting, the ColorPrevalence value will get set to 0 and all three items will be black. If you turn the option back on, the ColorPrevalence value gets set to 1 and all three items will feature your accent color. You’ll have to go back and set the value to 3 in the Registry again to get the black backgrounds back on your Start menu and Action Center.

      如果关闭“在“开始”,任务栏和操作中心上显示颜色”设置,则ColorPrevalence值将设置为0,并且所有三个项目均为黑色。 如果重新打开该选项,则ColorPrevalence值将设置为1,并且所有三个项目都将具有您的强调色。 您必须返回并再次在注册表中将该值设置为3,才能在“开始”菜单和“操作中心”上重新获得黑色背景。

    Of course, this also means that if you don’t like the setting you’ve made in the Registry, you don’t have to return to the Registry to reset it. You only have to go change that option in your Personalization settings.

    当然,这也意味着,如果您不喜欢在注册表中进行的设置,则不必返回注册表即可将其重置。 您只需要在“个性化设置”中更改该选项。

    下载我们的一键式注册表黑客 (Download Our One-Click Registry Hacks)

    sab_5

    If you don’t feel like diving into the Registry yourself, we’ve created a couple of registry hacks you can use. The “Make Start and Action Center Black” hack changes the ColorPrevalence value to 3. The “Restore Start and Action Center Backgrounds” hack sets the value back to 1. Both hacks are included in the following ZIP file. Double-click the one you want to use and click through the prompts. When you’ve applied the hack you want, restart your computer or toggle one of the color settings to force the change.

    如果您不想自己进入注册表,我们已经创建了两个可以使用的注册表黑客。 “使启动和操作中心为黑色” hack将ColorPrevalence值更改为3。“恢复启动和操作中心背景”为hack的值设置为1。这两个hack都包含在以下ZIP文件中。 双击您要使用的一个,然后单击提示。 应用所需的技巧后,请重新启动计算机或切换颜色设置之一以强制进行更改。

    Start and Action Center Background Hacks

    启动和操作中心背景黑客

    These hacks are really just the Personalize  subkey, stripped down to the ColorPrevalence value we talked about in the previous section and then exported to a .REG file. Running either of the hacks sets that value to the appropriate number.  And if you enjoy fiddling with the Registry, it’s worth taking the time to learn how to make your own Registry hacks.

    这些技巧实际上只是Personalize子项,被简化为上一节中讨论的ColorPrevalence值,然后导出到.REG文件。 运行任何一个hack都会将该值设置为适当的数字。 而且,如果您喜欢使用注册表,则值得花时间学习如何制作自己的注册表黑客

    翻译自: https://www.howtogeek.com/270777/how-to-keep-windows-10s-start-menu-and-action-center-black-while-using-a-custom-accent-color/

    vba自定义菜单和菜单栏

    展开全文
  • access 中菜单的生成删除 分享出来的一个案例,希望大家可以学会
  • VBA 提取菜单和工具id号, 方便编程,也有利于程序调用office 软件
  • VBA窗体中制作菜单

    2013-03-12 15:38:27
    office 办公实用实例 - 在excel VBA窗体中制作菜单.
  • 函数作用:删除单元格自定义名称.....................88 '76.函数作用:从文件路径中取得文件名...................89 '77.函数作用:取得一个文件的扩展名.....................89 '78.函数作用:取得一个文件的路径.....
  • VBA新建工具,制作自己的Excel,是excel中回用到的一个常用函数,学习他很有用哦,希望大家能学会,谢谢大家的支持
  • EXCEL VBA自定义菜单

    2009-05-05 17:37:00
    怎么自定义一个按钮?首先要确保要更改的工具是可见的,再单击“工具选项”箭头指向“添加或删除按钮”或用右击...自定义按钮是差不多的,只是最后一步的操作是将“自定义菜单项”拖拉到你需要的工具的位置...
    怎么自定义一个按钮?首先要确保要更改的工具栏是可见的,再单击“工具栏选项”箭头指向“添加或删除按钮”或用右击单击工具栏,再单击“自定义”,单击“ 命令”选项卡,在类别中选择“宏”,将“自定义按钮”拖拉到你需要的工具栏的位置即可。而有多项的话,我们还可以自定义一个菜单项来包含这一些按钮。
    怎么自定义一个菜单项?和自定义按钮是差不多的,只是最后一步的操作是将“自定义菜单项”拖拉到你需要的工具栏的位置即可。
    怎么将按钮与宏关联?刚刚建立好的按钮,在第一次单击它是,会弹出一个菜单,让你选择与其相关联的宏,这时选择要关联的宏的名称即可。但我们可以这样操作,右击工具栏后选择“自定义”,选择需要关联宏的按钮,然后在“更改所选内容”中的指定宏中指定或修改!
    如何更改这个自定义按钮的外观?在刚才说的“更改所选内容”项里,还可以更改这个按钮的名称,图标,样式,只要在此做相应的修改即可,要说明的一点是,在名称中用&后面跟着英文的话,就变成相对应的键盘按键,修改后我们看到的是这个英文下面加一条划线来表示!
    如何删除自定义的菜单?还按照上面的操作,将要删除的菜单拖拉到工具栏外,或选择它,再点击“更改所选内容”里的删除即可。
    上 面说了手工怎么样建立的删除自己的菜单,而怎么让加载宏自己建一个菜单,并在关闭时将其删除呢?前贴说过,可以在AddinInstall 事件与AddinUnInstall 事件或者Workbook_open事情和Workbook_BeforeClose事件中,加入代码,来让加载宏打开与关闭时运行这些代码,还有一个方 法就是在模块中定义auto_open(打开时运行)与auto_close(关闭时运行)这两个过程来实现,下面给出一个例子:
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Dim AName, MName(2, 1), DelMenu(2) As Boolean
    Sub auto_open()
    Dim MyMenu As CommandBarPopup
    Dim MyBtn As CommandBarButton
    Dim i As Byte
    Dim XT As String
    On Error Resume Next
    AName = "自定义(&Z)" '菜单名称
    MName(0, 0) = "百度Excel吧(&A)" '菜单项名称
    MName(0, 1) = "BaiDuExcelBa" '指定宏名称
    MName(1, 0) = "Excel吧主页(&B)" '菜单项名称
    MName(1, 1) = "ExcelBaZy" '指定宏名称
    MName(2, 0) = "Excel各页名(&C)" '菜单项名称
    MName(2, 1) = "Excel各页名" '指定宏名称
    Set MyMenu = CommandBars("Worksheet Menu Bar").Controls(AName)
    If MyMenu Is Nothing Then
     Set MyMenu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
     MyMenu.Caption = AName
    End If
    For i = 0 To UBound(MName)
     Set MyBtn = MyMenu.CommandBar.Controls(MName(i, 0))
     If MyBtn Is Nothing Then
     DelMenu(i) = True
     Set MyBtn = MyMenu.CommandBar.Controls.Add(Type:=msoControlButton)
     With MyBtn
     .Style = msoButtonIconAndCaption
     .FaceId = 79 + MyBtn.Index
     .Caption = MName(i, 0)
     .OnAction = MName(i, 1)
     End With
     Else
     DelMenu(i) = False
     XT = XT & vbCrLf & MName(i, 0)
     End If
     Set MyBtn = Nothing
    Next
    展开全文
  • 在ThisWorkBook对象中,添加Workbook_Open事件,调用启动菜单过程。 Private Sub Workbook_Open() Call MenuSetup(True) End Sub '----------------------------------------------- '在Excel
    将以下代码保存到.xlam或.xla(Excel97-2003)文件。
    
    在ThisWorkBook对象中,添加Workbook_Open事件,调用启动菜单过程。
    Private Sub Workbook_Open()
        Call MenuSetup(True)
    End Sub
    
    '-----------------------------------------------
    '在Excel中添加菜单和菜单项按钮(Excel启动时候添加)
    '-----------------------------------------------
    Public Function MenuSetup(blSetUp As Boolean)
        Dim myMenu As CommandBarPopup
        Dim mycontrol As CommandBarControl
        Dim i As Integer
        Dim sMenuItemName As String     '菜单项的名称
        Dim sMenuItemFunc As String     '菜单项的调用的函数名称
        Dim strM As String              '菜单名称
        Dim strMenuItem() As String     '菜单项名称
     
        On Error Resume Next
        
        '初始化菜单项
        ReDim strMenuItem(3, 2)    'VBA数组下界从1开始
        '菜单项1
        strMenuItem(1, 1) = "菜单项1"
        strMenuItem(1, 2) = "菜单1运行的过程名"
        '菜单项2
        strMenuItem(2, 1) = "菜单项2"
        strMenuItem(2, 2) = "菜单2运行的过程名"
        
        Application.ScreenUpdating = False
        
        '---添加菜单1
        strM = "EBS配套工具"
        Set myMenu = Application.CommandBars(1).Controls(strM)       '判断我的菜单是
    
    否存在?
        If Err Then
            Err.Clear
            Set myMenu = Application.CommandBars(1).Controls.Add
    
    (Type:=msoControlPopup, temporary:=True)
            myMenu.Caption = strM
        End If
        
        If blSetUp Then
                '---添加菜单项目1
                For i = 1 To UBound(strMenuItem)      '数组第一维的大小
                    sMenuItemName = strMenuItem(i, 1)
                    sMenuItemFunc = strMenuItem(i, 2)
                    
                    Set mycontrol = myMenu.Controls(sMenuItemName)   '判断子程序是否
    
    存在
                    If Err Then
                        Err.Clear
                        Set mycontrol = myMenu.Controls.Add(Type:=msoControlButton, 
    
    temporary:=True) '在菜栏最后位置增加一个按钮
                        With mycontrol
                            .Caption = sMenuItemName                    '菜单项显示名
    
    称
                            .OnAction = sMenuItemFunc                   '左键单击该菜
    
    单项按钮便运行的过程
                            .Style = msoButtonCaption                   '只显示文字
                        End With
                    End If
                Next
        Else
            Application.CommandBars(1).Controls(strT).Delete
           
        End If
        
        Application.ScreenUpdating = True
        If Err Then Err.Clear
    End Function
    
    Public Sub start_App()
     frmSetFileSheet.Show 0
    End Sub

    展开全文
  • 虽然从excel 2007开始 微软引进了ribbon 功能区来代替excel 常规菜单栏,但是像上图所示的鼠标右键快捷菜单还有很多没有被替代。 vba 中提供了给菜单增加自定义命令的功能。可以用CommandBar对象获取指定的菜单命令...
  • 本例是使用DELPHI来实现VBA技术,功能包括在WORD中添加菜单及宏,然后实现套红头及清稿功能: unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics,...
  • 在加载项增加菜单,便于进行操作
  • Excel将写好的VBA嵌入菜单栏

    千次阅读 2018-11-14 16:11:49
    VBA嵌入菜单栏
  • False) End Sub ''' ''' 添加菜单项所要执行的宏 ''' ''' CUI文件 ''' 宏的显示名称 ''' 宏的具体命令 ''' 宏的标识符 ''' 宏的状态提示信息 ''' 宏的图标 ''' 返回创建的宏 Function AddMacro(ByVal source As ...
  • VBA】向Excel中添加菜单

    千次阅读 2019-05-18 17:49:55
    以下代码用于向Excel菜单栏中添加菜单。是临时菜单,不是永久菜单。 使用目的: 将后台代码实现的功能以菜单的形式显示出来,供用户使用。 使用方法: 直接调用过程名即可,也可在Workbooks_Open中调用可实现打开...
  • Sub delMbar() Dim mxlb As String mxlb = Environ("appdata") & "\microsoft\excel\*.xlb" If Dir(mxlb) <> "" Then Kill mxlb End If End Sub
  • 较为详细的讲解了在Excel中用VBA制作自定义工具栏和菜单栏的过程.
  • 86.获取菜单ID编号及名称列表 87.状态列动态显示文字 88.取得一个文件的路径2 89.取得一个文件的路径3 90.取得Activecell的名 91.取得单元格中指定字符前的字符 92.前单元格指定字符前的字符颜色改成红色 93.根据...
  • VBA自定义工具按钮制作方法

    千次阅读 2011-04-02 10:26:27
    在 Excel 中点击菜单 “工具” → “自定义” ,在弹出的对话框中选择 “命令”,在左边的“类别”框中选择“宏”,在右边的“命令”框中左键拖动“自定义按钮”到任意一个工具上(自己觉得方便的位置上即可),...
  • 本文假定您熟悉所演示的编程语言用于创建调试过程的工具。Microsoft 的支持工程师可以帮助解释某个特定过程的功能,但是他们不会修改这些示例以提供额外的功能或构建过程以满足您的特殊需求。回到顶端本文中的...
  • Office由于提供了VBA,为大家开发一些定制功能提供了一种途径。但是如何实现工具中的命令与宏进行绑定,对于初学则来说是一个不小的门槛。  今天,给大家介绍一下在Excel里写完宏后,如何通过宏自动生成工具。 ...
  • AutoCAD VBA添加菜单

    2019-05-31 21:53:00
    # 给cad添加自定义菜单 1 Private Sub AddBar() 2 Dim NewMenuItem As AcadPopupMenuItem 3 Dim TheMacro As String 4 Dim MI As Integer 5 6 On Error Resume Next 7 Dim ...
  • vba屏蔽Excel中的菜单功能

    千次阅读 2018-10-06 22:17:09
    1、屏蔽“菜单”中的项: Application.CommandBars(1).Controls("文件(&amp;F)").Enabled = False '屏蔽文件菜单 Application.CommandBars(1).Controls("编辑(&amp;E)").Enabled = ...
  • Excel VBA创建自己的工具栏和菜单

    千次阅读 2009-10-05 13:26:00
    Option ExplicitmsoBarTop工具的PositionType为msoControlPopup(As CommandBarPopup)的菜单下可以带子菜单,但是msoControlPopup不支持图标Type为msoControlButton(As CommandBarButton)的菜单是msoControlPopup的...
  • Excel通过宏生成自定义菜单和按钮

    千次阅读 2012-04-06 10:19:44
    Sub CreateToolbar(ByVal b As Boolean) If Not b Then End Dim myButton As Variant ... "Please check the VBA code!" MsgBox sMessage, vbCritical, "iFE-VICTALL, Knorr-Bremse" End End Sub
  • EXCEL自定义菜单,做插件必备。

    千次阅读 2017-10-16 10:28:46
    最近在公司用到EXCEL需要导入用友U8的数据。所以就想着把这功能做成EXCEL的插件形式。...excel自定义菜单选项有两种方法: 1、借用OfficeCustomUIEditor 工具的 参考:http://www.exceltip.net/thread-4190-1
  • 很少由数据库设计器为自己自己构建数据库。 它通常是根据客户的要求构建的。 很多时候,数据库将有多个用户,这些不同的用户可能(也可能不会)在数据库中执行不同的功能。 MS Access使用可以加密数据库(前端/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,723
精华内容 689
关键字:

vba自定义菜单和菜单栏