Обращение к рабочим листам 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, смотрите в этой статье.
|
Узнать имя активного листа |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
|
Werty Пользователь Сообщений: 227 |
Здравствуйте! Ура! Новое оформление! Начинка надеюсь осталась лучше Задача. С уважением, Спокойствие — величайшее проявление силы. |
|
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
ActiveSheet.Name? P.S. Файл не смотрел Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
|
Werty Пользователь Сообщений: 227 |
Здравствуйте, The_Prist! Этот метод не подходит, поскольку пользователь может выбрать любой лист. Спокойствие — величайшее проявление силы. |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Прикольно: |
|
Kuzmich Пользователь Сообщений: 7998 |
Если вы выбрали лист, то он и будет активным |
|
Werty Пользователь Сообщений: 227 |
Здравствуйте, Юрий М! Дело в том, что пользователь, находясь на листе «Лист1», может выделить диапазон на листе с именем «Лист100». Я приложил файл поскольку не могу по другому объяснить ситуацию. С уважением, Спокойствие — величайшее проявление силы. |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#7 21.01.2013 20:29:27
Не может — для этого нужно сначала выделить Лист100. |
||
|
Werty Пользователь Сообщений: 227 |
Может … сотрите файл. Буду рад более простому варианту реализации. Спокойствие — величайшее проявление силы. |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Отбой! Выделить с помощью InputBox? |
|
Werty Пользователь Сообщений: 227 |
#10 21.01.2013 20:32:45 не понял …
Изменено: Werty — 22.01.2013 01:35:49 Спокойствие — величайшее проявление силы. |
||
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
MsgBox «Вы указали диапазон ячеек на литсе с именем » & Name.Worksheet.Name, 64, «Сообщение» |
|
Werty Пользователь Сообщений: 227 |
Да, классно Спокойствие — величайшее проявление силы. |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Что как? Нормально работает )) Только там нужно подправить сообщение: литсе=листе |
|
Werty Пользователь Сообщений: 227 |
Это да, подправлю. Спокойствие — величайшее проявление силы. |
|
Werty Пользователь Сообщений: 227 |
Да, получается есть … Range(«A1»).Worksheet.Name Благодарю Вас, Юрий М! С уважением, Спокойствие — величайшее проявление силы. |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
В общих чертах верно, только пару замечаний: |
|
Werty Пользователь Сообщений: 227 |
Согласен с Вами. В рабочем фале переменные сделаны по Вашим рекомендациям Спасибо Вам Юрий М за то что Вы есть! С уважением, Спокойствие — величайшее проявление силы. |
|
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
Вообще есть еще более явный способ получить имя листа для диапазона, полученного данным образом: P.S. Посоветовал бы сразу задавать вопрос нормально и понятно не только Вам, но и другим участникам форума. Имя листа выделенного и листа для диапазона, полученного через Inputbox это разные вещи. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#19 21.01.2013 21:56:11 А я и забыл про родителя )) |
In this guide, we’re going to show you how to create and name a worksheet with VBA in Excel.
Download Workbook
Syntax
You can create and name a worksheet using the Sheets.Add and Worksheets.Add methods. Both methods work similarly and have 4 optional arguments and return a sheet object which can take a Name property.
Sheets.Add ([Before], [After], [Count], [Type])
Worksheets.Add ([Before], [After], [Count], [Type])
| Name | Description |
| Before | Optional. The sheet before which the new sheet is to be added. If omitted, Excel creates the new sheet(s) before the selected sheet(s). |
| After | Optional. The sheet after which the new sheet is added. If omitted, Excel creates the new sheet(s) before the selected sheet(s). |
| Count | The number of sheets to be added. The default is the number of selected sheets. |
| Type | Specifies the sheet type. The default is xlWorksheet which represents a standard worksheet. |
Adding a single sheet
All arguments are optional. The method without arguments creates worksheet(s) equal to the number of selected worksheets before the first selected worksheet.
Sheets.Add
For example, if two sheets are selected, the method will add two worksheets. To ignore the selected sheets and set the sheet number to one (1), use 1 for the Count argument.
Sheets.Add Count:=1
Adding multiple sheets
You can set the Count argument to an integer greater than 1 to add multiple sheets at once. For example, the following code adds three (3) worksheets.
Sheets.Add Count:=3
Adding a sheet with a name
Sheets.Add method returns a sheet object and sets its name by updating the Name property. A property is an attribute of object that determines one of the object’s characteristics. The property of an object is addressed by entering the property name after the corresponding object and a dot(.). Just like calling the Add method for the Sheets object.
If all you need is to create worksheets and name them regardless of their position, use one of the following code lines.
Sheets.Add.Name = “My Sheet” Sheets.Add(Count:=1).Name = “My Sheet” ‘Use this line to ensure creating a single sheet
Adding a sheet before or after a specific sheet
If the new sheet’s position is important, use either the Before or After argument. Each argument accepts a sheet object. The new sheet will be created before or after the sheet you supplied based on the argument you are using.
You can call a sheet object by giving the sheet’s name or index to Sheets or Worksheets objects. It can be a variable which you have defined. Here are some examples:
Sheets.Add Before:=Worksheets("My Sheet") ‘Add sheet(s) before “My Sheet”
Sheets.Add After:=Worksheets(3) ‘Add sheet(s) after the third sheet
Dim ws As Worksheet ‘Define a new worksheet object Set ws = Sheets.Add ‘Create and assign new sheet to the worksheet object Sheets.Add After:=ws ‘Add a new sheet after the recently added sheet (ws)
Creating and naming multiple worksheets
To name multiple worksheets, you have to use an array of names and a loop. Let’s say you have names in a range like A1:A5 in the worksheet named “Sheet1”. A loop should check each cell inside the range and create a worksheet from the corresponding name. Check out the following code:
Sub CreateAndNameMultipleSheets()
Dim rng As Range 'Range object which defines a cell
For Each rng In Sheets("Sheet1").Range("A1:A5")
Sheets.Add.Name = rng.Value
Next
End Sub
This is our last tip for how to create and name a worksheet with VBA in Excel article. If you are new to loops in VBA, check out All You Need to Know on How to Create a VBA loop in Excel to understand and find more ways of looping.
|
39 / 14 / 1 Регистрация: 11.05.2010 Сообщений: 139 |
|
|
1 |
|
|
18.04.2011, 22:45. Показов 63072. Ответов 5
Нужно получить имя первого листа в книге (всего в книге предполагается 2 листа) и записать его в строковую переменную.
0 |
|
Vlanib Частенько бываю 749 / 330 / 42 Регистрация: 20.06.2007 Сообщений: 854 |
||||
|
19.04.2011, 05:31 |
2 |
|||
|
Ну так а в чем трудность то?
1 |
|
39 / 14 / 1 Регистрация: 11.05.2010 Сообщений: 139 |
|
|
19.04.2011, 13:29 [ТС] |
3 |
|
ну вообщем-то имя листа должно быть произвольным. попробую так.
0 |
|
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
|
19.04.2011, 18:43 |
4 |
|
ну вообщем-то имя листа должно быть произвольным. попробую так. Вы про это: sName = , ну так меняйте, на
0 |
|
39 / 14 / 1 Регистрация: 11.05.2010 Сообщений: 139 |
|
|
19.04.2011, 22:58 [ТС] |
5 |
|
Вы про это: sName = , ну так меняйте, на тут другое я подразумевал, а именно лист, имя которого нужно получить, может оказаться вовсе не №1, а хоть 99, в результате разных долгих манипуляций с последними.
0 |
|
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
|
20.04.2011, 01:52 |
6 |
|
(всего в книге предполагается 2 листа) в результате разных долгих манипуляций с последними. В книге всё-равно будет
0 |



Если по теме, проверьте код:
[/offtop]
