在 Microsoft Word 中,是否可以扩展选定的注释区域?这意味着您之前已指定注释,但现在想要扩展该注释的选择范围。
例如,为了让下面的评论起作用,我必须删除该评论,然后添加新评论。我宁愿扩大选择范围。
答案1
我刚刚知道该如何expand or shrink the selected comment area
无需编写宏或剪切/复制/删除注释(在 Word 10 中):
转至草稿视图。您将在“句柄”{红色括号} 之间看到您的评论,旁边有评论符号 [方括号内]。
要扩大/缩小注释区域,请在手柄内插入(剪切和粘贴)新文本。
例子: 北海[AB1]今天很冷.现在将附加文本移到句柄内。
例子: 今天北海很冷[AB1],这样你就扩大了评论区域(如果你将文本移出评论区域,评论区域就会缩小)。
PS:} 之前的空格是必需的,如果没有它,您将无法执行此操作。
希望能帮助到你
答案2
我通常只是将评论文本复制到剪贴板,删除该评论,然后为正确的文本创建新评论。
下面的宏可以自动完成这个操作:
Sub enlarge_comment()
'assumes that the current selection contains just one comment!
Dim newrange As Range
Set newrange = Selection.Range
Selection.Comments(1).Range.Copy 'copy text of old comment
Selection.Comments.Add Range:=newrange 'create new comment
Selection.Paste 'add text to new comment
newrange.Comments(1).Delete 'delete old comment
End Sub
我使用剪贴板来确保注释的格式(例如不同的字体)不会丢失,但我还没有测试是否有更简单的方法。结果是这样的:
当然,您可能想要添加某种错误处理;如果所选区域中有多个注释,那么它将采用 Word 认为是第一个的注释。此外,您的新选择需要完全包含旧选择;否则Selection.Comments
为空并Selection.Comments(1).Range.Copy
失败。
答案3
这是我基于上述 Jonas Heidelberg 的解决方案提出的相当完整的解决方案:
Sub ChangeCommentSpan()
'
'If the current selection range is larger than the comment its spans, this macro expands the document-scope
'range of the comment to encompass the entire current selection's range. Alternatively, if the current
'selection range is smaller than the comment spanned by it, this macro reduces the document-scope range of
'the comment to encompass only the current selection's range.
'
'AUTHOR: Peter Straton
'
'CREDIT: Derived from Jonas Heidelberg's solution at:
' https://superuser.com/questions/159765/expand-comment-select-in-microsoft-word
'
'*************************************************************************************************************
Const ExpandUnits As Integer = wdWord 'Alternatively, could use wdCharacter
Dim CheckRng
Dim DocTextSelRng As Range
Dim EndBackward As Boolean
Dim EndForward As Boolean
Dim Forward As Boolean
Dim OrigCmnt As Comment
Dim MovedEndUnits As Long
Dim MovedStartUnits As Long
'First check whether the selection includes (overlaps onto) one and only one comment.
With Selection
If .Comments.Count > 1 Then
MsgBox "The selected range includes more than one Word comment. Unable to determine which " & _
"comment is to be expanded.", vbOKOnly + vbCritical, "SELECTION ERROR"
Exit Sub
End If
Set DocTextSelRng = .Range.Duplicate 'Capture the current Selection range (the document-text range)
'because the Selection object's range will change to be the new
'comment's (internal) Text range when the new comment is added.
End With
'Sometimes the user fails to span the current-comment's scope range (or span the whole comment) with their
'manual selection, resulting in the targeted comment being undetectable using the Selection object's range.
'So check for that case using a copy of the selected range and, if necessary, progressively expand it one
'character at a time, alternating left and then right, until at least one overlapping comment is found.
Set CheckRng = DocTextSelRng.Duplicate
With CheckRng
While .Comments.Count = 0
If Forward Then
If Not EndForward Then
MovedEndUnits = .MoveEnd(ExpandUnits, 1)
EndForward = (MovedEndUnits = 0)
End If
Forward = EndBackward
Else
If Not EndBackward Then
MovedStartUnits = .MoveStart(ExpandUnits, -1)
EndBackward = (MovedStartUnits = 0)
End If
Forward = Not EndForward
End If
If EndForward And EndBackward Then
'The range was expanded to include the whole document text and no comment was found.
MsgBox "The active document includes no Comments.", vbOKOnly + vbCritical, "NO COMMENTS FOUND"
Exit Sub
End If
Wend
Set OrigCmnt = .Comments(1)
'Found the nearest Comment so check whether it overlaps the originally selected range.
'IMPORANT: Start and End values are insertion-point locations, not character positions. So the Start
'property of a Comment object's Scope range may be the same value as the End value of the character
'immediately to its left and the End property of a Comment Scope range may be the same value as the
'Start value of the character immediately to its right. Therefore, the following conditional test
'must use "<=" and ">=", respectively, not just "<" and ">":
If (DocTextSelRng.End <= OrigCmnt.Scope.Start) Or (DocTextSelRng.Start >= OrigCmnt.Scope.End) Then
'The found Comment does not overlap onto the original selected range, so inform user and exit.
MsgBox "The selected range includes no Comments.", vbOKOnly + vbCritical, "SELECTION ERROR"
Exit Sub
End If
End With
'Expand (or reduce) the comment to include all of (or only) the selected range.
OrigCmnt.Range.Copy 'Copy the (internal) text of the existing comment
DocTextSelRng.Comments.Add Range:=DocTextSelRng 'Create a new comment that spans the selected document scope
'Paste the original Comment's (internal) text and its formatting as the new Comment's (internal) text
Selection.Paste 'NOTE: This is the now-current Selection which is the new Comment's (internal) text
'range (not the Comment's scope range, which spans the document-text it applies to).
OrigCmnt.Delete 'Delete the original comment
'Finally, close the Comments pane that was automatically opened by the Comments.Add method call, above.
If WordBasic.ViewAnnotations = -1 Then
WordBasic.ViewAnnotations 0
End If
End Sub