Обращение к рабочим листам Excel из кода VBA. Переименование листов, скрытие и отображение с помощью кода VBA Excel. Свойства Worksheets.Name и Worksheets.Visible.
Обращение к рабочим листам
Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.
Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках — имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы — изменились их индексы.
Обращение к рабочему листу в коде VBA Excel:
‘По уникальному имени УникИмяЛиста ‘По индексу Worksheets(N) ‘По имени листа на ярлычке Worksheets(«Имя листа») |
- УникИмяЛиста — уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
- N — индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
- Имя листа — имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.
Количество листов в рабочей книге Excel определяется так:
‘В активной книге 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.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.Visible = xlSheetHidden Лист2.Visible = —1 Worksheets(Worksheets.Count).Visible = xlVeryHidden Worksheets(«МойЛист»).Visible = True |
Как создать, скопировать, переместить или удалить рабочий лист с помощью кода VBA Excel, смотрите в этой статье.
Здравствуйте. Есть функция «=ячейка(имяфайла)» которая возвращает имя текущего листа. А вот как найти имя листа по его индексу напр. Буду благодарен за помощь Кстати, в VBA написать функцию я написал, но у меня очень много разных вычислений и эта формула очень сильно тормозит excel |
|
Михаил С. Пользователь Сообщений: 10514 |
#2 17.01.2013 16:28:31 В VBA
i — индекс листа. Изменено: Михаил С. — 17.01.2013 16:28:56 |
||
Johny Пользователь Сообщений: 2737 |
#3 17.01.2013 16:29:47
Функцию — в студию! There is no knowledge that is not power |
||
Johny, мне бы хотелось средствами самого экселя, его формулы использовать если есть такая возможность Изменено: timoha bratan — 19.04.2013 00:40:18 |
|
Johny Пользователь Сообщений: 2737 |
Интересно, а как Вы определяете индекс листа??? There is no knowledge that is not power |
ручками: Изменено: timoha bratan — 19.04.2013 00:40:38 |
|
Johny Пользователь Сообщений: 2737 |
#8 17.01.2013 16:43:30
Так в функции Вы используете Worksheets(i) или Sheets(i)? Изменено: Johny — 17.01.2013 16:44:14 There is no knowledge that is not power |
||
timoha bratan Пользователь Сообщений: 23 |
#9 17.01.2013 16:46:08
В процессе работы нескольких процедур VBA, в которых идет переименование листов, функция ИмяЛиста обновляется автоматически (она записана в 30+ строках одновременно). ставить обновлять формулы в состояние в ручную и наоборот не подходят по причине того же вычисления |
||
Михаил С. Пользователь Сообщений: 10514 |
#10 17.01.2013 16:46:54
Непонятно… давайте пример в файле. |
||
Johny Пользователь Сообщений: 2737 |
Если используете Worksheets и у вас есть лист с диаграммой, то у вас будут проблемы. There is no knowledge that is not power |
Смесь макросов и формул, как правило, всегда тормозит… Изменено: Михаил С. — 17.01.2013 17:03:46 |
|
я диаграммами не пользуюсь… есть лист «Свод» в котором я использовал вашу формулу массива в предыдущей теме в нескольких ячейках ,точнее 52 шт. вычисляет отлично, но есть столбец с напр. числами от 1 до 37 и в соседнем столбце должны отображаться имена листов согласно эти числам(индексам). а уж эти имена и выступают в качестве аргумента для других формул. НО у меня есть большой код VBA который делает свои действия -удяляет, добавляет умножает и т.д. по циклам. когда не ставил функцию ИмяЛиста, процедуры быстро отрабатывали свое дело, но после использования последней — начал тупить.вот как-то так Изменено: timoha bratan — 17.01.2013 17:07:50 |
|
Михаил С., доброго времени суток Set new = Workbooks.Add ‘[Отчет.xls]база1’! ссылается только на конкретный лист, а у меня таких листов 10. Как можно сделать, чтобы при запуске макрос, в формулу вносилась актуальная страница документа [Отчет.xls] Заранее спасибо! |
|
Спасибо, но это не совсем то что надо! Я знаю как вывести имя листа книги, но вот как вставить в формулу не знаю. |
|
ZVI Пользователь Сообщений: 4328 |
#17 18.04.2013 19:30:07 Если под актуальной страницей подразумевается активная:
|
||
Шарафеев Дамир Пользователь Сообщений: 76 |
#18 19.04.2013 09:56:55 Спасибо большое. Это самое то! |
попробую…
у листа рабочей книги (объекты worksheet, chart) есть свойства index, name, codename
index — текущий номер листа по порядку (включая скрытые), может меняться пользователем при изменении порядка и количества листов;
name — то, что отбражается на ярлычке, может меняться пользователем (конечно. если книга не защищена);
codename — «внутреннее» имя листа, «обычному» пользователю невидимое и недоступное, поэтому не может меняться пользователем.
кроме того, codename является свойством read-only и через VBA также не может быть изменено.
*)
в VBE в окне проекта в списке объектов сначала указаны кодовые имена листов, а затем, в скобках, «обычные» имена.
«обычные» и «необычные» («кодовые») имена могут совпадать, могут — нет.
но в пределах каждого из множеств имён имя должно быть уникальным (без учета регистра символов)
изменить codename можно через интерфейс VBE — ЛКМ по имени листа в списке объектов — F4 — свойство (Name) — именно которое со скобками.
доступ к отдельному листу возможен:
— по индексу
— по «обычному» имени
и для того, и для другого, используется свойство item коллекций sheets, worksheets, charts объекта workbook:
sheets.item(2)
charts.item(«диаграмма 5»)
и т.п.
т.к. свойство item является «умолчальным», то допустимы и конструкции
sheets(2)
charts(«диаграмма 5»)
прямого доступа по «кодовому» имени листа через коллекцию — нет.
но, зная codename листа на этапе разработки проекта (макроса). можно прямо это имя написать в качестве идентификатора листа:
лист1.[a1] — обращение к ячейке A1 листа с
кодовым именем
«лист1» («Лист1» и т.п.)
если же нужно получить лист по кодовому имени, но на этапе разработки оно было неизвестно, то примерно так:
Visual Basic | ||
|
зачем оно всё надо — надеюсь, понятно?
_________________________
*) однако, может: Как узнать Item листа в книге Excel
Содержание
- Получить имя листа
- Переименовать лист
- Проверьте, существует ли имя листа
- Копировать лист и переименовать
В этом руководстве будет рассмотрено взаимодействие с именами листов в VBA.
Получить имя листа
Имена листов хранятся в Имя собственность Таблицы или Рабочие листы объект. Имя листа — это имя «вкладки», которое отображается в нижней части Excel:
Получить имя ActiveSheet
Это отобразит имя ActiveSheet в окне сообщения:
1 | MsgBox ActiveSheet.Name |
Получить имя листа по номеру индекса
Это отобразит имя первого рабочего листа в окне сообщения:
1 | MsgBox Sheets (1) .Name |
Это отобразит имя последнего рабочего листа в книге:
1 | MsgBox Sheets (Sheets.Count) .Name |
Получить имя листа по кодовому имени
В редакторе VBA есть возможность изменить «кодовое имя» листа. Кодовое имя не отображается для пользователя Excel и его можно увидеть только в редакторе VBA:
В VBA при работе с таблицами вы можете ссылаться на обычное имя вкладки:
1 | Таблицы («TabName»). Активировать |
или кодовое имя VBA:
Ссылка на кодовое имя желательно в случае, если имя вкладки «Лист» когда-либо изменится. Если вы разрешаете пользователю Excel изменять имена листов, вам следует указать кодовое имя в коде VBA, чтобы несоответствие имени вкладки листа не приводило к ошибке. Кодовые названия листов обсуждаются здесь более подробно.
Чтобы получить имя листа с использованием имени кода VBA, выполните следующие действия:
Переименовать лист
Вы можете переименовать Таблицы, настроив имя собственность Таблицы или Рабочие листы объект.
Переименовать ActiveSheet
1 | ActiveSheet.Name = «NewName» |
Переименовать лист по имени
1 | Таблицы («OldSheet»). Name = «NewName» |
Переименовать лист по порядковому номеру листа
Здесь мы используем 1, чтобы переименовать первый лист в книге.
1 | Таблицы (1) .Name = «NewName» |
Переименовать лист по кодовому имени
Этот код переименует лист, используя его кодовое имя VBA (обсуждалось выше):
1 | Component.Name = «NewName» |
Проверьте, существует ли имя листа
Мы создали функцию, чтобы проверить, существует ли уже Лист с определенным именем.
123456789101112 | ‘Проверить, существует ли диапазон на листе.’Оставьте поле пустым, чтобы проверить, существует ли лист’Входы:WhatSheet — строковое имя листа (например, Sheet1)WhatRange (Необязательно, по умолчанию = «A1») — строковое имя диапазона (например, «A1»)Функция RangeExists (WhatSheet как строка, необязательно ByVal WhatRange As String = «A1») как логическоеТусклый тест как диапазонПри ошибке Возобновить ДалееУстановите test = ActiveWorkbook.Sheets (WhatSheet) .Range (WhatRange)RangeExists = Номер ошибки = 0При ошибке GoTo 0Конечная функция |
Функция вернет ИСТИНА, если лист существует, или ЛОЖЬ, если нет.
Используйте функцию так:
123 | Sub Test_SheetExists ()MsgBox RangeExists («настройка»)Конец подписки |
Копировать лист и переименовать
Этот пример взят из нашей статьи о копировании листов.
После копирования и вставки листа вновь созданный лист становится ActiveSheet. Итак, чтобы переименовать скопированный лист, просто используйте ActiveSheet.Name:
12345678 | Sub CopySheetRename2 ()Листы («Sheet1»). Копировать после: = Sheets (Sheets.Count)При ошибке Возобновить ДалееActiveSheet.Name = «LastSheet»При ошибке GoTo 0Конец подписки |
Примечание. Мы добавили обработку ошибок, чтобы избежать ошибок, если имя листа уже существует.
Вы поможете развитию сайта, поделившись страницей с друзьями
Многие пользователи Excel обычно переименовывают имя рабочего листа по умолчанию в нужное. Но во многих случаях им нужно ссылаться на рабочий лист на основе его порядкового номера, а не настоящего имени. Как этого добиться? Вы можете попробовать метод в статье.
Справочный лист по номеру индекса вместо имени с пользовательской функцией
Справочный лист по номеру индекса вместо имени с пользовательской функцией
Чтобы ссылаться на рабочий лист по порядковому номеру, а не по имени в Excel, сделайте следующее.
1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.
Код VBA: справочный лист по номеру индекса в Excel
Function SHEETNAME(number As Long) As String
SHEETNAME = Sheets(number).Name
End Function
3. нажмите другой + Q ключи, чтобы закрыть Microsoft Visual Basic для приложений окно.
Заметки:
1. Если вам нужно указать имя определенного листа с его номером, выберите пустую ячейку и введите формулу. = ИМЯ ЛИСТА (1) прямо в панель формул, затем нажмите клавишу Enter. Смотрите скриншот:
2. Если вы хотите получить значение ячейки из рабочего листа на основе его порядкового номера, используйте эту формулу.
=INDIRECT(«‘»&SHEETNAME(1) &»‘!A1»)
3. И если вы хотите суммировать определенный столбец на листе на основе его порядкового номера, примените эту формулу.
=SUM(INDIRECT(«‘»&SHEETNAME(1) &»‘!C2:C7»))
Статьи по теме:
- Как ссылаться на формат и значение из другой ячейки в Excel?
- Как сослаться или связать значение в закрытом / закрытом файле книги Excel?
- Как удалить все ссылки на формулы, но сохранить значения в ячейках в Excel?
- Как сохранить постоянную ссылку на ячейку формулы в Excel?
- Как указать имя вкладки в ячейке в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (4)
Оценок пока нет. Оцените первым!