Семейства объектов

Семейства объектов. Существует возможность иметь несколько экземпляров одного и того же объекта Visual Basic. Все вместе эти экземпляры образуют семейство collection.

Конкретный экземпляр в семействе объектов идентифицируется с помощью имени или индекса. Например, семейством всех листов в книге является Sheets Конкретный экземпляр листа можно указать следующим образом Sheets 3 Третий лист в семействе. или Sheets Итоги Именованный экземпляр листа.

В Visual Basic каждый элемент семейства имеет собственный индекс, но интервал значений индексов не обязательно непрерывен, и поэтому при удалении одного экземпляра объекта индексы других экземпляров могут остаться прежними. Например, если удалить Sheets 3 из семейства 12 листов книги, нет гарантии, что Excel перенумерует Sheets 4 и т. д. до Sheets 12, чтобы заполнить разрыв. В других языках программирования для многократного повторения операции можно использовать конструкцию For Next, например For n 1 to 12 Активизация каждого листа Sheets n. Activate Next n Если выполнить эти инструкции после удаления листа Sheets 3, то Visual Basic выведет сообщение об ошибке и остановит макрос, поскольку Sheets 3 больше не существует.

Для таких ситуаций Visual Basic предлагает конструкцию For Each Next, которая применяет ряд инструкций к каждому элементу семейства без учета их индексов. Например, предположим, что нужно присвоить имя каждому листу активной книги, вводя в ячейку А1 значения Sheet 1, Sheet 2 и т. д. Так как в общем случае количество листов в книге может быть неизвестно, можно воспользоваться следующим макросом Visual Basic Sub EnterSheetNum n 0 For Each Sheet In Sheets n n 1 Sheet. Activate Range A1, Select ActiveCell. FormulaR1C1 Sheet Str n Next End Sub Можно установить свойство объекта, содержащегося в другом объекте, задав подобъект в виде последовательности вложенных объектов.

Например, чтобы макрос EnterSheetNum выполнялся быстрее, можно установить свойство FormulaR1C1 ячейки А1 каждого листа без его предварительной активизации.

Для этого достаточно заменить следующие инструкции Sheet. Activate Range A1. Select ActiveCell. FormulaR1C1 Sheet Str n одной строкой Sheet. Range A1. FormulaR1C1 Sheet Str n Последняя инструкция означает Установить свойство FormulaR1C1 ячейки А1 листа равным Sheet n. Основной результат этого изменения заключается в том, что новый макрос выполняется быстрее, поскольку он не заставляет Excel активизировать каждый лист перед вводом текста. 2.8