如何在功能区中用户创建的选项卡中访问特定控件?



我在使用 VBA 访问 MS Word 功能区中的特定按钮时遇到问题。到目前为止,我几乎没有代码,因为无论我在哪里搜索,在谷歌上使用什么字符串,互联网上都想出了bupkes。我知道我需要使用CommandBars("Ribbon")访问功能区本身,但是当我尝试循环访问CommandBars("Ribbon")中的所有控件时,它总共有一个控件。什么。。。?整个功能区中只有一个控件?你离开了你的摇杆,VBA。

我运行此代码以获取控件列表:

Dim Counter As Integer
For Counter = 1 To CommandBars("Ribbon").Controls.Count
Debug.Print CommandBars("Ribbon").Controls(Counter).TooltipText
Next Counter

而且,奇怪的是,我只得到一个控件,工具提示文本是"Tas&k Pane"。(从 Word 本身和 VBA 窗口运行宏时,我得到了这个。

有谁知道如何访问功能区中的特定用户定义选项卡,以便我可以访问特定控件的读取属性?

根据设计,无法通过 VBA 对用户定义的功能区控件进行寻址。做出这种设计决策的原因是,在工具栏/命令栏时代(Word 2007 之前),太多的"加载项"正在颠覆这些,因此 Office 应用程序无法按照人们期望的方式工作 - Microsoft通常归咎于"错误软件"。

因此,功能区 XML 是"沙盒"的。CommandBars对象模型中有一些有限的命令,这些命令允许检查内置功能区控件是否可见或已启用,并允许执行该控件。但这不会扩展到自定义功能区控件 - 这些控件对于定义它们的项目来说是"私有的"。

如果功能区自定义项的"所有者"有意识地启用"共享"任何功能区控件(通过使用idQ),则可以通过并行运行的另一个功能区 XML 解决方案访问它们(使用"回调")。但这是唯一的例外。

CommandBars属性返回一个CommandBars对象,该对象表示Microsoft Word 命令栏。此属性与Application对象一起使用,返回应用程序可用的内置命令栏和自定义命令栏集。但它不包含功能区控件。如果需要对命令栏控件执行任何操作,可以使用命令栏方法。例如,可以检查特定控件是否可见或不传递内置控件的idMso名称:

Application.CommandBars.GetVisibleMso("Bold")

以下系列文章中的流畅 UI(也称为功能区 UI):

  • 为开发人员自定义 2007 Office Fluent 功能区(第 1 部分,共 3 部分)
  • 为开发人员自定义 2007 Office Fluent 功能区(第 2 部分,共 3 部分)
  • 为开发人员自定义 2007 Office Fluent 功能区(第 3 部分,共 3 部分)

最新更新