Word VBA Макросы: Зачем используется (для чего нужен) Range.Duplicate?

Автор blacktesta, 04 ноября 2019, 21:37

blacktesta

Зачем в этом коде используется Duplicate и зачем вообще нужно использовать Duplicate?

Код
Sub Макрос()
   
    Dim tbl As Table, rng As Range
   
   
    ' Присваиваем первой таблице имя "tbl", чтобы было удобно читать и писать код.
    Set tbl = ActiveDocument.Tables(1)
    ' Присваиваем имя "rng" содержимому ячейки.
    Set rng = tbl.Cell(1, 1).Range.Duplicate
    ' Убираем с конца символ-кружок.
    rng.MoveEnd Unit:=wdCharacter, Count:=-1
   
End Sub
[свернуть]

Администратор

Duplicate логично использовать.
Если используется Set, то устанавливается связь с объектом.
Если читать код, то переменная rng - это связь с ячейкой.
Нам нужно изменить rng, а саму ячейку менять не надо.
Поэтому логично работать не с самой ячейкой, а сделать её копию и с этой копией работать.

В данном случае нет необходимости использовать Duplicate, т.к. ячейка не будет изменена при изменении rng, но хуже от этого не будет - ни на что это не влияет (может быть только на скорость работы макроса, если надо работать с большим количеством ячеек).

Т.е. Duplicate нужен, чтобы не изменять исходный объект.

blacktesta