2

我想通过 Word 2007 中的 VBA 宏以编程方式显示右键单击上下文菜单。

这将允许我将宏映射到热键并在不离开键盘的情况下显示具有焦点的菜单。我假设这将通过Application对象的CommandBars集合来完成,按照以下方式访问:

Application.CommandBars.'access appropriate mehod or member here'

但我没有看到任何似乎会显示上下文菜单的方法或成员。是否可以通过 VBA 宏来实现这一点?

编辑:

正如建议的那样,我遍历每个 CommandBar 并获取名称和索引以尝试找出要使用的 CommandBar 索引:

Sub C_RightClick()
'Activates right-click context menu
'

Dim cbar As Office.CommandBar
Dim cbarIndex As Integer
Dim testString As String
Dim cBarsArray(0 To 500)
Dim arrayCounter As Integer

testString = ""
arrayCounter = 1

For Each cbar In CommandBars
    'TRUE if right-click
    'If LCase(cbar.Name) = 'right-click' Then
    '    cbarIndex = cbar.Index
    'End If

    testString = testString + CStr(cbar.Index) + " " + cbar.Name + " " + CStr(cbar.Type = msoBarTypePopup) + vbCrLf
    Debug.Print cbar.Name; " "; cbar.Type = msoBarTypePopup

    'Add name to array and increment counter
    cBarsArray(arrayCounter) = cbar.Name
    arrayCounter = arrayCounter + 1

Next cbar

MsgBox testString

'Application.CommandBars(cbarIndex).ShowPopup


End Sub

但是,我没有看到任何标题为“右键单击”的内容。我认为它可能是 'Standard' ,其索引为 1,但当我尝试访问它时收到错误消息。

如果有人知道选择选项卡时出现在 Word 2007 中的默认右键单击上下文菜单的正确名称Home,我们将不胜感激。否则,我会将这个问题提交给 SuperUser 并自行研究。感谢您的帮助。

4

1 回答 1

1

尝试类似:

Application.CommandBars(100).ShowPopup

参数可以是命令栏索引或标题。

要在命令栏上执行特定命令,请尝试以下操作:

Application.CommandBars(100).Controls("Paste").Execute

要将所有命令栏的列表打印到即时窗口:

Sub test()
Dim cbar As Office.CommandBar
For Each cbar In CommandBars
    'TRUE if right-click
    Debug.Print cbar.Name; " "; cbar.Type = msoBarTypePopup
Next cbar
End Sub

编辑: 在回答您关于通过 HOME 选项卡获得的右键单击菜单的问题时,我认为它是与 CommandBar 不同类型的控件。

为了更好地了解右键菜单名称和索引,我稍微修改了上面的代码。现在尝试将控件添加到每个右键单击菜单。添加的控件的标题是菜单的名称和索引。这些控件是临时的 - 下次打开 Word 时它们就会消失。

Sub test()
Dim cbar As Office.CommandBar
Dim ctl As Office.CommandBarControl
For Each cbar In Application.CommandBars
    With cbar
        On Error Resume Next
        'this will delete any customizations
        .Reset
        Set ctl = .Controls.Add(Type:=msoControlButton, Temporary:=True)
        ctl.Caption = .Index & " - " & cbar.Name
        Debug.Print "Name: "; cbar.Name; " Right-click: "; cbar.Type = msoBarTypePopup; " Error descr: "; Err.Description
        On Error GoTo 0
    End With
Next cbar
End Sub

如果有错误消息,它还会将错误消息打印到即时窗口。

我认为您不会对“主页”上下文菜单感到满意的原因是没有添加任何控件。这是添加了控件的菜单图片:

在此处输入图像描述

于 2013-03-05T21:19:58.307 回答