10

In Microsoft Word is it possible to expand the selected comment area? Meaning that you've previously specified a comment but now want to expand the selection of that comment.

As an example to get the below comment to work I had to remove the comment and then add a new one. I would have rather just expanded the selection.

alt text

0

3 Answers 3

3

I just found out how to expand or shrink the selected comment area without writing a macro or cutting/-copying/deleting the comment (In Word 10):

GO TO DRAFT VIEW. You will see your comment between 'handles' {red brackets} with the comment symbol on the side [in square brackets].

To expand/shrink the comment area, INSERT (cutting and pasting) THE NEW TEXT INSIDE the handles.

Example: the {N.Sea }[AB1] is cold today. Now move additional text inside the handle.

Example: the {N.Sea is cold }[AB1] today, this way you have expanded the comment area (if you move text out of it you will shrink it).

PS: the space before the } is necessary, it will not let you do this without it.

Hope it helps

4
  • 2
    This does not provide an answer to the question. To critique or request clarification from an author, leave a comment below their post - you can always comment on your own posts, and once you have sufficient reputation you will be able to comment on any post.
    – Jawa
    Feb 5, 2015 at 13:53
  • Now I have found and answer. Hopefully is useful
    – alex
    Feb 5, 2015 at 15:13
  • This does some very bad things to the underlying structure of the document. While it may work visually it breaks other things.
    – ahsteele
    Feb 16, 2015 at 20:53
  • @ahsteele can you expand on this? What does it break?
    – evn
    May 31, 2019 at 14:11
2

I usually just copy the comment text to the clipboard, delete the comment and then create a new comment for the correct text.

The following macro automates this:

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

I use the clipboard to be sure that formatting of the comment (such as different fonts) do not get lost, but I haven't tested if there is an easier way. The result is this:

screenshot showing before/after of the macro

Of course you might want to add some kind of error handling; if there is more than one comment in the selected region then it will take whatever Word considers to be the first one. Also, your new selection need to completely contain the old selection; otherwise Selection.Comments is empty and Selection.Comments(1).Range.Copy fails.

1

Here's my fairly complete solution, based on Jonas Heidelberg's solution, above:

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
1
  • I wanted to shrink comment selection as well as grow it, and this works great, thank you!
    – Chris Rae
    Nov 6, 2022 at 3:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .