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

  • 1
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动生成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 Set BackMenu_BackGroud = .Controls.Add("forms.image.1") '添加一个image,作为背景图片 With BackMenu_BackGroud .Name = "BackMenu_BackGroud" & MenuCount .BorderStyle = fmBorderStyleNone .Move MenuLeft, MENUTOP, MenuWidth, MENUHEIGHT .BackStyle = fmBackStyleTransparent .PictureSizeMode = fmPictureSizeModeStretch BackMenu_Caption.AutoSize = False BackMenu_Caption.Left = .Left BackMenu_Caption.Width = .Width End With BackMenu_Caption.ZOrder '将标签置前 Set MenuBar_MenuItem = .Controls.Add("forms.label.1") '添加一个Label,用于触发事件 With MenuBar_MenuItem .Name = "MenuBar_MenuItem" & MenuCount .BorderStyle = fmBorderStyleNone .BackStyle = fmBackStyleTransparent With BackMenu_BackGroud MenuBar_MenuItem.Move .Left, .Top, .Width, .Height End With End With End With OnAction = sAction End Sub Private Sub MenuBar_MenuItem_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Button = 1 Then bMenuSelected = True: Menu_Select End Sub Private Sub MenuBar_Click() UnSelectLastMenu bMenuSelected = False End Sub Private Sub MenuBar_MenuItem_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) UnSelectLastMenu Call Menu_Select End Sub Private Sub MenuBar_MouseMove1(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Not bMenuSelected Then UnSelectLastMenu End Sub Private Sub WorkForm_Click() '窗体单击时 UnSelectLastMenu bMenuSelected = False End Sub Private Sub WorkForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Not bMenuSelected Then UnSelectLastMenu '窗体 End Sub Private Sub Menu_Select() '选择菜单 On Error Resume Next Dim Pt_Menu_RightBottom As POINTAPI, Pt_Menu_LeftTop As POINTAPI With WorkForm UnSelectLastMenu Set LastSelect_Menu = BackMenu_BackGroud With BackMenu_BackGroud .BorderStyle = fmBorderStyleSingle .BorderColor = RGB(0, 0, 128) .BackStyle = fmBackStyleOpaque If bMenuSelected = False Then WorkForm.Controls("BackMenu_BackGroud" & Index).BackColor = &HFFC0C0 Else WorkForm.Controls("BackMenu_BackGroud" & Index).BackColor = &HE0E0E0 pt.X = MenuBar_MenuItem.Left * 1.33 pt.Y = (MenuBar_MenuItem.Top + MenuBar_MenuItem.Height) * 1.33 + 3 ClientToScreen hForm, pt If OnAction "" Then Application.Run OnAction End If End If End With End With End Sub Private Sub UnSelectLastMenu() '取消上次选择 If Not LastSelect_Menu Is Nothing Then With LastSelect_Menu .Picture = LoadPicture() .BackStyle = fmBackStyleTransparent .BorderStyle = fmBorderStyleNone End With End If End Sub '********本模块结束********** '*************************** '* 菜单执行模块 * '*************************** Public Type POINTAPI X As Long Y As Long End Type Public Declare Function FindWindow Lib "user32.dll" Alias"FindWindowA"(ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function ClientToScreen Lib"user32"(ByVal hwnd As Long, lpPoint As POINTAPI) As Long Public Popup_Menu As CommandBar '指定弹出式菜单 Public LastSelect_Menu As MSForms.Image '最后选择的菜单 Public MenuCount As Integer '子菜单数量 Public hForm As Long '窗口句柄 Public intLevel As Integer '级别标识,用于设置Radio菜单(游戏菜单中:初级,中级,高级) Public bAbortEnabled As Boolean '标识放弃菜单项是否可用 Public bItemCheck As Boolean '标识音效菜单是否CheckOn Public bMenuSelected As Boolean '标识菜单是否点击 Public pt As POINTAPI '定义点 Public faceid As Integer '图标ID Public faceidselect As Integer '选择的图标 Public fistid As Integer '第一个图标号 Public lastid As Integer '最后一个图标号 Public selectrow,selectcol as integer Public Mcro(50) AS String SUB 文件() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "打开 ", "", False, True,33,"" AddCustomCommandBarPopup1 "新建 ", "BB", False, True,18,"" AddCustomCommandBarPopup2 ("另存为 ") Set cmb = Application.CommandBars("CELL").Controls("另存为 ") AddCustomCommandBarPopup3 cmb, "OFFICE 97-2003文件 ", "DD", False, True, 3, "" Set cmb = Application.CommandBars("CELL").Controls("另存为 ") AddCustomCommandBarPopup4 cmb, "OFFICE 2007工作表 " Set cmb = Application.CommandBars("CELL").Controls("另存为 ").Controls("OFFICE 2007工作表 ") AddCustomCommandBarPopup3 cmb, "office 2007启用宏的工作表 ", "FF", False, True, 0, "" Set cmb = Application.CommandBars("CELL").Controls("另存为 ").Controls("OFFICE 2007工作表 ") AddCustomCommandBarPopup3 cmb, "OFFICE 2007工作表 ", "GG", False, True, 253, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 公式() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "文本 ", "WB", False, True,7,"" AddCustomCommandBarPopup2 ("名称 ") Set cmb = Application.CommandBars("CELL").Controls("名称 ") AddCustomCommandBarPopup3 cmb, "定义 ", "DY", False, True, 0, "" Set cmb = Application.CommandBars("CELL").Controls("名称 ") AddCustomCommandBarPopup4 cmb, "单元格 " Set cmb = Application.CommandBars("CELL").Controls("名称 ").Controls("单元格 ") AddCustomCommandBarPopup3 cmb, "合并 ", "HB", False, True, 592, "" Set cmb = Application.CommandBars("CELL").Controls("名称 ").Controls("单元格 ") AddCustomCommandBarPopup3 cmb, "从属 ", "CS", False, True, 564, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 开发工具() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "插入 ", "CR", False, True,548,"" AddCustomCommandBarPopup1 "模式 ", "MS", False, True,590,"" AddCustomCommandBarPopup2 ("宏 ") Set cmb = Application.CommandBars("CELL").Controls("宏 ") AddCustomCommandBarPopup3 cmb, "录制宏 ", "LZH", False, True, 205, "" Set cmb = Application.CommandBars("CELL").Controls("宏 ") AddCustomCommandBarPopup3 cmb, "安全性 ", "AQX", False, True, 279, "" Set cmb = Application.CommandBars("CELL").Controls("宏 ") AddCustomCommandBarPopup3 cmb, "查看代码 ", "CKDM", False, True, 289, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 窗口() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "并列比较 ", "BLBJ", False, True,250,"" AddCustomCommandBarPopup1 "冻结 ", "DJ", False, True,288,"" AddCustomCommandBarPopup1 "隐藏 ", "YC", False, True,237,"" AddCustomCommandBarPopup1 "拆分 ", "CF", False, True,292,"" AddCustomCommandBarPopup1 "取消冻结 ", "QXDJ", False, True,232,"" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 工具() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "拼写检查 ", "PXJC", False, True,246,"" AddCustomCommandBarPopup2 ("保护 ") Set cmb = Application.CommandBars("CELL").Controls("保护 ") AddCustomCommandBarPopup3 cmb, "保护工作表 ", "BHGZB", False, True, 277, "" Set cmb = Application.CommandBars("CELL").Controls("保护 ") AddCustomCommandBarPopup3 cmb, "保护工作薄 ", "BHGZBB", False, True, 312, "" Set cmb = Application.CommandBars("CELL").Controls("保护 ") AddCustomCommandBarPopup3 cmb, "工作表菜单栏 ", "gzbcdl", False, True, 142, "" Set cmb = Application.CommandBars("CELL").Controls("保护 ") AddCustomCommandBarPopup3 cmb, "图表菜单栏 ", "tbgjl", False, True, 164, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 常用() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "格式 ", "gs", False, True,108,"" AddCustomCommandBarPopup1 "数据透视表 ", "sjtsb", False, True,125,"" AddCustomCommandBarPopup1 "图表 ", "tb", False, True,127,"" AddCustomCommandBarPopup1 "审阅 ", "sy", False, True,124,"" AddCustomCommandBarPopup1 "窗体 ", "ct", False, True,128,"" AddCustomCommandBarPopup1 "停止录制 ", "tzlz", False, True,185,"" AddCustomCommandBarPopup2 ("外部数据 ") Set cmb = Application.CommandBars("CELL").Controls("外部数据 ") AddCustomCommandBarPopup3 cmb, "公式审核 ", "gssh", False, True, 129, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ") AddCustomCommandBarPopup3 cmb, "全屏显示 ", "qpxs", False, True, 130, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ") AddCustomCommandBarPopup3 cmb, "循环引用 ", "xhye", False, True, 132, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ") AddCustomCommandBarPopup4 cmb, "VisualBasic " Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "Web ", "web", False, True, 173, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "控件工具箱 ", "kjgjx", False, True, 174, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "退出设计模式 ", "tcsjms", False, True, 162, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "刷新 ", "sx", False, True, 165, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "监视窗口 ", "jsck", False, True, 168, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "数据透视表字段列表 ", "sjtsbzdb", False, True, 170, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "边框 ", "bk", False, True, 178, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "保护 ", "bh", False, True, 160, "" Set cmb = Application.CommandBars("CELL").Controls("外部数据 ").Controls("VisualBasic ") AddCustomCommandBarPopup3 cmb, "文本到语音 ", "wbdyy", False, True, 164, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 列表() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "并排比较 ", "bpbj1", False, True,180,"" AddCustomCommandBarPopup1 "绘图 ", "bpbj2", False, True,182,"" AddCustomCommandBarPopup1 "数据透视图菜单 ", "bpbj3", False, True,184,"" AddCustomCommandBarPopup2 ("工作簿标签 ") AddCustomCommandBarPopup2 ("单元格 ") Set cmb = Application.CommandBars("CELL").Controls("单元格 ") AddCustomCommandBarPopup3 cmb, "列 ", "bpbj6", False, True, 190, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ") AddCustomCommandBarPopup3 cmb, "行 ", "bpbj7", False, True, 192, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ") AddCustomCommandBarPopup3 cmb, "单元格 ", "bpbj8", False, True, 194, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ") AddCustomCommandBarPopup3 cmb, "柱形图 ", "bpbj9", False, True, 196, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ") AddCustomCommandBarPopup3 cmb, "行 ", "bpbj10", False, True, 198, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ") AddCustomCommandBarPopup4 cmb, "工作表 " Set cmb = Application.CommandBars("CELL").Controls("单元格 ").Controls("工作表 ") AddCustomCommandBarPopup3 cmb, "XLM 单元格 ", "bpbj12", False, True, 202, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ").Controls("工作表 ") AddCustomCommandBarPopup3 cmb, "文档 ", "bpbj13", False, True, 204, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ").Controls("工作表 ") AddCustomCommandBarPopup3 cmb, "桌面 ", "bpbj14", False, True, 206, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ").Controls("工作表 ") AddCustomCommandBarPopup3 cmb, "非默认拖放 ", "bpbj15", False, True, 208, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ").Controls("工作表 ") AddCustomCommandBarPopup3 cmb, "自动填充 ", "bpbj16", False, True, 210, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ").Controls("工作表 ") AddCustomCommandBarPopup3 cmb, "按钮 ", "bpbj17", False, True, 212, "" Set cmb = Application.CommandBars("CELL").Controls("单元格 ").Controls("工作表 ") AddCustomCommandBarPopup3 cmb, "对话框 ", "bpbj18", False, True, 214, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 序列() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "图形区 ", "bpbj20", False, True,218,"" AddCustomCommandBarPopup1 "基底和墙纸 ", "bpbj21", False, True,220,"" AddCustomCommandBarPopup1 "趋势线 ", "bpbj22", False, True,222,"" AddCustomCommandBarPopup1 "图表 ", "bpbj23", False, True,224,"" AddCustomCommandBarPopup1 "设置数据系列格式 ", "bpbj24", False, True,226,"" AddCustomCommandBarPopup2 ("设置数据轴格式 ") Set cmb = Application.CommandBars("CELL").Controls("设置数据轴格式 ") AddCustomCommandBarPopup3 cmb, "设置图例项格式 ", "bpbj26", False, True, 230, "" Set cmb = Application.CommandBars("CELL").Controls("设置数据轴格式 ") AddCustomCommandBarPopup3 cmb, "编辑栏 ", "bpbj27", False, True, 232, "" Set cmb = Application.CommandBars("CELL").Controls("设置数据轴格式 ") AddCustomCommandBarPopup3 cmb, "数据透视表上下文菜单 ", "bpbj28", False, True, 234, "" Set cmb = Application.CommandBars("CELL").Controls("设置数据轴格式 ") AddCustomCommandBarPopup3 cmb, "查询 ", "bpbj29", False, True, 236, "" Set cmb = Application.CommandBars("CELL").Controls("设置数据轴格式 ") AddCustomCommandBarPopup3 cmb, "查询布局 ", "bpbj30", False, True, 238, "" Set cmb = Application.CommandBars("CELL").Controls("设置数据轴格式 ") AddCustomCommandBarPopup4 cmb, "自动计算 " Set cmb = Application.CommandBars("CELL").Controls("设置数据轴格式 ").Controls("自动计算 ") AddCustomCommandBarPopup3 cmb, "对象/图形区 ", "bpbj32", False, True, 242, "" Set cmb = Application.CommandBars("CELL").Controls("设置数据轴格式 ").Controls("自动计算 ") AddCustomCommandBarPopup3 cmb, "标题栏(图表) ", "bpbj33", False, True, 244, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 框架() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "数据透视图快捷菜单 ", "bpbj35", False, True,248,"" AddCustomCommandBarPopup1 "拼音信息 ", "bpbj36", False, True,250,"" AddCustomCommandBarPopup1 "自动合计 ", "bpbj37", False, True,252,"" AddCustomCommandBarPopup1 "选择性粘贴下拉框 ", "bpbj38", False, True,254,"" AddCustomCommandBarPopup2 ("查找格式 ") Set cmb = Application.CommandBars("CELL").Controls("查找格式 ") AddCustomCommandBarPopup3 cmb, "替换格式 ", "bpbj40", False, True, 258, "" Set cmb = Application.CommandBars("CELL").Controls("查找格式 ") AddCustomCommandBarPopup3 cmb, "列表区域快捷菜单 ", "bpbj41", False, True, 260, "" Set cmb = Application.CommandBars("CELL").Controls("查找格式 ") AddCustomCommandBarPopup3 cmb, "列表区域布局快捷菜单 ", "bpbj42", False, True, 262, "" Set cmb = Application.CommandBars("CELL").Controls("查找格式 ") AddCustomCommandBarPopup3 cmb, "XML 区域快捷菜单 ", "bpbj43", False, True, 264, "" Set cmb = Application.CommandBars("CELL").Controls("查找格式 ") AddCustomCommandBarPopup3 cmb, "列表区域布局快捷菜单 ", "bpbj44", False, True, 266, "" Set cmb = Application.CommandBars("CELL").Controls("查找格式 ") AddCustomCommandBarPopup3 cmb, "艺术字 ", "bpbj45", False, True, 268, "" AddCustomCommandBarPopup2 ("图片 ") Set cmb = Application.CommandBars("CELL").Controls("图片 ") AddCustomCommandBarPopup3 cmb, "阴影设置 ", "bpbj47", False, True, 272, "" AddCustomCommandBarPopup2 ("三维设置 ") Set cmb = Application.CommandBars("CELL").Controls("三维设置 ") AddCustomCommandBarPopup3 cmb, "绘图画布 ", "bpbj49", False, True, 276, "" Set cmb = Application.CommandBars("CELL").Controls("三维设置 ") AddCustomCommandBarPopup3 cmb, "组织结构图 ", "bpbj50", False, True, 278, "" Set cmb = Application.CommandBars("CELL").Controls("三维设置 ") AddCustomCommandBarPopup3 cmb, "图示 ", "bpbj51", False, True, 280, "" Set cmb = Application.CommandBars("CELL").Controls("三维设置 ") AddCustomCommandBarPopup3 cmb, "墨迹绘图与书写 ", "bpbj52", False, True, 282, "" Set cmb = Application.CommandBars("CELL").Controls("三维设置 ") AddCustomCommandBarPopup3 cmb, "墨迹注释 ", "bpbj53", False, True, 284, "" AddCustomCommandBarPopup2 ("边框 ") Set cmb = Application.CommandBars("CELL").Controls("边框 ") AddCustomCommandBarPopup3 cmb, "边框 ", "bpbj55", False, True, 288, "" Set cmb = Application.CommandBars("CELL").Controls("边框 ") AddCustomCommandBarPopup4 cmb, "绘图边框 " Set cmb = Application.CommandBars("CELL").Controls("边框 ").Controls("绘图边框 ") AddCustomCommandBarPopup3 cmb, "图表类型 ", "bpbj57", False, True, 292, "" Set cmb = Application.CommandBars("CELL").Controls("边框 ").Controls("绘图边框 ") AddCustomCommandBarPopup3 cmb, "图案 ", "bpbj58", False, True, 294, "" Set cmb = Application.CommandBars("CELL").Controls("边框 ").Controls("绘图边框 ") AddCustomCommandBarPopup3 cmb, "字体颜色 ", "bpbj59", False, True, 296, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 填充颜色() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "线条颜色 ", "bpbj61", False, True,300,"" AddCustomCommandBarPopup2 ("绘图与书写笔 ") Set cmb = Application.CommandBars("CELL").Controls("绘图与书写笔 ") AddCustomCommandBarPopup3 cmb, "批注笔 ", "bpbj63", False, True, 304, "" Set cmb = Application.CommandBars("CELL").Controls("绘图与书写笔 ") AddCustomCommandBarPopup3 cmb, "绘图和书写笔 ", "bpbj64", False, True, 306, "" Set cmb = Application.CommandBars("CELL").Controls("绘图与书写笔 ") AddCustomCommandBarPopup3 cmb, "注释笔 ", "bpbj65", False, True, 308, "" Set cmb = Application.CommandBars("CELL").Controls("绘图与书写笔 ") AddCustomCommandBarPopup3 cmb, "叠放次序 ", "bpbj66", False, True, 310, "" Set cmb = Application.CommandBars("CELL").Controls("绘图与书写笔 ") AddCustomCommandBarPopup3 cmb, "微移 ", "bpbj67", False, True, 312, "" Set cmb = Application.CommandBars("CELL").Controls("绘图与书写笔 ") AddCustomCommandBarPopup3 cmb, "对齐或分布 ", "bpbj68", False, True, 314, "" AddCustomCommandBarPopup2 ("旋转或翻转 ") Set cmb = Application.CommandBars("CELL").Controls("旋转或翻转 ") AddCustomCommandBarPopup3 cmb, "直线 ", "bpbj70", False, True, 318, "" Set cmb = Application.CommandBars("CELL").Controls("旋转或翻转 ") AddCustomCommandBarPopup4 cmb, "连接符 " Set cmb = Application.CommandBars("CELL").Controls("旋转或翻转 ").Controls("连接符 ") AddCustomCommandBarPopup3 cmb, "自选图形 ", "bpbj72", False, True, 322, "" Set cmb = Application.CommandBars("CELL").Controls("旋转或翻转 ").Controls("连接符 ") AddCustomCommandBarPopup3 cmb, "标注 ", "bpbj73", False, True, 324, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 流程图() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "箭头总汇 ", "bpbj75", False, True,328,"" AddCustomCommandBarPopup1 "星与旗帜 ", "bpbj76", False, True,330,"" AddCustomCommandBarPopup1 "基本形状 ", "bpbj77", False, True,332,"" AddCustomCommandBarPopup1 "插入形状 ", "bpbj78", False, True,334,"" AddCustomCommandBarPopup2 ("形状 ") Set cmb = Application.CommandBars("CELL").Controls("形状 ") AddCustomCommandBarPopup3 cmb, "非活动图表 ", "bpbj80", False, True, 338, "" Set cmb = Application.CommandBars("CELL").Controls("形状 ") AddCustomCommandBarPopup3 cmb, "Excel 控件 ", "bpbj81", False, True, 340, "" AddCustomCommandBarPopup1 "曲线 ", "bpbj82", False, True,342,"" AddCustomCommandBarPopup1 "曲线结点 ", "bpbj83", False, True,344,"" AddCustomCommandBarPopup1 "曲线段 ", "bpbj84", False, True,346,"" AddCustomCommandBarPopup1 "图片上下文菜单 ", "bpbj85", False, True,348,"" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB OLE对象() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "ActiveX 控件 ", "bpbj87", False, True,352,"" AddCustomCommandBarPopup1 "艺术字上下文菜单 ", "bpbj88", False, True,354,"" AddCustomCommandBarPopup1 "旋转方式 ", "bpbj89", False, True,356,"" AddCustomCommandBarPopup1 "连接符 ", "bpbj90", False, True,358,"" AddCustomCommandBarPopup1 "脚本标记快捷菜单 ", "bpbj91", False, True,360,"" AddCustomCommandBarPopup1 "Canvas Popup ", "bpbj92", False, True,362,"" AddCustomCommandBarPopup1 "Organization Chart Popup ", "bpbj93", False, True,364,"" AddCustomCommandBarPopup2 ("图表 ") Set cmb = Application.CommandBars("CELL").Controls("图表 ") AddCustomCommandBarPopup3 cmb, "选择 ", "bpbj95", False, True, 368, "" Set cmb = Application.CommandBars("CELL").Controls("图表 ") AddCustomCommandBarPopup4 cmb, "版式 " Set cmb = Application.CommandBars("CELL").Controls("图表 ").Controls("版式 ") AddCustomCommandBarPopup3 cmb, "符号栏 ", "bpbj97", False, True, 372, "" Set cmb = Application.CommandBars("CELL").Controls("图表 ").Controls("版式 ") AddCustomCommandBarPopup3 cmb, "任务窗格 ", "bpbj98", False, True, 374, "" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 添加命令() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "内置菜单 ", "bpbj100", False, True,378,"" AddCustomCommandBarPopup1 "剪贴板 ", "bpbj101", False, True,380,"" AddCustomCommandBarPopup1 "信封 ", "bpbj102", False, True,382,"" AddCustomCommandBarPopup1 "联机会议 ", "bpbj103", False, True,384,"" AddCustomCommandBarPopup1 "SnagIt ", "bpbj104", False, True,386,"" Popup_Menu.ShowPopup pt.X, pt.Y END SUB SUB 关于() Clear_menu '清除弹出菜单菜单项 Dim cmb As CommandBarControl AddCustomCommandBarPopup1 "我的VBA ", "WDVBA", False, True,400,"" AddCustomCommandBarPopup1 "帮助 ", "BZ", False, True,402,"" Popup_Menu.ShowPopup pt.X, pt.Y END SUB Public Sub ClearBar() '清除Cell弹出式菜单菜单项 Dim ctr As CommandBarControl With Popup_Menu .Enabled = True For Each ctr In .Controls ctr.Delete Next End With End Sub Sub RemoveCustomMenu() '恢复系统菜单的各弹出菜单 Application.CommandBars("CELL").Reset End Sub Sub clear_menu() Dim cmb As Object For Each cmb In Application.CommandBars("cell").Controls Application.CommandBars("cell").Controls(cmb.Caption).Delete Next End Sub Sub AddCustomCommandBarPopup1(Caption As String, Macro As String, NewGroup As Boolean, Enable As Boolean, FId As Integer, ShortT As String) '添加一级菜单选项 Dim cbb As CommandBarButton Set cbb = Application.CommandBars("CELL").Controls.Add(msoControlButton) cbb.Caption = Caption If FId > 0 Then cbb.faceid = FId If ShortT "" Then cbb.ShortcutText = ShortT cbb.OnAction = Macro cbb.BeginGroup = NewGroup cbb.Enabled = Enable End Sub Function AddCustomCommandBarPopup2(Caption As String) As CommandBarControl '添加子菜单项 Dim cmb As CommandBarControl Set cmb = Application.CommandBars("CELL").Controls.Add(msoControlPopup) cmb.Caption = Caption cmb.Visible = True Set AddCustomCommandBarPopup2 = cmb End Function Sub AddCustomCommandBarPopup3(cmb As Object, Caption As String, Macro As String, NewGroup As Boolean, Enable As Boolean, FId As Integer, ShortT As String) '添加一级菜单选项 Dim cbc As CommandBarButton Set cbc = cmb.Controls.Add(msoControlButton) cbc.Caption = Caption If FId > 0 Then cbc.faceid = FId If ShortT "" Then cbc.ShortcutText = ShortT cbc.OnAction = Macro cbc.BeginGroup = NewGroup cbc.Enabled = Enable End Sub Function AddCustomCommandBarPopup4(cmd As CommandBarControl, Caption As String) As CommandBarControl '添加子菜单项 Dim cme As CommandBarControl Set cme = cmd.Controls.Add(msoControlPopup) cme.Caption = Caption cme.Visible = True Set AddCustomCommandBarPopup4 = cme End Function '********本模块结束********** '*************************** '* 窗口模块 * '*************************** Private menu(1 To 50) As New Menu_Class '定义50个cMenu菜单类型 Private Sub UserForm_Initialize() hForm = FindWindow(vbNullString, Me.Caption) '程序中需要用到窗口句柄,先获得它 MenuCount = 0 Set Popup_Menu = Application.CommandBars("Cell") '程序中需指定一个弹出式菜单,我们指定为单元格右键菜单,您可另外指定一个弹出式菜单,请注意,是弹出式菜单 Dim bar As Control Set bar = Me.Controls.Add("Forms.image.1", "IM1", Visible) With bar .Visible = True .Left = -100 .Top = 0 .Height = 20 .Width = 20 .BackColor = &HFFC0C0 .BorderStyle = 0 End With '*************** Set bar = Me.Controls.Add("Forms.image.1", "IM2", Visible) With bar .Visible = True .Left = -100 .Top = 0 .Height = 20 .Width = 20 .BackColor = &HFFC0C0 .BorderStyle = 0 End With '*************** Set bar = Me.Controls.Add("Forms.image.1", "FormMenuBar", Visible) With bar .Visible = True .Left = -1 .Top = -1 .Height = 20 .Width = 2000 .BackColor = &HFFC0C0 .BorderStyle = 0 End With menu(1).AddMenu Me,"文件","文件","" menu(2).AddMenu Me,"公式","公式","" menu(3).AddMenu Me,"开发工具","开发工具","" menu(4).AddMenu Me,"窗口","窗口","" menu(5).AddMenu Me,"工具","工具","" menu(6).AddMenu Me,"常用","常用","" menu(7).AddMenu Me,"列表","列表","" menu(8).AddMenu Me,"序列","序列","" menu(9).AddMenu Me,"框架","框架","" menu(10).AddMenu Me,"填充颜色","填充颜色","" menu(11).AddMenu Me,"流程图","流程图","" menu(12).AddMenu Me,"OLE对象","OLE对象","" menu(13).AddMenu Me,"添加命令","添加命令","" menu(14).AddMenu Me,"关于","关于","" end sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Dim i As Integer For i = LBound(menu) To UBound(menu) Set menu(i) = Nothing Next Popup_Menu.Enabled = True Popup_Menu.Reset end sub '********本模块结束**********
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值