Excel vba создать файл и скопировать листы
Добрый день!
Прошу проверить макрос, который запускает цикл по книгам: открытие книги (xlsb), копирование листа "Смета", создание новой одноименной книги с одним листом "Смета" (xlsx) и вставка сюда из книги (xlsb) листа "Смета", сохранение книги (xlsx), закрытие книги без сохранение (xlsb). Макрос все копирует, но не сохраняет новый файл.
Суть макроса в том, чтобы изменить расширение файла с (xlsb) на (xlsx), оставив только 1 лист "Смета". Прилагаю код макроса:
[vba]
Option Explicit
Sub SaveFilesAs()
Dim FilesToOpen, i As Integer
Dim iBeginRange As Object, wsSh As Object, newWS As Object, wsInNewWB As Object
Dim sCopyAddress As String
Dim lCalc As Long, lCol As Long, lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
Dim wbAct As Workbook, newWB As Workbook
'вызываем диалог выбора файлов для импорта
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="MS Excel files (*.xls*), *.xls*", MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "Не выбран ни один файл!"
Exit Sub
End If
'диапазон выборки с книг - c первой ячейки
Set iBeginRange = Range("A1")
'отключаем обновление экрана, автопересчет формул и отслеживание событий
'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
With Application
lCalc = .Calculation
.ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
End With
'цикл по книгам
i = 1
While i Set wbAct = Workbooks.Open(Filename:=FilesToOpen(i))
Set newWS = wbAct.Sheets("Смета")
'создаем новую книгу newWB с одним листом newWs
Set newWB = Workbooks.Add(xlWBATWorksheet)
newWB.Worksheets.Add().Name = "Смета"
Set wsInNewWB = newWB.Worksheets("Смета")
'копируем значения с созданного листа
newWS.Copy
wsInNewWB.Paste
'сохраним созданную книгу как xlsx
newWB.SaveAs _
Filename:=wbAct.Path & "" & Replace(wbAct.Name, ".xlsb", ".xlsx", , , vbTextCompare), FileFormat:=xlWorkbookDefault
newWB.Close savechanges:=True
'закрываем текущую книгу и не сохраняем изменения
wbAct.Close savechanges:=False
i = i + 1
Wend
With Application
.ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
End With
End Sub
Добрый день!
Прошу проверить макрос, который запускает цикл по книгам: открытие книги (xlsb), копирование листа "Смета", создание новой одноименной книги с одним листом "Смета" (xlsx) и вставка сюда из книги (xlsb) листа "Смета", сохранение книги (xlsx), закрытие книги без сохранение (xlsb). Макрос все копирует, но не сохраняет новый файл.
Суть макроса в том, чтобы изменить расширение файла с (xlsb) на (xlsx), оставив только 1 лист "Смета". Прилагаю код макроса:
[vba]
Option Explicit
Sub SaveFilesAs()
Dim FilesToOpen, i As Integer
Dim iBeginRange As Object, wsSh As Object, newWS As Object, wsInNewWB As Object
Dim sCopyAddress As String
Dim lCalc As Long, lCol As Long, lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
Dim wbAct As Workbook, newWB As Workbook
'вызываем диалог выбора файлов для импорта
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="MS Excel files (*.xls*), *.xls*", MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "Не выбран ни один файл!"
Exit Sub
End If
'диапазон выборки с книг - c первой ячейки
Set iBeginRange = Range("A1")
'отключаем обновление экрана, автопересчет формул и отслеживание событий
'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
With Application
lCalc = .Calculation
.ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
End With
'цикл по книгам
i = 1
While i Set wbAct = Workbooks.Open(Filename:=FilesToOpen(i))
Set newWS = wbAct.Sheets("Смета")
'создаем новую книгу newWB с одним листом newWs
Set newWB = Workbooks.Add(xlWBATWorksheet)
newWB.Worksheets.Add().Name = "Смета"
Set wsInNewWB = newWB.Worksheets("Смета")
'копируем значения с созданного листа
newWS.Copy
wsInNewWB.Paste
'сохраним созданную книгу как xlsx
newWB.SaveAs _
Filename:=wbAct.Path & "" & Replace(wbAct.Name, ".xlsb", ".xlsx", , , vbTextCompare), FileFormat:=xlWorkbookDefault
newWB.Close savechanges:=True
'закрываем текущую книгу и не сохраняем изменения
wbAct.Close savechanges:=False
i = i + 1
Wend
With Application
.ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
End With
End Sub
Option Explicit
Sub SaveFilesAs()
Dim FilesToOpen, i As Integer
Dim iBeginRange As Object, wsSh As Object, newWS As Object, wsInNewWB As Object
Dim sCopyAddress As String
Dim lCalc As Long, lCol As Long, lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
Dim wbAct As Workbook, newWB As Workbook
'вызываем диалог выбора файлов для импорта
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="MS Excel files (*.xls*), *.xls*", MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "Не выбран ни один файл!"
Exit Sub
End If
'диапазон выборки с книг - c первой ячейки
Set iBeginRange = Range("A1")
'отключаем обновление экрана, автопересчет формул и отслеживание событий
'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
With Application
lCalc = .Calculation
.ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
End With
'цикл по книгам
i = 1
While i Set wbAct = Workbooks.Open(Filename:=FilesToOpen(i))
Set newWS = wbAct.Sheets("Смета")
'создаем новую книгу newWB с одним листом newWs
Set newWB = Workbooks.Add(xlWBATWorksheet)
newWB.Worksheets.Add().Name = "Смета"
Set wsInNewWB = newWB.Worksheets("Смета")
'копируем значения с созданного листа
newWS.Copy
wsInNewWB.Paste
'сохраним созданную книгу как xlsx
newWB.SaveAs _
Filename:=wbAct.Path & "" & Replace(wbAct.Name, ".xlsb", ".xlsx", , , vbTextCompare), FileFormat:=xlWorkbookDefault
newWB.Close savechanges:=True
'закрываем текущую книгу и не сохраняем изменения
wbAct.Close savechanges:=False
i = i + 1
Wend
With Application
.ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
End With
End Sub
Копирует лист в другое расположение в текущей книге или новой книге.
Синтаксис
выражения. Copy (Before, After)
выражение Переменная, представляюная объект "Таблица ".
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Before | Необязательный | Variant | Лист, перед которым будет размещен скопирован лист. Вы не можете указать Перед , если указать После. |
After | Необязательный | Variant | Лист, после которого будет размещен скопирован лист. Вы не можете указать После, если вы указываете Раньше. |
Примечания
Если вы не указываете ни до, ни после, Microsoft Excel создает новую книгу, которая содержит скопированные объекты таблицы. Недавно созданная книга содержит свойство Application.ActiveWorkbook и содержит одну таблицу. В единой таблице сохраняются свойства name и CodeName исходных таблиц. Если скопированная таблица держала лист кода листа в проекте VBA, то это также осуществляется в новой книге.
Выбор массива из нескольких листов можно скопировать на новый пустой объект книги аналогичным образом.
Источник и назначение должны быть в одном Excel. Пример приложения, в противном случае он вызывает ошибку времени запуска '1004': Нет такого интерфейса поддерживается, Sheet1.Copy objWb.Sheets(1) если что-то подобное было использовано, или ошибка времени запуска '1004': Метод копирования класса Worksheet не удалось, ThisWorkbook.Worksheets("Sheet1").Copy objWb.Sheets(1) если что-то подобное было использовано.
Пример
В этом примере копируется Sheet1, размещая копию после Sheet3.
В этом примере сначала скопируется sheet1 в новую пустую книгу, а затем сохраняется и закрывается новая книга.
В этом примере листы Sheet1, Sheet2 и Sheet4 копируется в новую пустую книгу, а затем сохраняет и закрывает новую книгу.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Создание новых рабочих листов осуществляется с помощью метода 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 в After:=Лист1 — это уникальное имя листа, указанное в проводнике редактора VBA без скобок.
- Лист1 в After:=Worksheets(«Лист1») — это имя на ярлыке листа, указанное в проводнике редактора VBA в скобках.
Создаваемый лист можно присвоить объектной переменной:
Если создаваемый лист присваивается объектной переменной, он будет помещен перед активным листом. Указать дополнительные параметры невозможно.
Копирование листов
Копирование рабочих листов осуществляется с помощью метода Worksheet.Copy.
Синтаксис метода Worksheet.Copy
expression.Copy [Before, After]
где expression — переменная, представляющая собой объект Worksheet.
Компоненты метода Worksheet.Copy
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлена копия.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлена копия.
*Если Before и After не указаны, Excel создаст новую книгу и поместит копию листа в нее. Если скопированный лист содержит код в проекте VBA (в модуле листа), он тоже будет перенесен в новую книгу.
Примеры копирования листов
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Перемещение листов
Перемещение рабочих листов осуществляется с помощью метода Worksheet.Move.
Синтаксис метода Worksheet.Move
expression.Move [Before, After]
где expression — переменная, представляющая собой объект Worksheet.
Компоненты метода Worksheet.Move
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет размещен перемещаемый лист.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет размещен перемещаемый лист.
*Если Before и After не указаны, Excel создаст новую книгу и переместит лист в нее.
Примеры перемещения листов
Простые примеры перемещения листов:
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Перемещение листа «Лист4» в позицию перед листом, указанным как по порядковому номеру, так и по имени ярлыка:
Удаление листов
Удаление рабочих листов осуществляется с помощью метода Worksheet.Delete
Синтаксис метода Worksheet.Delete
где expression — переменная, представляющая собой объект Worksheet.
Примеры удаления листов
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Как обратиться к рабочему листу, переименовать, скрыть или отобразить его с помощью кода VBA Excel, смотрите в этой статье.
57 комментариев для “VBA Excel. Рабочий лист (создание, копирование, удаление)”
А как удалить листы не указывая постоянно их название?:
Привет, Мон!
Можно удалить все листы, кроме указанных в условии, с помощью цикла For Each … Next:
Если по крупному
нет Проверки наличия Листа в книге
нет Переименования Листа
Добрый день! не могу сделать в макросе — чтобы сделанному скопированному листу присваивалось свое имя, которое при новом запуске макроса новому листу будет присваивать новое имя из этой книги (переменное)
Добрый день, Эдуард!
Я правильно понял вопрос: нужно, чтобы макрос при каждом запуске создавал копию листа и присваивал ему новое имя, отличное от имени по умолчанию? Если так, то по каким правилам должно создаваться новое имя?
Здравствуйте. Не могу найти макрос может кто поможет.
Задача состоит в том что бы макрос читал все листы книги после чего делал копию этих листов и вставлял в эти же листы данные как значения. Т.е. фактически разрывал связи методом копи паст но на всех листах книги (колличество листов в книге может быть каждый раз разное.
Добрый день!
У меня вопрос.
Как перемещать лист перед другим листом, номер или название которого будет вводить пользователь?
Привет, Артур!
Перемещение листа «Лист2» на позицию перед листом, имя ярлыка которого вводится в текстовое поле информационного окна InputBox:
Спасибо!
У меня ещё вопрос. А если указывать номер листа, перед которым будет другой лист, какое изменение будет в коде?
А так можно вводить и номер, и имя:
Бладораю.
У меня последний вопрос.
Нужно, чтобы при отмене операции по перемещению не было ошибок. Я пробовал с If… Then GoTo, но не выходит.
Добрый день! Возможно ли полное копирование листа на нужный мне лист? В январе заполняются данные каждый день и надо чтобы за каждый день создавалась копия на заранее созданные 31 лист по дням?
Добрый день, Эдуард!
Это можно сделать двумя строками, но перед копированием следует проверить, не был ли исходный лист сегодня уже сохранен под новым именем:
Спасибо за помощь! Нашел другое решение более мне подходящее но не знаю как сделать чтобы созданые листы вставлялись по порядку нумерации 1,2,3 и т.д. после активного листа? Не поможете вот код
Спасибо все работает!
Еще вопрос, можно ли скопировать лист не в конец книги а между листами, есть 12 месяцев в книге ексель чтобы копировалось после января, февраля?
И может еще чтобы кнопка с макросом не копировалась а создавалась гипперссылка обратно на лист?
Я добавил код перемещения нового листа относительно исходного листа с именем текущего месяца и удаления ненужного нового листа, который создается при повторном вводе одного и того же числа:
Евгений огромное спасибо это то что и требовалось весьма признателен за Вашу помощь.
Эдуард, представленный выше код будет работать только с одним месяцем. Excel не даст создать в одной книге несколько листов с одним именем (одно и то же число, но разных месяцев). Вам придется как-то изменить наименование листов, например: 1.01-31.01, 1.02-28.02. Тогда для перемещения новых листов придется использовать другой алгоритм или по окончании одного месяца, все его листы переименовать, например так:
Я понял этого и не требуется по окончанию месяца листы будут сохранены отдельно.
А вот по предедущему коду нельзя ввести произвольное число т.е не по порядку 1,2,3 а сразу например 17 пропустив с 1 по 16?
Можно и так, если указать имя листа, перед которым вставлять перемещаемый (вместо всего блока If … End If):
В таком виде все работает как задумывалось — может кому то пригодится. Спасибо огромное Евгению за помощь!
Помогите с мелочью никак не пойму куда вставить умножить на 2,1 и на 1,9 чтобы не считалось +_ 20% в этой формуле?
=ДВССЫЛ(АДРЕС(СТРОКА();СТОЛБЕЦ()-1;1;1))
Эдуард, может быть у вас для ячейки с формулой установлен формат «Процентный»?
Нет числовой. условное форматирование со стрелками вверх вниз и вправо
=ДВССЫЛ(АДРЕС(СТРОКА();СТОЛБЕЦ()-1;1;1*2,6)) для стрелки вверх
=ДВССЫЛ(АДРЕС(СТРОКА();СТОЛБЕЦ()-1;1;1*2,4)) для стрелки вправо
но не работает может я не туда вставляю *2,6
Синтаксис функции АДРЕС:
АДРЕС(номер_строки;номер_столбца;[тип_ссылки];[A1];[имя_листа])
Там, где вы умножаете, должно быть логическое значение [A1]: ИСТИНА или ЛОЖЬ (1 или 0).
Ребята привет! Подскажите как решить (буду очень признателен за готовый код) проблему.
Есть Гугл таблица с 10 листами. Один лист требуется скачивать на комп в формате CSV — это легко делается самой таблицей — есть возможность сохранить текущий лист. А вот второй лист нужно скачивать в формате ексель. И гугл уже не позволяет скачать текущий лист. Он скачивает в формате ексель всю книгу целиком. Это не удобно. Приходится удалять вручную ненужные листы. Либо сначала копировать весь лист в гугле, а затем вставлять в лист екселя.
В общем нужен код, который в дальнейшем привяжу к кнопочке, для скачивания определенного листа из книги с данными без формул и в формате ексель.
удаляю Лист по имени на ярлычке
машина вступает в диалог:
» Выбранные Листы будут удалены безвозвратно…»
Как сделать чтобы машина удаляла и не спрашивала
Евгений, помогите пожалуйста со следующей задачей.
В папке несколько документов эксель, в каждом из которых несколько листов.
Необходимо, чтобы макрос открывал по порядку каждый документ, проходил по каждому листу и брал оттуда нужную информацию. Затем эта информация переносится в новый документ эксель в заданном порядке.
В целом программу я реализовал, но столкнулся с проблемой, что debug упирается в последний лист первого открытого документа и не может дальше перейти к следующему документу. Т.е. необходимо прописать условие, чтобы vba понимал, что данный лист в документе последний.
Подскажите пожалуйста, как это сделать?
Александр, для обхода листов каждой книги используйте цикл For Each… Next:
Цикл будет завершен после обработки последнего листа.
Здравствуйте!
Возможно ли при копировании листа из другого файла перенести и пользовательский стиль таблицы?
Добрый день!
Если не ошибаюсь, пользовательский стиль таблицы всегда копируется вместе с листом, но внешний вид таблиц будет одинаков, если оба файла созданы и открыты в одной версии Excel.
Спасибо за ответ.
Увы, не так, и даже всё не так.
Стиль «пытается» копироваться, цвета отличаются оттенками, но это полбеды. Главное, что нужно мне, чтобы копировался цвет шрифта таблицы, а этого не происходит. Почему-то на листе-цели устанавливается на весь лист чёрный шрифт, который Эксель считает главнее табличного.
И даже больше. После ручной замены на всё листе-цели шрифта с чёрного на авто замены цвета шрифта в импортированной таблице не происходит. Что всегда есть при ручной работе с таблицами.
Ну, и совсем глюк. Пользовательский стиль переезжает и доступен в новой книге. Но даже при ручном его выборе на листе-цели для таблицы не происходит смены цвета шрифта.
Цвет можно поменять только руками (макросом) без учёта таблицы.
Всё это происходит на одном компьютере в одной ОС В10.
Я провел тест: создал умную таблицу, создал пользовательский стиль и применил его к таблице. Далее изменил у разных блоков строк цвет шрифта и начертание (полужирное, курсив). Программно скопировал лист с таблицей в другую книгу. Все форматирование сохранилось и пользовательский стиль тоже появился в разделе со стилями таблиц. У меня версия Excel — 16.0 (Excel 2016). Оба файла должны быть созданы в одной версии Excel, так как более старые версии Excel могут не поддерживать возможности новых версий.
Хм. Эксель 2016, всё выше описанное по-прежнему.
Если не затруднит, скопируйте умную таблицу макросом на новый лист, перед этим созданный тем же макросом.
Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно "разобрать", т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.
Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.
Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.
Способ 1. Простое разделение
Нажмите сочетание Alt+F11 или выберите в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor) , вставьте новый модуль через меню Insert - Module и скопируйте туда текст этого макроса:
Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.
Способ 2. Разделение с сохранением
При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:
Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например "D:\Отчеты\2012" и т.п.
Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла - параметр FileFormat:
Для основных типов файлов значения параметра FileFormat следующие:
- XLSX = 51
- XLSM = 52
- XLSB = 50
- XLS = 56
- TXT = 42
Способ 3. Сохранение в новые книги только выделенных листов
Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:
Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.
Способ 4. Сохранение только выделенных листов в новый файл
Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:
Способ 5. Сохранение листов как отдельных PDF-файлов
- для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
- листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
- книга должна быть сохранена на момент экспорта
Нужный нам код будет выглядеть следующим образом:
Способ 6. Готовый макрос из надстройки PLEX
Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:
Иногда нам может потребоваться скопировать определенный диапазон ячеек с одного листа на другой или с самого листа. В некоторых случаях нам может потребоваться скопировать весь рабочий лист на новый рабочий лист. Возможно, вы знакомы с копированием диапазона ячеек, но как насчет копирования всего рабочего листа с помощью VBA. В этой статье мы дадим вам подробное объяснение того, как скопировать рабочий лист в другую книгу в VBA.
Рабочий лист.Метод копирования в VBA
Во-первых, взгляните на синтаксис метода копирования рабочего листа.
Рабочий лист ( ). Копировать (до, после)
В методе копирования есть два аргумента. До и после; оба они не являются обязательными.
- До: Целевой рабочий лист, который мы копируем. Если вы укажете это, вы не сможете использовать После аргумент.
- После: Целевой рабочий лист, который мы копируем. Если вы укажете это, вы не сможете использовать До аргумент.
Поскольку оба эти аргумента являются необязательными, если вы оставили поле пустым, целевой лист будет скопирован в новую книгу, Microsoft Excel автоматически создаст новую книгу.
Мы увидим такие же примеры сейчас в разделе примеров.
Примеры копирования рабочего листа в VBA
Вы можете скачать этот шаблон Excel для копирования VBA здесь — Шаблон таблицы Excel для копирования VBA
Например, посмотрите на данные ниже в рабочий лист назван Рабочий лист назван Чтобы дать листу имя, просто введите имя существующего листа и укажите имя листа, которое вы меняете. Например, если вы хотите изменить лист с именем «Продажи», вы должны использовать объект Worksheet, чтобы вызвать лист по его имени. читать далее «Январь».
У нас есть вышеуказанные данные на листе с именем «Январь”.
- Итак, нам нужно скопировать приведенный выше лист после листа с именем «Лист1». Сначала обратитесь к рабочему листу с помощью объекта worksheets.
Код:
Код:
- Как вы можете видеть выше, когда мы начинаем печатать, мы не видим список IntelliSense для объекта рабочих листов, это одна из серьезных проблем для новичков, если они напрямую используют объект WORKSHEETS, но это можно устранить с помощью переменных, поэтому определите переменная как «Рабочий лист».
Код:
Код:
Итак, мы видим список IntelliSense, в котором показаны все свойства и методы объектов рабочего листа, благодаря объявление переменной Объявление переменной Объявление переменной необходимо в VBA для определения переменной для определенного типа данных, чтобы она могла содержать значения; любая переменная, не определенная в VBA, не может содержать значения. читать далее .
После аргумент выделен, поскольку мы использовали имя аргумента с «равны по определению”Символ (: =)
- Теперь введите имя листа, используя значок «Таблицы» объект.
Код:
Итак, мы скопировали январский рабочий лист справа от «Sheet1». Одна из вещей по умолчанию — имя рабочего листа такое же, как у скопированного листа, с числовым счетом рабочего листа в скобках, в данном случае это «(2)».
Код:
Точно так же, если вы хотите скопировать рабочий лист «Лист1«Перед рабочим листом»Январь»Использует приведенный ниже код.
Код:
Точно так же, если вы хотите скопировать рабочий лист после последнего рабочего листа, используйте приведенный ниже код.
Код:
Вывод:
Единственное изменение, которое мы внесли, — мы использовали «Таблицы. Count », чтобы подсчитать, сколько листов находится в книге.
Точно так же, если вы хотите скопировать лист перед первым листом, используйте приведенный ниже код.
Код:
Вывод:
В этом случае мы использовали «Листы (1)», поэтому скопированный рабочий лист будет помещен перед первым листом книги.
Читайте также: