Обращение к рабочим листам Excel из кода VBA. Переименование листов, скрытие и отображение с помощью кода VBA Excel. Свойства Worksheets.Name и Worksheets.Visible.
Обращение к рабочим листам
Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.
Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках – имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы – изменились их индексы.
Обращение к рабочему листу в коде VBA Excel:
1 2 3 4 5 6 7 8 |
'По уникальному имени УникИмяЛиста 'По индексу Worksheets(N) 'По имени листа на ярлычке Worksheets("Имя листа") |
- УникИмяЛиста – уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
- N – индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
- Имя листа – имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.
Количество листов в рабочей книге Excel определяется так:
1 2 3 4 5 6 |
'В активной книге Worksheets.Count 'В любой открытой книге, 'например, в «Книга1.xlsm» Workbooks("Книга1.xlsm").Worksheets.Count |
Переименование листов
В VBA Excel есть некоторые особенности в наименовании листов, так как у рабочего листа есть два свойства, связанных с именем: (Name) и Name. Откройте окно «Properties» в редакторе VBA, нажав клавишу «F4», и выделите любой лист в проводнике. Вы увидите, что в окне «Properties» свойству (Name) в скобках соответствует в проводнике уникальное имя листа без скобок, а свойству Name без скобок соответствует изменяемое имя листа в скобках. Оба имени в окне «Properties» можно редактировать.
С помощью кода VBA Excel можно редактировать только имя листа Name, отображаемое на ярлычке листа и в проводнике без скобок. Для этого используется свойство рабочего листа Worksheets.Name со следующим синтаксисом:
expression.Name
где expression – переменная, представляющая собой объект Worksheet. Смена имени осуществляется путем присвоения нового значения свойству Worksheets.Name.
Допустим, у нас есть лист с уникальным именем (Name) – Лист1, индексом – 1 и именем Name – МойЛист, которое необходимо заменить на имя – Реестр.
1 2 3 |
Лист1.Name = "Реестр" Worksheets(1).Name = "Реестр" Worksheets("МойЛист").Name = "Реестр" |
Скрытие и отображение листов
Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:
expression.Visible
где expression – переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:
- False – лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
- xlVeryHidden – лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
- True – лист становится видимым.
Аналоги присваиваемых значений:
- False = xlHidden = xlSheetHidden = 1
- xlVeryHidden = xlSheetVeryHidden = 2
- True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)
Примеры:
1 2 3 4 |
Лист1.Visible = xlSheetHidden Лист2.Visible = -1 Worksheets(Worksheets.Count).Visible = xlVeryHidden Worksheets("МойЛист").Visible = True |
Как создать, скопировать, переместить или удалить рабочий лист с помощью кода VBA Excel, смотрите в этой статье.
Уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить невозможно. В статье “Кодовое имя листа – что это и зачем нужно? Какие плюсы и минусы?” приведён код, позволяющий это сделать.
Отличная статья, спасибо!
Здравствуйте!
Хотел поделиться моментом, заслуживающим внимания, на мой взгляд:
обратите внимание, что обращаться к листу можно и через переменную
Worksheets(i).Activate
но допустим, что мы пишем
i = 2
,а у нас в книге присутствуют несколько листов, в т.ч. лист с именем 2
Каким же образом будет происходить обращение?
Опытным путём я установил, что это зависит от типа переменной
т.е. i будет использоваться в качестве имени листа, только если оно предварительно обозначено, как текстовая строка
Dim i as String
в других же случаях будет происходить переключение на второй лист (т.е. переменная считается индексом) если переменная никак не обозначена (при отключенном Option Explicit) или обозначена:
Dim i
илиDim i as Variant
Dim i as Byte
Думаю, и с другими числовыми форматами будет вести себя также.