Vba 在Options.DefaultHighlightColorIndex更改后刷新内置功能区按钮并避免退出";文本突出显示颜色“;
我正在努力实现的目标:Vba 在Options.DefaultHighlightColorIndex更改后刷新内置功能区按钮并避免退出";文本突出显示颜色“;,vba,ms-word,Vba,Ms Word,我正在努力实现的目标: Sub cycleThroughSomeDefaultHighlightColorIndexOptions() Dim zeNewColor As Long Select Case Options.DefaultHighlightColorIndex Case wdYellow: zeNewColor = wdBrightGreen Case wdBrightGreen: zeNewColor = wdTurquoise
Sub cycleThroughSomeDefaultHighlightColorIndexOptions()
Dim zeNewColor As Long
Select Case Options.DefaultHighlightColorIndex
Case wdYellow: zeNewColor = wdBrightGreen
Case wdBrightGreen: zeNewColor = wdTurquoise
Case wdTurquoise: zeNewColor = wdPink
Case wdBlue: zeNewColor = wdRed
Case wdRed: zeNewColor = wdYellow
Case Else: zeNewColor = wdYellow
End Select
Application.Options.DefaultHighlightColorIndex = zeNewColor
End Sub
- 通过键绑定激活文本高亮显示颜色命令(不是问题)
- 通过相同的键绑定循环5种默认文本高亮显示颜色(或仅高亮显示所选内容,具体取决于所选内容。在下面的函数外选中类型)
- 在相应按钮(内置功能区)中显示当前颜色
Sub cycleThroughSomeDefaultHighlightColorIndexOptions()
Dim zeNewColor As Long
Select Case Options.DefaultHighlightColorIndex
Case wdYellow: zeNewColor = wdBrightGreen
Case wdBrightGreen: zeNewColor = wdTurquoise
Case wdTurquoise: zeNewColor = wdPink
Case wdBlue: zeNewColor = wdRed
Case wdRed: zeNewColor = wdYellow
Case Else: zeNewColor = wdYellow
End Select
Application.Options.DefaultHighlightColorIndex = zeNewColor
End Sub
不会引发任何错误,会更改Application.Options.DefaultHighlightColorIndex 但不更新/显示相应(内置功能区主选项卡)按钮上新设置的颜色 然后退出文本高亮显示颜色模式
IRibbonUI.invalidateControl控件ID
s的列表:
因此,在创建一个隐藏的自定义ribbon并在onLoad上为其获取句柄后,我可以zeWdRibbon.InvalidateControlMso“TextHighlightColorPicker”
而不会引发任何错误
但它也不会改变任何事情
有没有可能,微软只是在没有检查Application.Options.DefaultHighlightColorIndex的情况下获取默认图像MSO“TextHighlightColorPicker”(黄色),或者我遗漏了什么 我每次都会这样做
gRibbon.Invalidate
#If VBA7 Then
Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
#Else
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
#End If
Public gRibbon As IRibbonUI
#If VBA7 Then
Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
#Else
Function GetRibbon(ByVal lRibbonPointer As Long) As Object
#End If
Dim objRibbon As Object
Call CopyMemory(objRibbon, lRibbonPointer, LenB(lRibbonPointer))
Set GetRibbon = objRibbon
Set objRibbon = Nothing
End Function
Public Sub OnRibbonLoad(ribbon As IRibbonUI)
Set gRibbon = ribbon
'SAVE SETTINGS TO REGISTRY
SaveSetting "POP", "RIBBON", "ribbonPointer", ObjPtr(gRibbon)
End Sub
Public Sub OnActionButton(control As IRibbonControl)
If gRibbon Is Nothing Then
Set gRibbon = GetRibbon(GetSetting("POP", "RIBBON", "ribbonPointer"))
End If
On Error Resume Next
gRibbon.Invalidate
On Error GoTo 0
End Sub
查看
IRibbonUI.Invaludate
-如果您正在尝试刷新功能区,它可能就是您想要的。我相信您可以在本文中找到您的答案,以及VBA代码(运行表单),当我测试您的代码片段时,我得到了所需对象
。请发布复制该问题所需的所有内容。-->显示旧颜色的不仅仅是GUI。如果我更改它,然后单击按钮,那么该值将更改回默认值7。因此,功能区似乎用存储在别处的内容覆盖了该值。Application.ScreenRefresh
将是答案。这对于保留公共功能区对象非常有用,在发生未处理的错误后,该对象将被设置为零,但我这里的问题似乎是,还有第二个,未记录类型的Application.Options.DefaultHighlightColorIndex.Set或returns用于突出显示用突出显示按钮格式化的文本的颜色Application.Options.DefaultHighlightColorIndex=wdColorIndex.wdGreen
Application.Options.DefaultHighlightColorIndex被IRIBONUI.invalidate和Application.CommandBars.ExecuteMso“TextHighlightColorPicker”(以及相应的按钮)完全忽略因此,必须有一个不同的属性,我直到现在才找到。@blub如果此GetRibbon函数实际上为您提供了当前功能区的句柄,那么您应该能够直接修改功能区。