Обращение к рабочим листам 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, смотрите в этой статье.
I would like to create an user-defined
function in Excel
that can return the current worksheet. I could use the
sheetname = ActiveSheet.Name
But the problem with this is, it works and suddenly it starts to get different sheet name. For example, instead of SHEET I LOVE YOU
it returns SHEET I HATE YOU
.
Is there anyway to fix this — or it might possible because I think it can not be static but varies?
asked Oct 11, 2013 at 16:47
user2103670user2103670
1,59110 gold badges22 silver badges24 bronze badges
0
Function MySheet()
' uncomment the below line to make it Volatile
'Application.Volatile
MySheet = Application.Caller.Worksheet.Name
End Function
This should be the function you are looking for
sapbucket
6,64514 gold badges55 silver badges94 bronze badges
answered Oct 11, 2013 at 17:03
0
This works for me.
worksheetName = ActiveSheet.Name
answered Oct 17, 2017 at 19:20
mobermemoberme
6597 silver badges13 bronze badges
2
Sub FnGetSheetsName()
Dim mainworkBook As Workbook
Set mainworkBook = ActiveWorkbook
For i = 1 To mainworkBook.Sheets.Count
'Either we can put all names in an array , here we are printing all the names in Sheet 2
mainworkBook.Sheets("Sheet2").Range("A" & i) = mainworkBook.Sheets(i).Name
Next i
End Sub
TylerH
20.6k64 gold badges76 silver badges97 bronze badges
answered Nov 14, 2015 at 8:22
josefjosef
8449 silver badges8 bronze badges
Extend Code for Show Selected Sheet(s) [ one or more sheets].
Sub Show_SelectSheet()
For Each xSheet In ThisWorkbook.Worksheets
For Each xSelectSheet In ActiveWindow.SelectedSheets
If xSheet.Name = xSelectSheet.Name Then
'=== Show Selected Sheet ===
GoTo xNext_SelectSheet
End If
Next xSelectSheet
xSheet.Visible = False
xNext_SelectSheet:
Next xSheet
MsgBox "Show Selected Sheet(s) Completed !!!"
end sub
answered Jun 12, 2019 at 8:36
You can use below code to get the Active Sheet name and change it to yours preferred name.
Sub ChangeSheetName()
Dim shName As String
Dim currentName As String
currentName = ActiveSheet.Name
shName = InputBox("What name you want to give for your sheet")
ThisWorkbook.Sheets(currentName).Name = shName
End Sub
answered Oct 24, 2015 at 10:04
i need to change the sheet name by the name of the file was opened
Sub Get_Data_From_File5()
Dim FileToOpen As Variant
Dim OpenBook As Workbook
Dim currentName As String
currentName = ActiveSheet.Name
Application.ScreenUpdating = False
FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", FileFilter:="Excel Files (*.csv*),*csv*")
If FileToOpen <> False Then
Set OpenBook = Application.Workbooks.Open(FileToOpen)
OpenBook.Sheets(1).Range("A1:g5000").Copy
ThisWorkbook.Worksheets(currentName).Range("Aw1:bc5000").PasteSpecial xlPasteValues
OpenBook.Close False
End If
Application.ScreenUpdating = True
End Sub
Ian Campbell
23k14 gold badges35 silver badges57 bronze badges
answered Dec 27, 2020 at 20:37
How to get the name of a worksheet in Excel using VBA and Macros and also how to store that name in a variable for later use.
This is rather simple but there are a couple different ways to do it.
First, we can reference the currently active worksheet and put Name after it:
ActiveSheet.Name
This gets us the name of the currently active sheet, which is also usually the currently visible sheet.
Now, to store this in a variable, just do this:
shtName = ActiveSheet.Name
To get the name of any sheet in the workbook we can use the index number to find it like this:
Worksheets(2).Name
Here, the 2 means that we want to access the second worksheet in the workbook. 1 would mean the first worksheet in the workbook and Name once again means that we want to get the name of it.
This method is very useful when looping through the worksheets since you know that you can always just start at 1 and add 1 until you get to the end.
To put the name in a variable, we do like we did before:
shtName = Worksheets(2).Name
Note that you can name the variable anything you want as long as it doesnt conflict with a VBA function. So, you dont have to use shtName as your variable.
Here is a screenshot of the macro with two message boxes that output the names of the sheets:
You can copy and paste this macro from the attached workbook, located below this tutorial or in the side-bar.
This shows you how simple it is to get the name of worksheets in VBA and I hope you found it helpful!
Similar Content on TeachExcel
Activate or Navigate to a Worksheet using Macros VBA in Excel
Tutorial: Make a particular worksheet visible using a macro in Excel.
This is called activating a wo…
Change the Name of a Chart in Excel
Tutorial:
How to change the name of a chart in Excel.
This allows you to use a more intuitive char…
Output the File Path to and Name of a Workbook in Excel — UDF
Macro: Free Excel UDF (user defined function) that displays the full file path and name of an Exc…
Remove Gridlines from Only Part of a Worksheet in Excel
Tutorial:
How to remove gridlines from a part of a worksheet in Excel instead of the entire workshe…
Get the Number of Workdays Between Two Dates in Excel
Tutorial: How to calculate the total number of working days between two dates in Excel. This allow…
Highlight, Sort, and Group the Top and Bottom Performers in a List in Excel
Tutorial:
How to highlight the rows of the top and bottom performers in a list of data.
This allows…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Узнать имя активного листа |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Содержание
- Получить имя листа
- Переименовать лист
- Проверьте, существует ли имя листа
- Копировать лист и переименовать
В этом руководстве будет рассмотрено взаимодействие с именами листов в 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Конец подписки |
Примечание. Мы добавили обработку ошибок, чтобы избежать ошибок, если имя листа уже существует.
Вы поможете развитию сайта, поделившись страницей с друзьями
Werty Пользователь Сообщений: 227 |
Здравствуйте! Ура! Новое оформление! Начинка надеюсь осталась лучше Задача. С уважением, Спокойствие — величайшее проявление силы. |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
ActiveSheet.Name? P.S. Файл не смотрел Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Werty Пользователь Сообщений: 227 |
Здравствуйте, The_Prist! Этот метод не подходит, поскольку пользователь может выбрать любой лист. Спокойствие — величайшее проявление силы. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Прикольно: |
Kuzmich Пользователь Сообщений: 7998 |
Если вы выбрали лист, то он и будет активным |
Werty Пользователь Сообщений: 227 |
Здравствуйте, Юрий М! Дело в том, что пользователь, находясь на листе «Лист1», может выделить диапазон на листе с именем «Лист100». Я приложил файл поскольку не могу по другому объяснить ситуацию. С уважением, Спокойствие — величайшее проявление силы. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#7 21.01.2013 20:29:27
Не может — для этого нужно сначала выделить Лист100. |
||
Werty Пользователь Сообщений: 227 |
Может … сотрите файл. Буду рад более простому варианту реализации. Спокойствие — величайшее проявление силы. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Отбой! Выделить с помощью InputBox? |
Werty Пользователь Сообщений: 227 |
#10 21.01.2013 20:32:45 не понял …
Изменено: Werty — 22.01.2013 01:35:49 Спокойствие — величайшее проявление силы. |
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
MsgBox «Вы указали диапазон ячеек на литсе с именем » & Name.Worksheet.Name, 64, «Сообщение» |
Werty Пользователь Сообщений: 227 |
Да, классно Спокойствие — величайшее проявление силы. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Что как? Нормально работает )) Только там нужно подправить сообщение: литсе=листе |
Werty Пользователь Сообщений: 227 |
Это да, подправлю. Спокойствие — величайшее проявление силы. |
Werty Пользователь Сообщений: 227 |
Да, получается есть … Range(«A1»).Worksheet.Name Благодарю Вас, Юрий М! С уважением, Спокойствие — величайшее проявление силы. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
В общих чертах верно, только пару замечаний: |
Werty Пользователь Сообщений: 227 |
Согласен с Вами. В рабочем фале переменные сделаны по Вашим рекомендациям Спасибо Вам Юрий М за то что Вы есть! С уважением, Спокойствие — величайшее проявление силы. |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Вообще есть еще более явный способ получить имя листа для диапазона, полученного данным образом: P.S. Посоветовал бы сразу задавать вопрос нормально и понятно не только Вам, но и другим участникам форума. Имя листа выделенного и листа для диапазона, полученного через Inputbox это разные вещи. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#19 21.01.2013 21:56:11 А я и забыл про родителя )) |