【问题标题】:Word VBA: Invalidate IRibbon on Selection Change (To Achieve the behavior of Bold Toggle Button)Word VBA:在选择更改时使 IRibbon 无效(实现粗体切换按钮的行为)
【发布时间】: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()。有什么想法吗?

提前致谢, 托马斯

【问题讨论】:

    标签: vba ms-word


    【解决方案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 内部访问这一事实不是很好。但它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      相关资源
      最近更新 更多