Phi*_*ret 2 excel vba excel-vba
我有一个包含一堆普通VBA宏的Excel工作表.此文件不断更新并作为Excel加载项(.xlam)进行分发.到目前为止,我对它的工作方式非常满意.
现在我想添加一个功能区选项卡和按钮来运行其中一些宏.最初,我很高兴能找到这篇MSDN文章,但后来感到沮丧的SetCustomUI似乎并不存在Excel(只有Project),所以我不能简单地使用它Workbook_Open.其他SO问题证实了这一点,但不提供替代方案.
我的要求:
有任何想法吗?
这是我在AddIn文件上使用了一段时间的一些代码.我从别人那里继承了它,但它对我来说一直都很好.
它应该在AddIns功能区中创建一个新工具栏:

我想我复制了所有相关的代码.如果您有任何问题或遇到任何问题,请告诉我.
Option Explicit
'This module contains functions and subroutines to create Add-in menus
Public Const MenuName As String = "Menu Name"
Public Const APPNAME As String = "&Menu Name"
Private Sub Credit_Inf()
MsgBox "Created by YOUR NAME"
End Sub
Private Sub Auto_Open()
Dim NewMenuItemMacro As String
Dim NewMenuItem As String
Dim XLCommandBar As Integer
Dim NewItem As CommandBarButton
Dim ToolsMenu As CommandBarPopup
Dim NewMenu As CommandBar
NewMenuItemMacro = MenuName
NewMenuItem = APPNAME & "..."
XLCommandBar = 1 'Worksheet Menu Bar
'Delete the current menu if it exists (just in case)
On Error Resume Next
CommandBars(MenuName).Delete
On Error GoTo 0
Set NewMenu = Application.CommandBars.Add(MenuName, msoBarTop)
' .....
NewMenu.Visible = True
' Create a popup control on the bar and set its caption.
Set ToolsMenu = NewMenu.Controls.Add(Type:=msoControlPopup)
ToolsMenu.Caption = "Who built this?"
ToolsMenu.BeginGroup = True
With ToolsMenu.Controls.Add(Type:=msoControlButton)
.OnAction = "Credit_Inf"
.Caption = "Find out who built this"
.FaceId = 99
.Style = msoButtonCaption
.BeginGroup = False
End With
'##Repeat ToolsMenu.Controls.Add, as necessary
End Sub
Private Sub Auto_Close()
'Delete the current menu if it exists (just in case)
On Error Resume Next
CommandBars(MenuName).Delete
On Error GoTo 0
End Sub
Private Sub EnableMenuItem(sItem As String, bEnable As Boolean)
On Error GoTo Err_EnableMenuItem
Dim NewItem As CommandBarButton
Dim NewMenu As CommandBar
Set NewMenu = Application.CommandBars(MenuName)
Set NewItem = NewMenu.FindControl(Tag:=sItem, recursive:=True)
NewItem.Enabled = bEnable
Err_EnableMenuItem:
Resume Next
End Sub
Public Function IsWorkbookOpen() As Boolean
IsWorkbookOpen = True
If Application.Workbooks.count = 0 Then
IsWorkbookOpen = False
End If
End Function
Run Code Online (Sandbox Code Playgroud)