Обращение к рабочим листам 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, смотрите в этой статье.
Limos Пользователь Сообщений: 102 |
#1 05.07.2017 14:56:55 Добрый день! Подскажите как правильно получить следующую информацию.
Звездочка означает, что неважно какие символы будут дальше. Заранее спасибо. |
||
vikttur Пользователь Сообщений: 47199 |
В цикле проверяйте наличие фрагмента в имени листа. |
Limos Пользователь Сообщений: 102 |
Каким образом, подскажите приблизительно. |
_Boroda_ Пользователь Сообщений: 1496 Контакты см. в профиле |
#4 05.07.2017 15:15:03 Приблизительно так
Изменено: _Boroda_ — 05.07.2017 15:15:11 Скажи мне, кудесник, любимец ба’гов… |
||
vikttur Пользователь Сообщений: 47199 |
#5 05.07.2017 15:17:45
|
||
Limos Пользователь Сообщений: 102 |
#6 05.07.2017 15:34:42 Спасибо большое) Я это находил чтобы обновить источник данных для сводной таблицы, вот код
Но, гад выдает ошибку Run-time error ’91’ Object variable or With block variable not set Изменено: Limos — 05.07.2017 15:46:01 |
||
Как узнать текущий номер листа книги?
Если у вас в книге несколько листов, есть ли у вас какие-нибудь хорошие идеи, чтобы получить текущий номер листа, кроме того, чтобы пересчитывать их по одному? В этой статье я расскажу о простом трюке, с помощью которого вы сможете вернуть номер активного рабочего листа по мере необходимости.
Получить текущий номер рабочего листа книги с кодом VBA
Получить текущий номер рабочего листа книги с кодом VBA
С помощью следующего простого кода VBA вы можете быстро получить номер активного рабочего листа по своему усмотрению, сделайте следующее:
1. Активируйте рабочий лист, которому вы хотите вернуть его порядковый номер.
2. Удерживайте ALT + F11 ключи, и он открывает Окно Microsoft Visual Basic для приложений.
3. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.
Код VBA: получить текущий номер листа
Sub GetActiveSheetIndex()
MsgBox ActiveSheet.Index
End Sub
4, Затем нажмите F5 ключ для запуска этого кода, и вы получите порядковый номер текущего рабочего листа во всплывающем окне сообщения, как показано на следующем снимке экрана:
Статьи по теме:
Как быстро вставить названия листов в ячейки в Excel?
Как посчитать количество листов в рабочей тетради?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (3)
Оценок пока нет. Оцените первым!
Номера листов
- sonata
- Постоялец
- Сообщения: 321
- Зарегистрирован: 31.07.2002 (Ср) 13:18
- Откуда: Russia
Номера листов
Необходимо узнать настоящие номера, листов….
в VBA, но как это сделать программно?
Public Sub jop1()
For i = 1 To Worksheets.Count
Sheets(«Номера_листов»).Activate
Cells(i, 1) = i
Cells(i, 2) = Sheets(i).Name
Next i
End Sub
- RayShade
- Scarmarked
-
- Сообщения: 5511
- Зарегистрирован: 02.12.2002 (Пн) 17:11
- Откуда: Russia, Saint-Petersburg
-
- Сайт
- ICQ
RayShade » 26.03.2003 (Ср) 15:51
For i = 1 To Worksheets.Count
Sheets(«Номера_листов»).Activate
Cells(i, 1) = Sheets(i).Index
Cells(i, 2) = Sheets(i).Name
Next i
- Calvin
- Постоялец
- Сообщения: 409
- Зарегистрирован: 21.01.2003 (Вт) 12:13
- Откуда: Sebastopol
-
- ICQ
Calvin » 26.03.2003 (Ср) 15:58
Ну вообще в этом примере i — является индексом, а так вообще
ActiveSheet.index
или
Sheets(«gfdghfdhgf»).index
- sonata
- Постоялец
- Сообщения: 321
- Зарегистрирован: 31.07.2002 (Ср) 13:18
- Откуда: Russia
sonata » 26.03.2003 (Ср) 16:08
Ну а если листов много, и хочется составить в цикле ОТЧЕТ?
Можно ли это сделать?
- RayShade
- Scarmarked
-
- Сообщения: 5511
- Зарегистрирован: 02.12.2002 (Пн) 17:11
- Откуда: Russia, Saint-Petersburg
-
- Сайт
- ICQ
RayShade » 26.03.2003 (Ср) 16:30
Ответ в моем постинге. Выделен специально жирным
- sonata
- Постоялец
- Сообщения: 321
- Зарегистрирован: 31.07.2002 (Ср) 13:18
- Откуда: Russia
sonata » 27.03.2003 (Чт) 11:20
Не удовлетворена, Ваш код-это то как посмотреть номер на Активном листе, а вот как пробежаться по всем листам, и посмотреть индекс каждого?
- corgi
- ToyMan
- Сообщения: 1367
- Зарегистрирован: 01.10.2002 (Вт) 9:59
- Откуда: Россия, Москва
-
- ICQ
corgi » 27.03.2003 (Чт) 11:28
это код как записать данные в активный лист с других
- RayShade
- Scarmarked
-
- Сообщения: 5511
- Зарегистрирован: 02.12.2002 (Пн) 17:11
- Откуда: Russia, Saint-Petersburg
-
- Сайт
- ICQ
RayShade » 27.03.2003 (Чт) 11:29
Ну неужели нельзя немного проявить фантазии и доделать его до нужной кондиции?
For i = 1 To Worksheets.Count
Sheets(1).Cells(i, 1) = Sheets(i).Index
Sheets(1).Cells(i, 2) = Sheets(i).Name
Next i
- Calvin
- Постоялец
- Сообщения: 409
- Зарегистрирован: 21.01.2003 (Вт) 12:13
- Откуда: Sebastopol
-
- ICQ
Calvin » 27.03.2003 (Чт) 11:29
2 Sonata Ну вообще-то ответ на этот попрос ты сама себе дала еще в самом первом посте
Public Sub jop1()
For i = 1 To Worksheets.Count
Sheets(«Номера_листов»).Activate
Cells(i, 1) = i
Cells(i, 2) = Sheets(i).Name
Next i
End Sub
здесь можно даже Sheets(i).Index не использовать, так как i в данном случае и является индексом листа.
а во-вторых RayShade и я дополнили в довольно полной мере
ЗЫ Обрати внимание, что я в первом своем посте указывал индекс не только активного листа….
- Vitaly1
- Брехман
- Сообщения: 1578
- Зарегистрирован: 30.12.2002 (Пн) 16:35
- Откуда: Russia, Mosсow
Vitaly1 » 27.03.2003 (Чт) 11:29
For i = 1 To Workbooks.Count
MsgBox Workbooks(i).Name + » индекс:» + CStr(i)
Next i
Действительно, Sonata, оказывается вы в своем вопросе дали ответ
Пардон, для нумеров листов нужно организовать второй цикл
For i = 1 To Workbooks.Count
K=3
cells(i,1).value=Workbooks(i).Name
cells(i,2).value= i
For j = 1 To Workbooks(i).worksheets.count
cells(i,k).value= Workbooks(i).worksheets(j).index
k=k+1
next j
Next i
Можно и одним циклом, но тогда выдадутся идексы листов только активной книги:
k = 1
For i = 1 To Sheets.Count
Cells(1, k).Value = Sheets(i).Index
k = k + 1
Next i
- sonata
- Постоялец
- Сообщения: 321
- Зарегистрирован: 31.07.2002 (Ср) 13:18
- Откуда: Russia
sonata » 27.03.2003 (Чт) 17:09
Не понимаю….
Мне кажется, что я вполне понятно все объяснила, чего мне нужно…
То, что в моей программе -i — это обычный счетчик, а не индекс листа …
Например У меня есть лист с названием «ВСЕ» у него счетчик -3(по счету 3-й от начала книги), а индекс -15…., так вот, в моей програме выдается 3-ка, а мне нужно, чтобы выдавалось 15….
- RayShade
- Scarmarked
-
- Сообщения: 5511
- Зарегистрирован: 02.12.2002 (Пн) 17:11
- Откуда: Russia, Saint-Petersburg
-
- Сайт
- ICQ
RayShade » 27.03.2003 (Чт) 17:15
Повторяю еще раз! Индекс листа — это проперть .Index! Она содержит именно тот индекс, которй тебе нужен!
- Vitaly1
- Брехман
- Сообщения: 1578
- Зарегистрирован: 30.12.2002 (Пн) 16:35
- Откуда: Russia, Mosсow
Vitaly1 » 27.03.2003 (Чт) 18:11
Порядковый номер листа это и есть Index!
Sheets -работает с листами только активной книги. В любой книге первый лист имеет Index =1, второй Index =2 и т.д. !!!!!
- sonata
- Постоялец
- Сообщения: 321
- Зарегистрирован: 31.07.2002 (Ср) 13:18
- Откуда: Russia
sonata » 27.03.2003 (Чт) 18:19
Но тогда как понять следующую ситуацию:
1. Есть лист с именем «ВСЕ»
2. По вышеуказ. программе его index=3(и он 3-й по счету)
Но, когда я делаю Лист15.Activate, то активизируется именно он, и в коде VBA стоит число 15 в скобках …. Как это понять????
Или я совсем уже заучилась?
- sonata
- Постоялец
- Сообщения: 321
- Зарегистрирован: 31.07.2002 (Ср) 13:18
- Откуда: Russia
sonata » 27.03.2003 (Чт) 18:24
А, когда пишу
Sheets(3).Select
то выбирается совершенно другой лист, который по счету 8, и индекс у него 8. Но, мне кажется, что сдесь не всегда возможны совпадения…,
ведь листы иногда удаляются, добавляются новые….
- Vitaly1
- Брехман
- Сообщения: 1578
- Зарегистрирован: 30.12.2002 (Пн) 16:35
- Откуда: Russia, Mosсow
Vitaly1 » 27.03.2003 (Чт) 18:37
Но, когда я делаю Лист15.Activate, то активизируется именно он, и в коде VBA стоит число 15 в скобках …. Как это понять????
Или я совсем уже заучилась?
Лист15 это не Лист с индексом 15, а лист с именем Лист15, т.к. Лист15 мог пользователь перетащить на другую позицию , или удалить листы перед Лист15. По умолчанию Excel называет Лист1 первый порядковый лист в книги, но символ 1 в имени листа, это не его индекс!
- RayShade
- Scarmarked
-
- Сообщения: 5511
- Зарегистрирован: 02.12.2002 (Пн) 17:11
- Откуда: Russia, Saint-Petersburg
-
- Сайт
- ICQ
RayShade » 28.03.2003 (Пт) 10:27
У меня нет слов. Остались только буквы и впервые за последний год я плачу как ребенок !!! Может, ты все таки не дашь мне погибнуть в расцвете сил и почитаешь хелпник?
Это просто имя листа и все. Значит, в том цикле выводи проперть .Name и получишь имена листов.
- Vitaly1
- Брехман
- Сообщения: 1578
- Зарегистрирован: 30.12.2002 (Пн) 16:35
- Откуда: Russia, Mosсow
Vitaly1 » 28.03.2003 (Пт) 13:06
RayShade — я надеюсь что вы поняли, что я отвечал на вопрос Sonata.
Именно я и объяснял что такое имя, и что такое индекс, что это разные свойства одного объекта никак не связанные друг-с-другом.
- RayShade
- Scarmarked
-
- Сообщения: 5511
- Зарегистрирован: 02.12.2002 (Пн) 17:11
- Откуда: Russia, Saint-Petersburg
-
- Сайт
- ICQ
RayShade » 28.03.2003 (Пт) 13:10
Да я, собственно, про вас ничего и не имел в виду, я обращался к Sonata, конечно же
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1