EXCEL VBA自定义菜单项

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

你可能感兴趣的:(Excel)