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 无效(实现粗体切换按钮的行为)的主要内容,如果未能解决你的问题,请参考以下文章
在EXCEL中用VBA操作WORD表格:怎样选择一个表格中除第一行以外的任意连续行(比如第2到4行)?
Word VBA - 通过样式应用备用字体颜色不适用于已应用直接格式(字体颜色)的文本