{quote}{login=MSN}{date=08.02.2008 10:44}{thema=}{post}Огромное спасибо, ZVI!
Все работает.
какую литературу посоветуешь по VBA?{/post}{/quote}
—
Базовые знания VBA вполне можно получать из VBA Help-а, если английский не смущает и есть понимание азов VBA. Но если начинать с нуля, то лучше сначала прочитать пару книжек, а потом уже по мере надобности — VBA-Help и ресурсы MSDN. Эффективнее всего научиться, пытаясь решать какие-то реальные свои или чужие задачи с помощью Excel и VBA. В затруднительных ситуациях помогает изучение кода более опытных коллег, если есть такая возможность. Можно найти много VBA-утилит с открытым исходным тестом, которые могут послужить учебниками правильного кодирования.
Да и на этом сайте Николая Павлова можно найти много интересных примеров.
Из с удовольствием прочитанных мною купленных книг, электронные версии которых на русском можно найти в Интернете, посоветую 2:
По VBA: «Джон Уокенбах — Профессиональное программирование на VBA в Excel 2002.pdf» 157 Мбайт. Почти все книги этого автора – бестселлеры, и их не мало, можно по фамилии Уокенбах найти много ссылок в поисковиках. Очень интересная его книга «Диаграммы в Excel» с примерами на компакт-диске, эти примеры можно скачать с сайтов издательств, например, отсюда:
http://archive.dialektika.com/archive/5-8459-0474-9/Examples_full_archive.zip
По Excel: «Мур, Джеффри Экономическое моделирование в Microsoft Excel.pdf» 214 Мбайт, бумажный вариант книги имеет толщину 5 см. Все 1018 страниц читаются как экономический роман. Книга прекрасно структуирована, содержит множество решений с примерами, может быть учебником по экономическим методам вообще. К книге прилагается компакт-диск, некоторые утилиты которого уже не работают (ограничения по дате), но это — решаемый вопрос. Удивительно, но книгу можно читать без Excel, т.к. на рисунках листы Excel продублированы с отображением формул (Ctrl — ~).
В Интернете можно найти много интересных VBA-ресурсов, в т.ч. в и разделе ‘Ссылки’ этого сайта.
Меня, в основном, носило по англоязычным, на которых есть что-то оригинальное, например, из неспециализированных:
http://www.cpearson.com/excel/mainpage.aspx
http://www.oaltd.co.uk/Excel/Default.htm
http://www.bygsoftware.com/
http://www.anthony-vba.kefra.com/
Резюме для интересующихся VBA: нужен небольшой начальный ликбез (хотя бы часть хорошей книги), затем — успешное решение нескольких простых, но полезных или интересных для Вас задач средствами VBA. После этого Вы, скорее всего, почувствуете, что теперь сможете сделать многое, если не все
С этого момента Вы обречены на саморазвитие. Если VBA-решения как-то связаны с работой – используйте и демонстрируйте их, и не удивляйтесь, если вскоре Вас начнут воспринимать как эксперта или шамана.
Может, все будет и не так просто – не отчаивайтесь.
Если есть интерес – все получится!
—
ZVI
Обращение к рабочим листам 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, смотрите в этой статье.
Home / VBA / How to RENAME a Sheet using VBA in Excel
When you add a new sheet in a workbook, you have the option to name it. But you can also rename it any time using the name property of the worksheet. In this tutorial, we will look at different ways to rename a sheet or multiple sheets using a VBA code.
Steps to Rename a Sheet using a VBA Code
- First, define the sheet that you want to rename using the worksheet object.
- After that, you need to use (.Name) to access the name property that you want to change.
- Next, type an equal sign to that to tell VBA the value you want to use to rename the sheet.
- In the end, type the name of the sheet that you want to use.
Helpful Links: Run a Macro – Macro Recorder – Visual Basic Editor – Personal Macro Workbook
Rename the Activesheet
If you want to rename the active sheet, in that case, you don’t need to define the sheet name, instead, you need to use the ActiveSheet object that tells VBA to refer to the sheet that is active right now. Here’s the code.
Activesheet.Name = "mySheet"
Note: To rename a sheet you don’t need to activate it.
As you know every sheet has a number based on its position in the workbook. Let’s say you want to rename the sheet that you have on the fifth number, the code would be.
Sheets(5).Name = "mySheet5"
When you run the above macro, it renames the sheet that is on the fifth number.
Check if Sheet Exists before Renaming
If you try to rename a worksheet that doesn’t exist, VBA will show you an error, just like below.
The solution to this problem is the following code that uses FOR EACH, which can loop through all the worksheets to find the sheet that you have defined and then rename that sheet.
Sub check_sheet_rename()
Dim ws As Worksheet
Dim mySheet As String
Dim SheetName As String
mySheet = InputBox("enter the name of the sheet that you want to rename.")
SheetName = InputBox("Enter new name for the sheet.")
For Each ws In ThisWorkbook.Worksheets
If mySheet = ws.Name Then
ws.Name = SheetName
End If
Next ws
End Sub
Rename a Sheet using Value from a Cell or a Range
You can also rename a sheet by taking value from a cell. Let’s say the value is in cell A1.
Sheets("Sheet1").name = Range("A1").Value
But let’s say you want to name multiple sheets based on the values in a range of cells. In that case, you need to have code like the following.
Sub vba_sheet_rename_multiple()
Dim wsCount As Long
Dim rCount As Long
Dim ws As Worksheet
Dim name As Range
Dim i As Long
wsCount = ThisWorkbook.Worksheets.Count
rCount = Range("A1:A10").Rows.Count
'Checks if the count of the names provided is less _
or more than the sheets in the workbook
If wsCount <> rCount Then
MsgBox "There's some problem with the names provided."
Exit Sub
Else
'Check if any of the cells in the name range is empty.
For Each name In Range("A1:A10")
If IsEmpty(name) = True Then
i = i + 1
End If
Next name
If i > 0 Then
MsgBox "There's is a blank cell in the names range."
Exit Sub
End If
End If
'rename each sheet using the value from the range cell by cell.
i = 1
For Each ws In ThisWorkbook.Worksheets
ws.name = Range("A1:A10").Cells(i, 1).Value
i = 1 + i
Next ws
End Sub
When you run this VBA code, first it will check if the cells in the range are equal to the number of sheets that you have in the workbook. After that, it will check if all the cells in the range that you have specified have values or not. And in the end, rename all the sheets using those names.
It will verify two conditions using IF THEN ELSE and then rename all the sheets.
More Tutorials on VBA Worksheets
- Back to VBA Worksheet / VBA Tutorial
Return to VBA Code Examples
In this Article
- Get Sheet Name
- Get ActiveSheet Name
- Get Sheet Name by index Number
- Get Sheet Name by Code Name
- Rename Sheet
- Rename ActiveSheet
- Rename Sheet by Name
- Rename Sheet by Sheet Index Number
- Rename Sheet by Code Name
- Check if Sheet Name Exists
- Copy Sheet and Rename
This tutorial will cover interacting with Sheet names in VBA.
Get Sheet Name
Sheet names are stored in the Name property of the Sheets or Worksheets object. The Sheet Name is the “tab” name that’s visible at the bottom of Excel:
Get ActiveSheet Name
This will display the ActiveSheet name in a message box:
MsgBox ActiveSheet.Name
Get Sheet Name by index Number
This will display the first worksheet name in a message box:
MsgBox Sheets(1).Name
This will display the name of the last worksheet in the workbook:
MsgBox Sheets(Sheets.Count).Name
Get Sheet Name by Code Name
In the VBA Editor, there is an option to change the “code name” of a Sheet. The code name is not visible to the Excel user and can only be seen in the VBA Editor:
In VBA, when working with Sheets, you can reference the usual Tab name:
Sheets("TabName").Activate
or the VBA code name:
CodeName.Activate
Referencing the code name is desirable in case the Sheet tab name ever changes. If you allow you Excel user access to changing sheet names you should reference the code name in your VBA code so that a Sheet tab name mismatch doesn’t cause an error. Sheet code names are discussed in more detail here.
To get the Sheet name using the VBA Code name, do the following:
MsgBox CodeName.Name
Rename Sheet
You can rename Sheets by adjusting the name property of the Sheets or Worksheets object.
Rename ActiveSheet
ActiveSheet.Name = "NewName"
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
Rename Sheet by Name
Sheets("OldSheet").Name = "NewName"
Rename Sheet by Sheet Index Number
Here we use 1 to rename the first Sheet in the Workbook.
Sheets(1).Name = "NewName"
Rename Sheet by Code Name
This code will rename a sheet using it’s VBA code name (discussed above):
Component.Name = "NewName"
VBA Programming | Code Generator does work for you!
Check if Sheet Name Exists
We created a function to test if a Sheet with a particular name already exists.
'Test if a Range Exists on a Sheet.
'Leave range blank to test if sheet exists
'Inputs:
' WhatSheet - String Name of Sheet (ex "Sheet1")
' WhatRange (Optional, Default = "A1") - String Name of Range (ex "A1")
Function RangeExists(WhatSheet As String, Optional ByVal WhatRange As String = "A1") As Boolean
Dim test As Range
On Error Resume Next
Set test = ActiveWorkbook.Sheets(WhatSheet).Range(WhatRange)
RangeExists = Err.Number = 0
On Error GoTo 0
End Function
The function will return TRUE if the Sheet exists, or FALSE if it does not.
Use the function like so:
Sub Test_SheetExists()
MsgBox RangeExists("setup")
End Sub
Copy Sheet and Rename
This example is from our article on Copying Sheets.
After copying and pasting a Sheet, the newly created sheet becomes the ActiveSheet. So to rename a copied Sheet, simply use ActiveSheet.Name:
Sub CopySheetRename2()
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
On Error Resume Next
ActiveSheet.Name = "LastSheet"
On Error GoTo 0
End Sub
Note: We added error handling to avoid errors if the Sheet name already exists.
0 / 0 / 0 Регистрация: 30.05.2020 Сообщений: 43 |
|
1 |
|
Excel Как изменить название активного листа в закрытой книге?27.06.2020, 12:43. Показов 7833. Ответов 20
Подскажите, есть ли макрос или скрипт, который может изменить название активного листа в закрытой книге? (В ручную очень долго).
0 |
1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,002 |
|
27.06.2020, 13:51 |
2 |
SantaSpb, а не проще загрузить книгу, изменить нужный лист и закрыть с сохранением? Сомнительно, что можно изменить имя, активного в последней загрузке этой книги, листа. Да и стоит ли над этим биться?
0 |
0 / 0 / 0 Регистрация: 30.05.2020 Сообщений: 43 |
|
27.06.2020, 14:39 [ТС] |
3 |
Добавлено через 34 секунды
0 |
297 / 157 / 86 Регистрация: 01.04.2020 Сообщений: 436 |
|
27.06.2020, 14:41 |
4 |
Мне иногда приходится работать с эксель книгами со множеством листов.
0 |
1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,002 |
|
27.06.2020, 15:13 |
5 |
SantaSpb, я не говорю про открытие и закрытие вручную, конечно, макросом, работать с названиями книг по шаблону. Запустил макрос и пьешь кофе.
0 |
elixi 297 / 157 / 86 Регистрация: 01.04.2020 Сообщений: 436 |
||||
27.06.2020, 18:29 |
6 |
|||
Сообщение было отмечено SantaSpb как решение РешениеSantaSpb, наверно вы хотели что то такое:
1 |
0 / 0 / 0 Регистрация: 30.05.2020 Сообщений: 43 |
|
29.06.2020, 15:52 [ТС] |
7 |
elixi, Добрый день, подскажите пожалуйста, в чём тут ошибка? Миниатюры
0 |
Ученик 87 / 69 / 16 Регистрация: 01.04.2020 Сообщений: 247 |
|
29.06.2020, 18:07 |
8 |
SantaSpb, день добрый в 9-й строке пишете путь к своей папке. Код FolderPath = "D:VBA_XXX" ‘ вот здесь указываете путь к своей папке где лежат ваши файлы.
0 |
0 / 0 / 0 Регистрация: 30.05.2020 Сообщений: 43 |
|
30.06.2020, 08:31 [ТС] |
9 |
MikeVol, поменял, но всё равно ошибка.
0 |
ᴁ® 3069 / 1735 / 361 Регистрация: 13.12.2016 Сообщений: 5,937 Записей в блоге: 4 |
|
30.06.2020, 09:10 |
10 |
поменял, но всё равно ошибка. Видимо VBA не ваше…
0 |
0 / 0 / 0 Регистрация: 30.05.2020 Сообщений: 43 |
|
30.06.2020, 10:30 [ТС] |
11 |
АЕ, Возможно. Поэтому я и сижу на форуме и спрашиваю, пытаюсь разобраться.
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
30.06.2020, 10:37 |
12 |
|||
Нужно изменить название листа, который появляется при открытии книги Ключевые слова — при открытии, вот и активируйте первый лист, после открытия любой книги. Скопировать строго в модуль книги ThisWorkbook(ЭтаКнига) личной книги макросов «Personal.xls(b)» или любой другой книги, расположенной в стандартной или альтернативной папке автозагрузке.
1 |
ᴁ® 3069 / 1735 / 361 Регистрация: 13.12.2016 Сообщений: 5,937 Записей в блоге: 4 |
|
30.06.2020, 10:41 |
13 |
SantaSpb, Ошибка -путь не найден.
0 |
0 / 0 / 0 Регистрация: 30.05.2020 Сообщений: 43 |
|
30.06.2020, 10:49 [ТС] |
14 |
АЕ, Конечно существует, с ошибкой уже разобрался. Пытаюсь вникнуть в саму работоспособность макроса. Добавлено через 12 секунд
0 |
0 / 0 / 0 Регистрация: 30.05.2020 Сообщений: 43 |
|
30.06.2020, 12:43 [ТС] |
15 |
Может кто подскажет. Макрос делает активным лист, который я укажу. Но задача немного друга. У меня есть перечень книг и в них уже существует нужный активный лист. В каждой книге он должен называться «1». Но есть книги, в которых этот активный лист называется иначе. И можно ли поменять с помощью макроса название активного листа.
0 |
2630 / 1636 / 744 Регистрация: 23.03.2015 Сообщений: 5,141 |
|
30.06.2020, 13:14 |
16 |
elixi,
Самой большой книгой, с которой я работал была книга в которой более 700 листов. Интересны параметры вашего компа…..
0 |
amd48 779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
||||
30.06.2020, 13:22 |
17 |
|||
Но есть книги, в которых этот активный лист называется иначе. И можно ли поменять с помощью макроса название активного листа. активный лист:
1 |
elixi 297 / 157 / 86 Регистрация: 01.04.2020 Сообщений: 436 |
||||||||
01.07.2020, 00:44 |
18 |
|||||||
можно ли поменять с помощью макроса название активного листа
Добавлено через 1 минуту
Добавлено через 7 минут
Интересны параметры вашего компа….. даже не знаю, комп хороший, не мой а фирменный
1 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
01.07.2020, 11:56 |
19 |
Вообще прежде чем решать задачу — нужно бы её знать
1 |
SantaSpb 0 / 0 / 0 Регистрация: 30.05.2020 Сообщений: 43 |
||||
01.07.2020, 14:40 [ТС] |
20 |
|||
MikeVol, Да, так и сделалelixi,
Добавлено через 10 минут
0 |