Ребята, всем привет! 👋
Продолжаем изучать VBA Excel. И сегодня поговорим об активации и выборе листа в Excel.
✨ А прежде, чем мы начнем 📣 напомню, теперь у нас на канале есть удобный рубрикатор 👉 Быстрый поиск решения. Путеводитель по Excel, а все видео 📽 предыдущих уроков доступны и на YouTube.
Когда мы пишем код VBA, так или иначе нам приходиться связать разные листы в разных формах.
Активация листа означает выбор этого листа. Для активации или выбора листа в Excel мы вручную переходим на лист и нажимаем на вкладку «Лист».
Но как поступить если требуется автоматически выбрать или активировать лист для дальнейшего использования в коде VBA?
Существуют различные способы активации листа в VBA. Рассмотрим некоторые примеры как активировать лист в Excel VBA.
▶️ Пример № 1. Метод Activate Worksheet
Данный метод делает текущий лист активным листом.
Вы можете использовать либо имя рабочего листа, либо номер рабочего листа/ Мы рекомендуем использовать имя листа.
Например,
- Активируем лист с именем "Штатное расписание" :
- Активируем первый рабочий лист в активной рабочей книге
🔔 где Activate - это метод объекта Workbook, который используется для превращения текущего листа в активный лист.
▶️ Пример 2. Объект VBA ActiveSheet
Для активации листа мы также можем ссылаться на текущий активированный рабочий лист, используя объект Excel VBA ActiveSheet.
Объект ActiveSheet VBA очень полезен при автоматизации задач и работе с текущим активным листом в окне активной книги. Если вы игнорируете объект ActiveSheet при ссылке на любой другой объект, например диапазон или диаграмму, VBA будет рассматривать ActiveSheet как текущий лист по умолчанию.
Например, оба приведенных ниже макроса будут ссылаться на активный лист:
▶️ Пример 3. Set ActiveSheet
Хорошей практикой является ссылка на активный лист в Excel VBA, задав ее в переменной.
Мы можем назначить и установить ActiveSheet объекту и ссылаться на него в любом месте процедуры.
▶️ Пример 4. Наилучшая практика
Для активации листа мы рекомендуем использовать имя рабочего листа, а не номер рабочего листа.
Лучше всего назначить рабочий лист объекту, а затем выполнить любую задачу, которую вы хотите выполнить с этим конкретным объектом рабочего листа.
🔔 При работе с несколькими рабочими листами вы должны ссылаться на рабочий лист с точным именем рабочего листа, чтобы правильно обновить свои данные на целевом рабочем листе. Для этого создайте объект Worksheet/Sheets и при необходимости ссылайтесь на лист с объектом, например:
🔔 Как видите, Вам не нужно активировать рабочий лист для работы с каким-либо рабочим листом. Приведенный выше код скопирует значение с ячейки А1 листа 2 и вставит его в ячейку А1 листа 1
🔲 В заключении...Worksheets VS Sheets
Возможно вы заметили, что приведенном выше коде в одном случае использован объект Worksheet, а в другом Sheets.
Опережая ваш вопрос, почему так, и в чем же разница Worksheets и Sheets, отвечаем:
Каждая рабочая книга состоит из листов. Совокупность всех листов рабочей книги задается объектом Sheets. Этот объект, задающий коллекцию, представляет все листы рабочей книги независимо от их типа. При программной работе часто полезно иметь дело с подколлекциями коллекции Sheets, содержащими листы только одного определенного типа. Основных типов листов в рабочей книге два - WorkSheet — обычные листы и Chart — листы диаграмм, соответственно имеются и две коллекции для этих типов листов.
Коллекция WorkSheets является частью коллекции Sheets, - ее элементами являются объекты класса WorkSheet, представляющие рабочие листы - листы электронных таблиц.
Например, у нас есть книга в которой 3 листа, причем лист1 и лист3 - это обычные листы, а лист2 - это лист диаграмм:
➡️ А теперь проведем тест...
Тест №1... Выполним следующий макрос:
Т.к. мы использовали номер в качестве ссылки на рабочий лист Sheets(2).Select означает, что он выберет второй рабочий лист книги:
Т.е все 🆗 мы так и хотели.
Но, напомним, у нас в книге два типа листов: один — обычные листы, а другой — листы диаграмм.
А потому тест №2... Выполним следующий код:
Где мы так же использовали номер в качестве ссылки на рабочий лист, но в этом случае Worksheets(2).Select выберет третий рабочий лист книги, когда мы попросили выбрать второй:
И это потому, что был использован объект Worksheet, а не объект Sheets.
Что подтверждает сказанное выше: объект «Рабочие листы» рассматривает только рабочие листы, а не листы диаграмм.
А потому, мы рекомендуем использовать в коде объект Worksheet, а не объект Sheets, а также более точный способ обращения к листу - это выбор листов по имени, который лучше всего задать в свойствах:
🔔 Если вы задаете имя листа в свойствах и применяете это имя в коде, то:
- это позволит выбрать точный лис, и не имеет значения, где он находится в книге;
- не имеет значения, кто изменяет имя рабочего листа, код будет ссылаться на один и тот же лист, пока он не будет изменен в редакторе Visual Basic.
А на этом сегодня все. 👏 Теперь вы знаете как автоматически выбрать или активировать лист для дальнейшего использования в коде VBA.
Мы надеемся, что Вы нашли этот урок полезным ⭐️⭐️⭐️⭐️⭐️
Подписывайтесь на канал, чтобы не пропустить новые уроки и полезные фишки Excel.
Следите за нашими новостями и вы узнаете больше о VBA и Excel в частности.
🔔 Наша команда очень заинтересована в составлении качественного и полезного контента, а потому:
✔️ Понравился урок!? - Поблагодарите автора лайком 👍
✔️ Остались вопросы или есть свое решение!? - Оставляйте комментарий 💬
✔️ Требуется иное решение!? - ✏️ Пишите в комментариях 💬 свой вопрос и мы его обязательно рассмотрим в ближайшей теме обзора.
Нам важна Ваша обратная связь 💝 так мы можем анализировать на сколько данный материал был Вам полезен.
🌺🌺🌺 С наилучшими пожеланиями 🤝 команда excel_easy