问题描述
在 MS Word 中,当向文本选择添加评论时,如果评论包含一些“关键字”,我想更改此选择的背景颜色。 然后很明显,如果评论被删除或不包含“关键字”,我需要将此颜色/突出显示删除到范围文本中。
我设法使用此代码在全局“运行宏”上执行此操作(删除部分除外),但理想情况下,这应该是动态的,并在焦点从注释更改回文档或其他任何内容时激活。
>这是迄今为止我的代码尝试的简化版本:
'
' ColorComments Macro
'
Dim wdCmt As Comment,cat As String,pg As Paragraph
For Each pg In ActiveDocument.Paragraphs
'Trying to reset the background colors before reapplying the active ones but doesn't work
pg.Shading.BackgroundPatternColorIndex = 0
Next
For Each wdCmt In ActiveDocument.Comments
With wdCmt
If Trim(.Range) = "keyword" Then
'Probably a better way to change the background color of the text that would give me access to more colors?
.Scope.Shading.BackgroundPatternColorIndex = 2
Else
'resetting the comment "Scope" color if it doesn't contain the code
.Scope.Shading.BackgroundPatternColorIndex = 0
End If
End With
Next
End Sub
我想我应该使用公共事件或 WindowsSelectionChange
事件,但我在任何地方都找不到关于它的文档。
我对 VBA 几乎没有经验,所以提前感谢您的帮助:)
解决方法
为了使这项工作有效,您需要从 RibbonUI 重新调整这两个控件的用途:
ReviewNewComment
ReviewDeleteComment
这里有几个关于重新利用 RibbonUI 控件的文章的链接 https://gregmaxey.com/word_tip_pages/repurpose_user_interface_controls.html https://www.experts-exchange.com/articles/21499/Intercepting-Office-Ribbon-Control-Events-with-VBA-using-Repurposing-Commands.html
在以前的 Word 版本中,我不记得看到您尝试使用哪个版本,VBA 解决方案可以访问以下事件例程:
Sub InsertNewComment()
'
' InsertNewComment Macro
' Insert comment (includes menu)
'
End Sub
即使直接从 VBA 调用此例程仍然有效,但在当今版本的 Word 中,RibbonUI 已不再使用此例程。我知道这是因为我尝试使用子例程捕获事件但没有成功。
通过单击 RibbonUI 上的“插入墨迹注释”来调用以下 VBA 例程。
Sub InsertInkComment()
'
' InsertInkComment Macro
' Insert ink comment
'
Selection.Comments.Add Range:=Selection.Range
End Sub
为什么这个有效而另一个无效,这是一个谜,这就是为什么我事先说你必须设置 RibbonUI 并重新调整其用途,特别是对于常规评论。
至于捕获 Delete Comment 事件,我没有找到 DeleteComment VBA 例程。有用于删除所有评论的事件例程,但没有用于单个评论的事件例程。