如何用vba给vbe内置菜单命令栏添加自定义命令?

如何用vba在单元格右键快捷菜单中添加自定义的菜单命令? 一文中介绍了用vba给单元格右键快捷菜单添加自定义菜单命令的方法。

类似的,也可以在vbe内置菜单命令栏添加自定义命令。

如下代码所示

Sub QQ1722187970()
    Dim objCMB As CommandBar
    Dim objCMBB As CommandBarButton
    Set objCMB = Excel.Application.VBE.CommandBars("Code Window")
    With objCMB
        .Reset
        Set objCMBB = .Controls.Add(msoControlButton)
        With objCMBB
            .Caption = "测试"
            .FaceId = 100
            .OnAction = "xyf"
        End With
    End With
End Sub
Sub xyf()
    MsgBox 1
End Sub

当运行上述代码后可以在代码窗口的右键快捷菜单中添加自定义的命令“测试”,如下图所示

VBE1

但是单击“测试”后无法运行“xyf”子过程。

在vbe中添加自定义菜单命令与在excel 中添加自定义菜单命令有所不同,在vbe中添加的自定义菜单按钮控件需要通过单击事件来触发它的OnAction。

为此需要添加一个类模块,名称改为“clsCMB”,然后定义一个带事件的对象变量。具体代码如下

Public WithEvents objCmbb As CommandBarButton
Private Sub objCmbb_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
     Call xyf
End Sub

然后插入一个标准模块,在标准模块中添加以下代码

Dim obj As clsCMB
Sub QQ1722187970()
    Dim objCMB As CommandBar
    Dim objCmbb As CommandBarButton
    '将变量赋值给新的类
    Set obj = New clsCMB
    Set objCMB = Excel.Application.VBE.CommandBars("Code Window")
    With objCMB
        .Reset
        Set objCmbb = .Controls.Add(msoControlButton)
        将类模块中的对象变量赋值给添加的CommandBarButton命令
        Set obj.objCmbb = objCmbb
        With objCmbb
            .Caption = "测试"
            .FaceId = 122
        End With
    End With
End Sub
Sub xyf()
    MsgBox 1
End Sub

最后执行”QQ1722187970″子过程,单击代码窗口的右键快捷菜单中的“测试”命令,将执行”xyf“子过程。

       

发表评论