Трюк №83. Использование кодовых имен для ссылки на листы в рабочих книгах Excel
Иногда бывает нужно создать макрос, который будет работать, даже если имена листов, на которые он ссылается, изменятся.
Если в Excel записан макрос, который ссылается на определенный лист в рабочей книге, известно, что код будет работать, только если имя листа (или листов) останется тем же. Например, если имя рабочего листа — Budget, а код макроса содержит ссылку Лист(«Budget»).Select, при изменении имени рабочего листа макрос перестанет работать. Причина в том, что утилита записи макроса генерирует код, основываясь на имени ярлычка листа или на имени, которое вы видите при работе в Excel.
Для преодоления ограничения_есть два варианта. Первый подразумевает использование порядковых номеров. Порядковый номер листа определяется его позицией в рабочей книге. У самого левого листа порядковый номер всегда равен 1, у следующего листа справа — 2 и т. д. Excel VBА позволяет указывать любой лист при помощи его порядкового номера, но, к сожалению, Excel не использует этот метод при записи макроса.
Кроме того, хотя использование порядкового номера листа, например, Лист(3). Select — это гораздо лучший вариант, чем Лист(«Budget»).Select, позиция листа в рабочей книге может измениться, если вы добавите, удалите или переместите листы.
Вместо того чтобы использовать порядковые номера, находчивые программисты на VBA используют кодовые имена (CodeNames). Каждому листу рабочей книги присваивается уникальное кодовое имя, которое не изменяется даже при перемещении или переименовании листа или добавлении новых листов. Кодовое имя листа можно увидеть только в VBE — выберите команду Разработчик → Редактор Visual Basic (Developer → Visual Basic Editor) или нажмите сочетание клавиш Alt/Option+Fll, — открыв окно Project: выберите команду View → Project Explorer или нажмите сочетание клавиш Ctrl+R.
На рис. 7.1 кодовое имя листа с именем вкладки Budget — это Sheet3. Кодовое имя листа — это всегда имя, которое выводится в круглых скобках в окне Project Explorer. В рабочей книге на этот лист можно ссылаться при помощи кода VBA, указав команду Sheet3.Select, в противоположность Лист(«Budget»).Select или Лист(3).Select.
Если в рабочей книге уже много кода VBA, записанного или написанного в VBE, и в нем не используются кодовые имена, код можно изменить на уровне проекта (то есть весь код во всех модулях рабочей книги), выбрав в VBE команду Edit → Replace.
Единственная ситуация, когда невозможно использовать кодовые имена, — при ссылке на листы, находящиеся в других рабочих книгах, а не в книге, где находится сам код.