Word VBA:在选择更改时使 IRibbon 无效(实现粗体切换按钮的行为)

Posted

技术标签:

【中文标题】Word VBA:在选择更改时使 IRibbon 无效(实现粗体切换按钮的行为)【英文标题】:Word VBA: Invalidate IRibbon on Selection Change (To Achieve the behavior of Bold Toggle Button) 【发布时间】:2017-01-26 13:38:03 【问题描述】:

我想实现与粗体按钮一样的切换按钮的相同行为。功能区具有用于分配样式的切换按钮。例如,当用户将光标放在样式为“Custom_Heading_1”的段落中时,“Custom_Heading_1”的切换按钮应将按下状态设置为 true。

这里是一个简短的代码示例:

XML:

<customUI 
xmlns="http://schemas.microsoft.com/office/2009/07/customui" 
onLoad="InitializeRibbon">
...
<toggleButton id="customToggle" label="Ü1" 
              onAction="FormatControl" getPressed="IsPressed" />
...

VBA:

Option Explicit

Dim oRibbon As IRibbonUI

Private Sub InitializeRibbon(ByVal Ribbon As IRibbonUI)
    Set oRibbon = Ribbon
End Sub

Private Sub IsPressed(ByVal control As IRibbonControl, ByRef pressed)

    If Selection.Style = "Custom_Heading_1" Then
        pressed = True
    End If

End Sub


Private Sub ResetTest()
    oRibbon.InvalidateControl ("customToggle")
End Sub

这工作正常,但现在我必须在光标移动或放置在段落等时触发 ResetTest()。

我认为每次更改选择时我都需要选择对象的事件来调用 ResetTest()。有什么想法吗?

提前致谢, 托马斯

【问题讨论】:

【参考方案1】:

Word.Application 有一些事件,可以通过定义一个处理事件的类模块来使用。选择移动时触发的事件是“WindowSelectionChange”。

clsEvents:

Public WithEvents evEvents As Word.Application

Private Sub evEvents_WindowSelectionChange(ByVal Sel As Selection)

    oRibbon.Invalidate

End Sub

比我在启动 Word 时必须创建一个实例。这可以在 AutoExec 模块中使用名为 Main() 的 Sub 或在 ThisDocument 中使用名为 AutoExec 的 Sub 来完成。

模块自动执行:

Dim oApp As New clsEvents

Sub Main()

    Set oApp.evEvents = Word.Application

End Sub

oRibbon 变量是公共的并且可以在类模块的 Sub 内部访问这一事实不是很好。但它有效。

【讨论】:

以上是关于Word VBA:在选择更改时使 IRibbon 无效(实现粗体切换按钮的行为)的主要内容,如果未能解决你的问题,请参考以下文章

MS Word 2013 从 vba 更改图表数据

在EXCEL中用VBA操作WORD表格:怎样选择一个表格中除第一行以外的任意连续行(比如第2到4行)?

Word VBA - 通过样式应用备用字体颜色不适用于已应用直接格式(字体颜色)的文本

有没有办法使用 VBA 以编程方式更改 Word 2010 中 CanvasShapes 的 Z 顺序位置?

怎样在Word中用VBA操作表格

vba如何写word