为什么在vba中给菜单命令栏添加的控件没有显示标题或图形?

在之前的文章中,我们介绍了很多相关的在vba中操作菜单、命令栏的方法。

比如给“菜单命令”中添加一个自定义的命令,可以使用如下的代码:

Sub QQ1722187970()
    Dim oCB As CommandBar
    Set oCB = Excel.Application.CommandBars("Worksheet Menu Bar")
    Dim oCBC As CommandBarControl
    Dim oCBB As CommandBarButton
    With oCB
        .Reset
        '给菜单增加一个命令控件
        Set oCBB = .Controls.Add
    End With
End Sub

运行后的效果如下图所示:

从图中可以看出,“加载项”选项卡下的“菜单命令”组中没有看到有新增的命令控件,这是因为没有给控件进行“装饰”。

我们将代码修改如下:

Sub QQ1722187970()
    Dim oCB As CommandBar
    Set oCB = Excel.Application.CommandBars("Worksheet Menu Bar")
    Dim oCBC As CommandBarControl
    Dim oCBB As CommandBarButton
    With oCB
        .Reset
        '给菜单增加一个命令控件
        Set oCBB = .Controls.Add
        With oCBB
            '设置新增命令的标题
            .Caption = "新增命令"
            '设置新增命令的图形
            .FaceId = 100
        End With
    End With
End Sub

结果如下:

对比上图,可以看出,这次新增的命令看的出来了,但是我们明明设置了命令的标题,为什么没有显示呢?

原来要显示命令的标题还需要通过设置CommandBarButton对象的Style属性才行。

CommandBarButton对象的Style属性可以有如下的值:

msoButtonAutomatic 0 默认
msoButtonCaption 2 只显示文本
msoButtonIcon 1 只显示图形
msoButtonIconAndCaption 3 显示图形和文本,文本在图形的右侧
msoButtonIconAndCaptionBelow 11 显示图形和文本,文本在图形的下方
msoButtonIconAndWrapCaption 7 显示图形和文本,文本在图形的右侧,并且自动换行
msoButtonIconAndWrapCaptionBelow 15 显示图形和文本,文本在图形的下方,并且自动换行
msoButtonWrapCaption 14 只显示文本,居中自动换行

代码如下:

Sub QQ1722187970()
    Dim oCB As CommandBar
    Set oCB = Excel.Application.CommandBars("Worksheet Menu Bar")
    Dim oCBC As CommandBarControl
    Dim oCBB As CommandBarButton
    With oCB
        .Reset
        '给菜单增加一个命令控件
        Set oCBB = .Controls.Add
        With oCBB
            '设置新增命令的标题
            .Caption = "新增命令"
            '设置新增命令的图形
            .FaceId = 100
            '设置显示的样式
            .Style = msoButtonIconAndCaption
        End With
    End With
End Sub

效果如下:

至此,我们熟悉了如何创建一个自定义的菜单命令,如何使其显示出图形和标题。

       

发表评论