使用VBA在MS Word中添加或删除评论时是否可以触发某些事件?
Is it possible to trigger some event when a comment is added or deleted in MS Word using VBA?
在 MS Word 中,当对文本选择添加注释时,如果注释包含某些“关键字”,我想更改此选择的背景颜色。
那么显然,如果评论被删除或不包含“关键字”,我需要将此 color/highlight 删除到范围文本。
我设法在全局 'run macro' 上使用此代码(删除部分除外),但理想情况下,这应该是动态的,并在焦点从评论返回到文档或其他任何内容时激活.
这是迄今为止我的代码尝试的简化版本:
'
' 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
我想我应该使用 pulic 事件或 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例程。有用于删除所有评论的事件例程,但 none 用于单个评论。
在 MS Word 中,当对文本选择添加注释时,如果注释包含某些“关键字”,我想更改此选择的背景颜色。 那么显然,如果评论被删除或不包含“关键字”,我需要将此 color/highlight 删除到范围文本。
我设法在全局 'run macro' 上使用此代码(删除部分除外),但理想情况下,这应该是动态的,并在焦点从评论返回到文档或其他任何内容时激活.
这是迄今为止我的代码尝试的简化版本:
'
' 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
我想我应该使用 pulic 事件或 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例程。有用于删除所有评论的事件例程,但 none 用于单个评论。