Project的SetCustomUI for Excel有替代品吗?

Phi*_*ret 2 excel vba excel-vba

我有一个包含一堆普通VBA宏的Excel工作表.此文件不断更新并作为Excel加载项(.xlam)进行分发.到目前为止,我对它的工作方式非常满意.

现在我想添加一个功能区选项卡和按钮来运行其中一些宏.最初,我很高兴能找到这篇MSDN文章,但后来感到沮丧的SetCustomUI似乎并不存在Excel(只有Project),所以我不能简单地使用它Workbook_Open.其他SO问题证实了这一点,但不提供替代方案.

我的要求:

  • 用户必须像今天一样访问宏VBA代码(加载项在VBE中显示为项目).
  • 更新和重新分发加载项必须很容易.今天,我发送一个文件进行更新.
  • 我想要一个带有某些宏按钮的功能区选项卡.

有任何想法吗?

Dav*_*ens 7

这是我在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)