Форум по VBA, Excel и Word

Word => Макросы в Word => Тема начата: blacktesta от 04 ноября 2019, 21:37

Название: Word VBA Макросы: Зачем используется (для чего нужен) Range.Duplicate?
Отправлено: blacktesta от 04 ноября 2019, 21:37
Зачем в этом коде используется 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
[свернуть]
Название: Re: Word VBA Макросы: Зачем используется (для чего нужен) Range.Duplicate?
Отправлено: Администратор от 04 ноября 2019, 21:42
Duplicate логично использовать.
Если используется Set, то устанавливается связь с объектом.
Если читать код, то переменная rng - это связь с ячейкой.
Нам нужно изменить rng, а саму ячейку менять не надо.
Поэтому логично работать не с самой ячейкой, а сделать её копию и с этой копией работать.

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

Т.е. Duplicate нужен, чтобы не изменять исходный объект.
Название: Re: Word VBA Макросы: Зачем используется (для чего нужен) Range.Duplicate?
Отправлено: blacktesta от 04 ноября 2019, 21:45
спасибо, пойду осмысливать