Создание, копирование, перемещение и удаление рабочих листов Excel с помощью кода VBA. Методы Sheets.Add, Worksheet.Copy, Worksheet.Move и Worksheet.Delete.
Создание новых листов
Создание новых рабочих листов осуществляется с помощью метода Sheets.Add.
Синтаксис метода Sheets.Add
expression.Add [Before, After, Count, Type]
где expression — переменная, представляющая собой объект Sheet.
Компоненты метода Sheets.Add
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлен новый.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлен новый.
- Count — необязательный параметр типа данных Variant, указывающий, сколько листов будет добавлено (по умолчанию — 1).
- Type — необязательный параметр типа данных Variant, указывающий тип листа: xlWorksheet** (рабочий лист) или xlChart (диаграмма), по умолчанию — xlWorksheet.
*Если Before и After не указаны, новый лист, по умолчанию, будет добавлен перед активным листом.
**Для создания рабочего листа (xlWorksheet) можно использовать метод Worksheets.Add, который для создания диаграмм уже не подойдет.
Примеры создания листов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
‘Создание рабочего листа: Sheets.Add Worksheets.Add ThisWorkbook.Sheets.Add After:=ActiveSheet, Count:=2 Workbooks(«Книга1.xlsm»).Sheets.Add After:=Лист1 Workbooks(«Книга1.xlsm»).Sheets.Add After:=Worksheets(1) Workbooks(«Книга1.xlsm»).Sheets.Add After:=Worksheets(«Лист1») ‘Создание нового листа с заданным именем: Workbooks(«Книга1.xlsm»).Sheets.Add.Name = «Мой новый лист» ‘Создание диаграммы: Sheets.Add Type:=xlChart ‘Добавление нового листа перед ‘последним листом рабочей книги Sheets.Add Before:=Sheets(Sheets.Count) ‘Добавление нового листа в конец Sheets.Add After:=Sheets(Sheets.Count) |
- Лист1 в After:=Лист1 — это уникальное имя листа, указанное в проводнике редактора VBA без скобок.
- Лист1 в After:=Worksheets(«Лист1») — это имя на ярлыке листа, указанное в проводнике редактора VBA в скобках.
Создаваемый лист можно присвоить объектной переменной:
Dim myList As Object ‘В активной книге Set myList = Worksheets.Add ‘В книге «Книга1.xlsm» Set myList = Workbooks(«Книга1.xlsm»).Worksheets.Add ‘Работаем с переменной myList.Name = «Listok1» myList.Cells(1, 1) = myList.Name ‘Очищаем переменную Set myList = Nothing |
Если создаваемый лист присваивается объектной переменной, он будет помещен перед активным листом. Указать дополнительные параметры невозможно.
Копирование листов
Копирование рабочих листов осуществляется с помощью метода Worksheet.Copy.
Синтаксис метода Worksheet.Copy
expression.Copy [Before, After]
где expression — переменная, представляющая собой объект Worksheet.
Компоненты метода Worksheet.Copy
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлена копия.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлена копия.
*Если Before и After не указаны, Excel создаст новую книгу и поместит копию листа в нее. Если скопированный лист содержит код в проекте VBA (в модуле листа), он тоже будет перенесен в новую книгу.
Примеры копирования листов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
‘В пределах активной книги ‘(уникальные имена листов) Лист1.Copy After:=Лист2 ‘В пределах активной книги ‘(имена листов на ярлычках) Worksheets(«Лист1»).Copy Before:=Worksheets(«Лист2») ‘Вставить копию в конец Лист1.Copy After:=Sheets(Sheets.Count) ‘Из одной книги в другую Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Copy _ After:=Workbooks(«Книга2.xlsm»).Worksheets(«Лист1») ‘Один лист активной книги в новую книгу Лист1.Copy ‘Несколько листов активной книги в новую книгу* Sheets(Array(«Лист1», «Лист2», «Лист3»)).Copy ‘Все листы книги с кодом в новую книгу ThisWorkbook.Worksheets.Copy |
* Если при копировании в новую книгу нескольких листов хотя бы один лист содержит умную таблицу — копирование невозможно. Один лист, содержащий умную таблицу, копируется в новую книгу без проблем.
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Перемещение листов
Перемещение рабочих листов осуществляется с помощью метода Worksheet.Move.
Синтаксис метода Worksheet.Move
expression.Move [Before, After]
где expression — переменная, представляющая собой объект Worksheet.
Компоненты метода Worksheet.Move
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет размещен перемещаемый лист.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет размещен перемещаемый лист.
*Если Before и After не указаны, Excel создаст новую книгу и переместит лист в нее.
Примеры перемещения листов
Простые примеры перемещения листов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
‘В пределах активной книги ‘(уникальные имена листов) Лист1.Move After:=Лист2 ‘В пределах активной книги ‘(имена листов на ярлычках) Worksheets(«Лист1»).Move Before:=Worksheets(«Лист2») ‘Размещение после последнего листа: Лист1.Move After:=Sheets(Sheets.Count) ‘Из одной книги в другую Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Move _ After:=Workbooks(«Книга2.xlsm»).Worksheets(«Лист1») ‘В новую книгу Лист1.Move |
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Перемещение листа «Лист4» в позицию перед листом, указанным как по порядковому номеру, так и по имени ярлыка:
Sub Peremeshcheniye() Dim x x = InputBox(«Введите имя или номер листа», «Перемещение листа «Лист4»») If IsNumeric(x) Then x = CLng(x) Sheets(«Лист4»).Move Before:=Sheets(x) End Sub |
Удаление листов
Удаление рабочих листов осуществляется с помощью метода Worksheet.Delete
Синтаксис метода Worksheet.Delete
expression.Delete
где expression — переменная, представляющая собой объект Worksheet.
Примеры удаления листов
‘По уникальному имени Лист1.Delete ‘По имени на ярлычке Worksheets(«Лист1»).Delete ‘По индексу листа Worksheets(1).Delete ‘В другой книге Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Delete |
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Как обратиться к рабочему листу, переименовать, скрыть или отобразить его с помощью кода VBA Excel, смотрите в этой статье.
Как переместить рабочие листы
На чтение 2 мин. Просмотров 2.5k.
Что делает макрос: Если вам часто нужно переместить рабочие листы, вот макрос, который может помочь.
Содержание
- Как макрос работает
- Код макроса
- Как работает код
- Как использовать
Как макрос работает
Когда вы хотите изменить порядок листов, используется метод Move обоих объектов листов или объект ActiveSheet. При использовании метода Move, вам нужно указать, куда переместить лист. Вы можете сделать это с помощью аргумента After, аргумента Before, или обоих.
Код макроса
Sub PeremestitListi() 'Переместить активный лист до конца ActiveSheet.Move After:=Worksheets(Worksheets.Count) 'Переместить активный лист в начало ActiveSheet.Move Before:=Worksheets(1) 'Переместите Лист 1 перед Листом 12 Sheets("Лист1").Move Before:=Sheets("Лист12") End Sub
Как работает код
Этот макрос делает три вещи:
Во-первых, он перемещает активный лист в конец. Ничто в VBA не позволяет указывать на «последний лист». Но вы можете найти максимальное количество рабочих листов, а затем использовать это число в качестве индекса для объекта листам. Это означает, что мы можем ввести что-то вроде Worksheets (3), чтобы оказаться на третьем листе в книге. Таким образом, вы можете использовать рабочий лист (Worksheets.Count), чтобы оказаться на последнем листе.
Далее, этот макрос перемещает активный лист к началу рабочей книги. Это просто. Мы используем Worksheets(1), чтобы указать на первый лист в книге, а затем переместить активный лист перед ним.
И, наконец, макрос показывает, что вы можете перемещать листы, просто называя их по именам. В этом примере, мы двигаем Лист1 перед Листом12.
Как использовать
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши personal.xlb в окне Project.
- Введите или вставьте код во вновь созданном модуле.
Добрый день. Подскажите пожалуйста, как в VBA считывать данные из ячеек одного листа, а вставлять их в ячейки другого листа? Варианты с формулами не предлагать, поскольку требуется именно через VBA
задан 6 авг 2016 в 15:54
0
Sub switch()
Dim wb As Workbook
Dim ws1, ws2 As Worksheet
Set wb = Application.ActiveWorkbook
Set ws1 = wb.Worksheets("Лист1")
Set ws2 = wb.Worksheets("Лист2")
' индексация ячеек начинается с 1 в формате (номер строки, номер столбца)
' скопирует данные с первого листа ячейки A1 на второй лист в ячейку A1
ws2.Cells(1, 1) = ws1.Cells(1, 1)
End Sub
ответ дан 8 авг 2016 в 15:41
slippykslippyk
6,0913 золотых знака19 серебряных знаков38 бронзовых знаков
Sheets("Sheet2").Range("A1").Value = Sheets("Sheet1").Range("A1").Value
pavel
9,7693 золотых знака27 серебряных знаков42 бронзовых знака
ответ дан 8 авг 2016 в 12:16
2
У меня есть такие листы «БД», «Накладная[COLOR=»Red»]1[/COLOR]». Листы «Склад» и «БД» статичны. А Лист «Накладная…» переменная. То есть после каждого запуска программы это может быть «Накладная1», а может быть «Накладная2» или «Накладная…». Это зависит от того, с какого листа пользователь запустит программу.
При запуске программы открывается диалоговое окно. В нем есть ComboBox и TextBox.
Что мне нужно сделать:
1. В ComboBox загрузить данные из листа «БД».
2. После ручного ввода дополнительных данных в TextBox, и выбора элемента из списка ComboBox мне надо вернуться на лист «Накладная…», с которого я запустил программу. Заранее я не знаю, какой будет номер у листа после слов «Накладная».
3. Записать данные из диалогового окна (или формы) в лист «Накладная…».
Для перехода из листа в лист я пишу следующий код:
Sheets(«БД»).Select
Если бы я например знал, с какого листа будет стартована программа (например, с листа «Накладная23»), то я бы написал следующий код:
Sheets(«Накладная23»).Select
Но это может быть какая угодно Накладная. Я не знаю кода, который позволял бы делать переходы не так прямолинейно и явно.
=====================================================
Когда-то давно я пользовался командой Range(«H21»).Select для объявления ячейки, но не мог свободно перемещаться между ними пока не узнал про команду Cells(y,x). Сейчас я ищу аналог для перемещения между листами книги на подобии Cells.
Вас может заинтересовать, а как можно сдвинуться влево или вправо назад или вперед от текущей ячейки. Для этого у объекта Range есть метод Offset, который и позволяет производить подобные действия.
Sub Test() Dim cur_range As Range Set cur_range = Range("A1") Set cur_range = cur_range.Offset(1, 0) Debug.Print cur_range.Address End Sub
А вот результат работы. Мы от текущего объекта сдвинулись влево на 1 колонку.
$A$2
Если вы хотите узнать максимальные размеры листа, то у Вас есть возможность это сделать используя UsedRange. У вас будет объект типа Range, из которого вы сможете узнать максимальную колонку или строку.
Sub Test() With ActiveSheet Dim cur_range As Range Set cur_range = .UsedRange Debug.Print cur_range.Address End With End Sub
Адресовать ячейки можно и двумя цифрами по колонки и сроке. Это избавляет Вас от утомительного разбора адресов типа $A10. Так как адрес строка придеться её резать и собирать. Использования Cells(x,y) очень гибко в использовании и позволяет строить легкие циклы. Пример ниже находит на листе левый верхний угол из всех ячеек с введенными данными и в эту ячейку записывает слово.
Sub Test() ' объект Range Dim cur_range As Range ' Весь лист With ActiveSheet Set cur_range = .UsedRange Debug.Print cur_range.Address ' у меня печатает $C$5:$J$48 Dim y_min As Integer ' минимальная колонка y_min = cur_range.Columns.Column Dim x_min As Integer ' минимальная строка x_min = cur_range.Rows.Row Set cur_range = Range(Cells(x_min, y_min), Cells(x_min, y_min)) cur_range = "lef up" End With End Sub