如何从宏中制作可重复使用的按钮?

时间:2014-04-17 13:58:31

标签: excel vba excel-vba

拥有一个可用的宏,我想重复使用它。即,在工具栏上创建一个按钮(带有名称+图标),以启动宏。尝试了一些教程(例如:http://www.officetooltips.com/excel/tips/create_a_toolbar_button_or_menu_item_to_run_a_macro.html),但我也想将创建代码打包到某个文件中,这样点击时就会安装宏。

是否有一种简单的方法可以做到这一点,如果是的话,还是如何做到的? (最佳选择适用于Windows和Mac)

2 个答案:

答案 0 :(得分:1)

更新4/20:关于构建加载项的复杂性的好评。话虽这么说,我确定这里的老定时器会说值得做的事情值得做对:)。以下是创建加载项的简短演练:

(1)保存xlsmxlsb文件,其名称对于加载项的版本而言很容易递增。

(2)将以下脚本添加到ThisWorkbook中,以确保在打开工作簿和激活工作簿时创建菜单栏:

Private Sub Workbook_Open()
    Call CreateMenuBar
End Sub

Private Sub Workbook_Activate()
    Call CreateMenuBar
End Sub

(3)创建一个新模块并添加以下代码以创建,删除和更新菜单栏:

Option Explicit
Sub CreateMenuBar()

    Dim MenuObject As CommandBarPopup
    Dim MenuItem As Object
    Dim SubMenuItem As Object

    'clear the old menu bar
    Call DeleteMenuBar("&MyMenuBar")

    'create the menu bar and drop down options
    Set MenuObject = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, _
        before:=10, Temporary:=True)
    MenuObject.Caption = "&MyMenuBar"
    MenuObject.OnAction = "UpdateMenuBar"

    'first level menu option
    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
    MenuItem.Caption = "&First Menu Stuff"

        'link to first script
        Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
        SubMenuItem.Caption = "&First Script"
        SubMenuItem.OnAction = "Script1"

        'link to second script
        Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
        SubMenuItem.Caption = "&Second Script"
        SubMenuItem.OnAction = "Script2"

    'first level menu option
    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
    MenuItem.Caption = "&Second Menu Stuff"

        'link to third script
        Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
        SubMenuItem.Caption = "&Third Script"
        SubMenuItem.OnAction = "Script3"

End Sub

Sub DeleteMenuBar(MenuName As String)
    On Error Resume Next
    Application.CommandBars(1).Controls(MenuName).Delete
    On Error GoTo 0
End Sub

Sub UpdateMenuBar()
    'do special checks, like verifying sheets, in this routine
End Sub

(4)验证脚本是否正常工作并保存文件。

(5)将文件再次保存为xlamxla文件,并将其分发给用户。吊杆!

- 以下原帖 -

这是一个加载项在Windows Excel实例中的样子:

windows

以下是Mac Excel实例中的加载项:

enter image description here

如果您为一组用户开发了许多脚本并希望确保他们使用相同的代码,则加载项非常方便。

答案 1 :(得分:0)

我在另一个问题上发布了这个问题,但这不是他们想要的。这对你有用吗?

在Excel选项中,单击“自定义功能区”。在您可以添加的内容列表上方,应该有一个下拉框,您可以在其中选择宏。然后应该使用宏来填充列表以添加到功能区中!

Adding a macro to the ribbon