自定义function区\从macros中select命令\列出死程序
很长一段时间的用户,这里第一次海报。
我开发了一个Excel加载项,主要用于个人使用。 我已经在function区中添加了button来触发macros。 我觉得我的插件比我刚开始的时候更加成熟了。 我希望与同事分享加载项。
这是我的问题; 我希望它清楚地传达需要链接到function区button的macros。 第一张图片显示了我打算拥有的,以“CustomAddIn_”前缀列出的程序。
第二张图显示了我无法弄清楚的内容…此处列出的程序不再存在于加载项中(已被注释掉或完全删除)。 我看到这些前缀是一个'。 任何想法发生了什么? 我想从“从\macrosselect命令”列表框中删除这些。
谢谢!
屏幕抓取 – 更新
我假设你正在谈论当你select时出现的macros列表:文件>选项>自定义function区>macros…
而不是以这种方式添加它们,您可以将它们添加到您的加载项代码。 因此,如果用户打开加载项,它们只会出现在“加载项”菜单中。
这也意味着如果你有许多加载项,每个加载项都增加/删除它自己的一组button。 所以这是我的加载项菜单目前的样子:
这里是我用来创build这个button的代码。 因此,将此代码添加到每个加载项文件中。 您只需要在Auto_Open
为每个需要创build的button调用AddToolbarButton
。
Option Explicit '/*libdesc*/Create our toolbar when loaded, remove it when we're closed... Private Const TOOLBAR_NAME As String = "{Free text Toolbar Name}" Sub Auto_Open() ' In some instances of Excel, the MacroOptions call provokes an error about "hidden workbooks" ' so the on error handler avoid that (the call seems to still work strangely enough) On Error Resume Next ' faceid 422 is a small graph... looks a bit like curves, see also 418 ' faceid 107 is a table with a lightning bolt - seems OK .... ' faceid 2170 is somethign with colours ... ' See http://www.outlookexchange.com/articles/toddwalker/images/icons1-500.jpg ' http://www.outlookexchange.com/articles/toddwalker/BuiltInOLKIcons.asp AddToolbarButton TOOLBAR_NAME, "{Name of Macro here}", 3865, "Button title that will appear in Toolbar", _ "The hoover description (Excel toolbar item text) for this button" End Sub Sub Auto_Close() On Error Resume Next DeleteToolbar TOOLBAR_NAME End Sub Function AddToolbarButton(cmdbarname As String, _ Optional handler As String = "", _ Optional btnIconFace As Integer = -1, _ Optional btnCaption As String = "", _ Optional btnTip As String = "") As Button Dim prevDisp As Boolean: prevDisp = Application.DisplayAlerts Dim cmdbar As CommandBar Dim btn As CommandBarButton Application.DisplayAlerts = False On Error Resume Next Set cmdbar = Application.CommandBars(cmdbarname) If cmdbar Is Nothing Then Set cmdbar = Application.CommandBars.Add(cmdbarname) If Not cmdbar Is Nothing Then cmdbar.Visible = True cmdbar.Position = msoBarTop End If End If '/*link*/Icon Codes,http://supportingtech.blogspot.com/2011/03/microsoft-faceid-numbers-for-vba.html '/*link*/Excel Icon use by ribbon,http://support2.microsoft.com/default.aspx?scid=kb;[LN];Q213552 If handler <> "" And Not cmdbar Is Nothing Then Set btn = cmdbar.Controls.Add(Type:=msoControlButton) If Not btn Is Nothing Then btn.OnAction = handler If btnIconFace >= 0 Then btn.Style = IIf(btnCaption = "", msoButtonIcon, msoButtonIconAndCaption) btn.FaceId = btnIconFace ElseIf btnCaption <> "" Then btn.Style = msoButtonCaption End If If btnCaption <> "" Then btn.Caption = btnCaption End If btn.DescriptionText = IIf(btnTip = "", handler, btnTip) btn.TooltipText = IIf(btnTip = "", handler, btnTip) End If Set AddToolbarButton = btn End If Application.DisplayAlerts = prevDisp End Function Function DeleteToolbar(cmdbarname As String) On Error Resume Next Dim cmdbar As CommandBar Set cmdbar = Application.CommandBars(cmdbarname) If Not cmdbar Is Nothing Then cmdbar.Delete Set cmdbar = Nothing End If End Function
我问了一会儿这个问题,觉得我欠了未来读者的更新。 我从来没有能够复制这个问题,但大卫的答案让我有一个解决scheme:
由于这个错误似乎与加载文件的某种副本有关(我自己在做某个事情),所以我完全重新创build了这个加载项。 我将模块中的所有代码复制到记事本文件中,将模块添加到新的excel文件中,复制到代码中,然后将用户表单从一个项目拖放到另一个项目中。 保存为xlam。 这对我有效。