Vba excel имя листа по номеру

Обращение к рабочим листам 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
Регистрация: 21.12.2012

#2

17.01.2013 16:28:31

В VBA

Код
Имя_Листа = Sheets(i).Name

i — индекс листа.

Изменено: Михаил С.17.01.2013 16:28:56

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#3

17.01.2013 16:29:47

Цитата
timoha bratan пишет:
Кстати, в VBA написать функцию я написал

Функцию — в студию!

There is no knowledge that is not power

 

Johny, мне бы хотелось средствами самого экселя, его формулы использовать если есть такая возможность

Изменено: timoha bratan19.04.2013 00:40:18

 
 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

Интересно, а как Вы определяете индекс листа???

There is no knowledge that is not power

 

ручками:
=Имя_листа(6)
где «6» — индекс листа
Дело в том что индекс я знаю, а вот имя листа в этом индексе меняется и не раз

Изменено: timoha bratan19.04.2013 00:40:38

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#8

17.01.2013 16:43:30

Цитата
timoha bratan пишет:
имя в этом индексе

  :o

Так в функции Вы используете Worksheets(i) или Sheets(i)?

Изменено: Johny17.01.2013 16:44:14

There is no knowledge that is not power

 

timoha bratan

Пользователь

Сообщений: 23
Регистрация: 17.01.2013

#9

17.01.2013 16:46:08

Цитата
Михаил С. пишет:
И что тормозит?

В процессе работы нескольких процедур VBA, в которых идет переименование листов, функция ИмяЛиста обновляется автоматически (она записана в 30+ строках одновременно). ставить обновлять формулы в состояние в ручную и наоборот не подходят по причине того же вычисления

 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#10

17.01.2013 16:46:54

Цитата
timoha bratan пишет:
=Имя_листа(6)

Непонятно… давайте пример в файле.

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

Если используете Worksheets и у вас есть лист с диаграммой, то у вас будут проблемы. :)

There is no knowledge that is not power

 

Смесь макросов и формул, как правило, всегда тормозит…

Изменено: Михаил С.17.01.2013 17:03:46

 

я диаграммами не пользуюсь… есть лист «Свод» в котором я использовал вашу формулу массива в предыдущей теме в нескольких ячейках ,точнее 52 шт. вычисляет отлично, но есть столбец с напр. числами от 1 до 37 и в соседнем столбце должны отображаться имена листов согласно эти числам(индексам). а уж эти имена и выступают в качестве аргумента для других формул.

НО у меня есть большой код VBA который делает свои действия -удяляет, добавляет умножает и т.д. по циклам. когда не ставил функцию ИмяЛиста, процедуры быстро отрабатывали свое дело, но после использования последней — начал тупить.вот как-то так

Изменено: timoha bratan17.01.2013 17:07:50

 

Михаил С., доброго времени суток
Не могли бы вы сказать как можно реализовать в коде?
У меня документ с кучей листов по параметрам. Задача состоит в том чтобы делать отдельный отчет по результатам раз месяц. С помощью рекордера и своих небольших познаний в VBA сделал возможность создания нового документа и переноса туда данных. Проблема в том что в формуле

Set new = Workbooks.Add
new.Sheets(«Лист1» ;) .Activate
Range(«C5» ;) .Select
ActiveCell.FormulaR1C1 = _
«=IFERROR(VLOOKUP(RC1,'[Отчет.xls]база1′!R7C11:R1870C24,14,0),»»»» ;) «

‘[Отчет.xls]база1’! ссылается только на конкретный лист, а у меня таких листов 10. Как можно сделать, чтобы при запуске макрос, в формулу вносилась актуальная страница документа [Отчет.xls]

Заранее спасибо!

 

Спасибо, но это не совсем то что надо! Я знаю как вывести имя листа книги, но вот как вставить в формулу не знаю.

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

#17

18.04.2013 19:30:07

Если под актуальной страницей подразумевается активная:

Код
Sub Test()
  Dim ShName As String, Wb1 As Workbook, Wb2 As Workbook
  ShName = ActiveSheet.Name
  Set Wb1 = ActiveWorkbook
  Set Wb2 = Workbooks.Add
  With Wb2.Sheets(1).Range("C5")
    .FormulaR1C1 = _
      "=IFERROR(VLOOKUP(RC1,'[" & Wb1.Name & "]" & ShName & "'!R7C11:R1870C24,14,0),"""")"
    '.Activate
  End With
  'Wb1.Activate
End Sub
 

Шарафеев Дамир

Пользователь

Сообщений: 76
Регистрация: 01.01.1970

#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
1
2
3
4
5
6
7
function getSheetByCodename(sCodeName as string, optional wb as workbook=nothing) as sheet
  if wb is nothing then set wb=activeworkbook
  for each sh in wb.sheets
    if sh.codename=sCodeName then set getSheetByCodename=sh: exit function
  next
  set getSheetByCodename=nothing
end function

зачем оно всё надо — надеюсь, понятно?

_________________________

*) однако, может: Как узнать 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-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (4)


Оценок пока нет. Оцените первым!

Like this post? Please share to your friends:
  • Vba excel защитить ячейку от изменений в excel
  • Vba excel имя листа в книге
  • Vba excel изменить текст в ячейке
  • Vba excel защитить все листы
  • Vba excel именованный диапазон в массив