Concept
As Timothy Rylatt notes, Selection objects in VBA are unique and of reference type, which means that setting a new Selection object changes the previous Selection to.
As in my code below. if it was written as "cln.Add Selection", then the "cln.Add Selection" obtained in the next loop will affect the previous element added to the Collection. That is, two elements, although two, but in fact, and the object is actually one ONLY.
So it is not possible to co-exist two Selection objects in a Word document (i.e., they are not selected consecutively, or in the case of multiple selections). Therefore, if you want to make consistent processing of the collected Range objects, you can use the following way of thinking instead, although you can not achieve the result of selecting objects in different document locations, but still can deal with different parts of the document at the same time:
Rem Find All Yellow and Chage them to Green
Sub FindAllYellowChage2Green()
Dim cln As New VBA.Collection
Selection.HomeKey wdStory
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.MatchWildcards = False
.Forward = True
.Wrap = wdFindStop ' wdFindContinue
.Highlight = True
.Execute
Do Until Not .Found
If Selection.Range.HighlightColorIndex = wdYellow Then
Rem Collect Selection.Range objects
cln.Add Selection.Range
End If
.Execute
Loop
Rem Process the collected Range objects
Dim e
For Each e In cln
e.Select
e.HighlightColorIndex = wdBrightGreen 'wdGreen
'e.Range.HighlightColorIndex = wdBrightGreen 'wdGreen
Next e
End With
End Sub