以下代码用于向Excel菜单栏中添加菜单。是临时菜单,不是永久菜单。
使用目的:
将后台代码实现的功能以菜单的形式显示出来,供用户使用。
使用方法:
直接调用过程名即可,也可在Workbooks_Open中调用可实现打开Excel即加载,易用。
注意事项:
(1)先点击按钮生成菜单,然后再打开Excel时,此时新Excel中会自动加载同样的菜单。所以,我们让用户先打开我们的程序,然后再打开她要操作的表,然后再她的表上点击按钮即可。
(2)此菜单是临时菜单不会永久停留在Excel中,当当前Excel进程完全结束后,就会消失。所以一般不用担心,会对Excel程序造成损坏什么的。
(3)当你的两个Excel不是一个进程时,那么菜单是不会在另一个上显示的。比如说,用了两次CreateObject创建的Excel就不属于同一个进程,一个显示菜单后,另一个,即使是后创建打开的,也是不显示菜单的。(一般不用考虑。出问题时能想到可能有此问题即可。)
Sub Add_Click()
Dim mm(10)
Dim nn(10)
For Each Menu In Application.CommandBars
'防止要添加的菜单组已经存在而出错。
If InStr(Menu.Name, "Menu1") > 0 Then
Application.CommandBars(Menu.Name).Delete
End If
Next
'DisplayName是菜单显示的名称,SUBNAME是后台代码的过程名。
'第1个菜单
mm(1) = "DisplayName1"
mm(2) = "SUBNAME1"
'第2个菜单
nn(1) = "DisplayName2"
nn(2) = "SUBNAME2"
'...加多少个都行。
Set Menu = Application.CommandBars.Add(Name:="Menu1", Position:=msoBarTop, Temporary:=True)
'新添加的菜单可见
Menu.Visible = True
For N = 1 To 2 '此处根据要添加的菜单数量变更即可。
Set mn = Menu.Controls.Add(Type:=1)
mn.Caption = nn(N)
mn.Visible = True
mn.OnAction = mm(N)
mn.FaceId = 1265 '这个数字是菜单的图案,挑喜欢的就好。
mn.Style = 3
Next
End Sub