EXCEL VBA自定义菜单项

本文介绍如何在Office应用程序中自定义工具栏按钮和菜单项,包括创建、关联宏及调整外观等步骤,并提供通过VBA自动创建和删除菜单的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎么自定义一个按钮?首先要确保要更改的工具栏是可见的,再单击“工具栏选项”箭头指向“添加或删除按钮”或用右击单击工具栏,再单击“自定义”,单击“ 命令”选项卡,在类别中选择“宏”,将“自定义按钮”拖拉到你需要的工具栏的位置即可。而有多项的话,我们还可以自定义一个菜单项来包含这一些按钮。
怎么自定义一个菜单项?和自定义按钮是差不多的,只是最后一步的操作是将“自定义菜单项”拖拉到你需要的工具栏的位置即可。
怎么将按钮与宏关联?刚刚建立好的按钮,在第一次单击它是,会弹出一个菜单,让你选择与其相关联的宏,这时选择要关联的宏的名称即可。但我们可以这样操作,右击工具栏后选择“自定义”,选择需要关联宏的按钮,然后在“更改所选内容”中的指定宏中指定或修改!
如何更改这个自定义按钮的外观?在刚才说的“更改所选内容”项里,还可以更改这个按钮的名称,图标,样式,只要在此做相应的修改即可,要说明的一点是,在名称中用&后面跟着英文的话,就变成相对应的键盘按键,修改后我们看到的是这个英文下面加一条划线来表示!
如何删除自定义的菜单?还按照上面的操作,将要删除的菜单拖拉到工具栏外,或选择它,再点击“更改所选内容”里的删除即可。
上 面说了手工怎么样建立的删除自己的菜单,而怎么让加载宏自己建一个菜单,并在关闭时将其删除呢?前贴说过,可以在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值