通过宏模拟单击自定义功能区项目

Simulate, through a macro, a click on a custom ribbon item

我看过类似的问题,但没有找到我的具体问题的答案。

我有一个带有自定义按钮的自定义功能区选项卡。他们的目的是在文档中各插入一个QuickPart。

因为我要插入很多不同的 QuickPart,所以我不想为每个都创建一个宏。

因此,当用户 select 功能区中的项目时,将调用单个宏,它使用 control.ID 属性 插入适当的 QuickPart。

一切正常,但现在我被要求为其中一些功能区项目添加键盘快捷键。

这是我到目前为止所拥有的:

  1. 插入QuickParts的宏:

    Sub TalkToRibbon(control As IRibbonControl)    
        ...    
    End Sub
    
  2. 按下快捷方式时,触发此宏:

    Sub interac_obj_cart()    
        shortcut = "interac_obj_cart"
        TalkToRibbon(shortcut)
    End Sub
    

无论我将“快捷方式”定义为 String 还是 IRibbonControl,我都会收到错误消息(尽管有所不同)。我觉得我缺少了什么。预先感谢您的帮助

使用功能区控件的按键提示而不是发明新东西。 KeyTips 是当您按下 ALT 键时出现在功能区上的键盘快捷键。您可以使用 keytipgetKeytip 属性分配您自己的 KeyTipsgetKeyTip 回调具有以下签名:

C#: string GetKeytip(IRibbonControl control)

VBA: Sub GetKeytip (control As IRibbonControl, ByRef label)

C++: HRESULT GetKeytip ([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrKeytip)

Visual Basic: Function GetKeytip (control As IRibbonControl) As String

当用户按下 ALT 键加一到三个字母时显示 KeyTip

否则,您需要通过将处理程序提取到一个单独的函数中来重构您的代码,该函数接受控件 ID 并且可以由传递控件 ID 的其他人调用。例如:

Sub TalkToRibbon(control As IRibbonControl)    
    Call EventHandlerWhichAcceptsID  control.ID   
End Sub

然后您的键盘快捷键处理程序也可以调用它。

为什么不直接将键盘快捷键附加到构建块或宏本身?

我假设您所说的快速零件指的是构建基块,也许在快速零件库中。您可以直接为它们分配键盘快捷键,并将它们存储在包含构建块的同一模板中。您还可以为宏指定键盘快捷键。

构建基块、宏和快捷方式不应存储在构建 Blocks.dotx 模板中,而应存储在文档或全局模板中。

如果您需要更多关于这些概念的信息,这里有我的文章链接:

这确实与它们在您的自定义功能区上的位置无关。

您还可以在功能区上放置自定义构建块库菜单。

这里是Greg Maxey's page on building blocks gallery controls。这些也可以放在QAT上。