Открыв раздел справки VBA, посвящённый свойству Range, читаем следующую фразу:
When used without an object qualifier, this property is a shortcut for ActiveSheet.Range
Что же, проверим это на деле:
Sub TestRanges()
Dim theRange As Range
Set theRange = ThisWorkbook.Worksheets("Sheet1").Range("B2:B6")
'работает всегда:
Debug.Print Range(theRange.Range("A1"), theRange.Range("A3")).Address
'работает, только если активен рабочий лист, содержащий theRange:
Debug.Print ActiveSheet.Range(theRange.Range("A1"), theRange.Range("A3")).Address
End Sub
Оказывается, что свойство Range "умнее", чем кажется на первый взгляд. Ссылка на ActiveSheet.Range происходит только в том случае, если угловые ячейки диапазона (то бишь Cell1 и Cell2) принадлежат объекту ActiveSheet, иначе Range возвращает ссылку на диапазон соответственного рабочего листа, не генерируя ошибки. Таким образом, Range без указания объекта умеет анализировать передаваемые параметры и ссылаться на активный лист только при необходимости.
Ответить
|