VBA自定义菜单和菜单栏

Excel VBA 专栏收录该内容
63 篇文章 1 订阅

 

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 代码交付的自定义工具栏、菜单栏和快捷菜单。您可以将程序功能以单个按钮的形式放在工具栏上,或以命令名称组的形式放在菜单上。因为工具栏和菜单都是命令栏,所以可以使用同一类型的控件。

VBAMicrosoft 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 2003Excel 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 常量之一。

常量

说明

msoBarLeftmsoBarTopmsoBarRightmsoBarBottom

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

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 IdVariant 类型)可选。指定内置控件的整数。如果该参数为1 ,或者忽略该参数,将在命令栏中添加一个空的指定类型的自定义控件。

l ParameterVariant 类型)可选。对于内置控件,该参数用于容器应用程序运行命令。对于自定义控件,可以使用该参数向 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 2003Excel 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

  • 5
    点赞
  • 0
    评论
  • 16
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

自动生成VBA窗体菜单 '*************************** '* 菜单类 * '*************************** Option Explicit Private WithEvents MenuBar_MenuItem As MSForms.Label '菜单项 Private WithEvents WorkForm As MSForms.UserForm '工作窗口 Private WithEvents MenuBar As MSForms.Image '菜单栏 Private BackMenu_BackGroud As MSForms.Image '菜单背景图片 Private BackMenu_Caption As MSForms.Label '菜单标题标签 Private Const DISTANCE As Integer = 5 '菜单与左边框距离 Private Const MENUTOP As Integer = 2 '菜单项顶点Y轴位置 Private Const MENUHEIGHT As Integer = 14 '菜单项高度 Private intIndex As Integer '索引变量 Private sAction As String '宏名称变量 Private Property Let Index(N As Byte) '指定索引属性 intIndex = N End Property Private Property Get Index() As Byte '获得陇望蜀索引属性 Index = intIndex End Property Private Property Let OnAction(sAct As String) '行为属性 sAction = sAct End Property Private Property Get OnAction() As String OnAction = sAction End Property Public Sub AddMenu(wform As MSForms.UserForm, sCaption As String, sAction As String, Optional Acc As String = vbNullString) Dim MenuLeft As Single, MenuWidth As Single '由两个标签一个图形控件组成一个主菜单项 MenuCount = MenuCount + 1 '主菜单项总数加1 Index = MenuCount '设置索引 Set WorkForm = wform With WorkForm Set MenuBar = .FormMenuBar Set BackMenu_Caption = .Controls.Add("forms.label.1") '添加一个标签,显示菜单标题 With BackMenu_Caption .Accelerator = Acc .AutoSize = True .BackStyle = fmBackStyleTransparent .Caption = sCaption .Font = "宋体" .Font.Size = 9 .Name = "BackMenu_Caption" & MenuCount .TextAlign = fmTextAlignCenter .Top = MENUTOP + 3 .WordWrap = False .Visible = True End With If MenuCount = 1 Then MenuLeft = DISTANCE Else With .Controls("BackMenu_Caption" & MenuCount - 1) MenuLeft = .Left + .Width End With End If MenuWidth = BackMenu_Caption.Width + 10
目录 '1.函数作用:返回 Column 英文字........................9 '2.函数作用:查询某一值第num次出现的值................9 '3.函数作用:返回当个人工资薪金所得为2000元(起征点为850元)时的应纳个人所得税税额.............................10 '4.函数作用:从形如"123545ABCDE"的字符串中取出数字....11 '5.函数作用:从形如"ABCD12455EDF"的字符串中取出数字...11 '6.函数作用:按SplitType取得RangeName串值中的起始位置12 '7.函数作用:将金额数字转成中文大写....................13 '8.函数作用:计算某种税金..............................18 '9.函数作用:人民币大、小写转换........................19 '10.函数作用:查汉字区位码.............................20 '11.函数作用:把公元年转为农历.........................21 '12.函数作用:返回指定列数的列标.......................42 '13.函数作用:用指定字符替换某字符.....................43 '14.函数作用:从右边开始查找指定字符在字符串中的位置...43 '15.函数作用:从右边开始查找指定字符在字符串中的位置...44 '16.函数作用:计算工龄.................................44 '17.函数作用:计算日期差,除去星期六、星期日...........45 '18.函数作用:将英文字反转的自定函数...................46 '19.函数作用:计算个人所得税...........................46 '20.函数作用:一个能计算是否有重复单元的函数...........47 '21.数字金额转中文大写................................48 '22.函数作用:将数字转成英文...........................49 '23.函数作用:人民币大小写转换.........................52 '24.函数作用:获取区域颜色值...........................53 '25.函数作用:获取活动工作表名.........................53 '26.函数作用:获取最后一行行数.........................54 '27.函数作用:判断是否连接在线.........................54 '28.函数作用:币种转换.................................54 '29.函数作用:检验工作表是否有可打印内容...............55 '30.函数作用:查找一字符串(withinstr)在另一字符串中(findstr1)中某一次(startnum)出现时的位置,返回零表示没找到。..................................................57 '31.函数作用:增加文件路径最后的“\”符号..............58 '32.函数作用:计算所得税...............................58 '33.函数作用:从工作表第一行的标题文字以数字形式返回所在列号..................................................58 '34.函数作用:在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求..........................59 '35.函数作用:返回 Column 英文字.......................60 '36.函数作用:查找指定列名的列数.......................60 '37.函数作用:文字格式的时间(分:秒)转化为数字格式(秒)..61 '38.函数作用:将"hh:mm:ss"格式的时分秒数转换成秒数.....62 '39.函数作用:金额中文大写转数字.......................62 '40.函数作用:把角度转为度秒分、弧度等显示.............63 '41.函数作用:身份证号码侦测...........................64 '42.函数作用:显示公式............................
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值