使用 VBA 在 MS Word 中添加或删除评论时是否可以触发某些事件?

问题描述

在 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 例程。有用于删除所有评论的事件例程,但没有用于单个评论的事件例程。