Копирование листов в excel vba
Копирование модуля макроса в другую книгу
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Если в книге есть макрос Visual Basic для приложений (VBA), который вы хотите использовать в другом месте, вы можете скопировать модуль, содержащий этот макрос, в другую открытую книгу с помощью редактора Visual Basic (VBE).
Макросы и средства VBA находятся на вкладке Разработчик, которая по умолчанию скрыта, поэтому сначала нужно включить ее.
В Windowsперейдите в раздел Параметры _Гт_ файла _гт_ настроить ленту.
Для Macперейдите на вкладку _Гт_ параметры Excel. _гт_ ленты _амп_ Toolbar.
Затем в разделе Настройка ленты в разделе Основные вкладкиустановите флажок разработчик .
Общие сведения о макросах и языке VBA
Если вы не знакомы с макросами и VBA в целом, вы можете получить следующие сведения.
Макрос — это Макрокоманда или набор действий, которые можно использовать для автоматизации задач.
Вы можете записывать макросы с помощью команды » записать макрос » на вкладке » разработчик «.
Макросы записываются на языке программирования VBA.
Вы можете просматривать и редактировать макросы в редакторе Visual Basic — окне, которое открывается в Excel. Ниже приведен пример окна VBE для Windows:
Макросы с именами сделатьячейкузеленой и установитьвысотустроки находятся в модуле с именем Module1, который хранится в Книга1.
Копирование модуля из одной книги в другую
Откройте книгу, содержащую макрос, который нужно скопировать, и книгу, в которую ее нужно скопировать.
На вкладке разработчик нажмите кнопку Visual Basic , чтобы открыть Редактор Visual Basic.
В редакторе Visual Basic в меню вид выберите пункт Обозреватель проектов или нажмите клавиши CTRL + R .
В области » Обозреватель проектов » перетащите модуль с макросом, который вы хотите скопировать в конечную книгу. В данном случае мы копируем Module1 из book2. xlsm в Книга1. xlsm.
Module1 копируется из book2. xlsm
Копия Module1 скопирована в Книга1. xlsm
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.
Как с помощью vba скопировать данные из одной книги в другую
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса()`Выделить диапазон который необходимо скопироватьRange(«A1:F52»).Select`Скопировать то, что выделеноSelection.CopyChDir «путь к папке где лежит файл в который необходимо скопировать»Workbooks.Open Filename:= «Название файла, который находится в папке, путь к которой указан выше»`Выделить начальную ячейку в которую необходимо вставить скопированные данныеRange(«A6»).Select`Вставить данныеActiveSheet.Paste`сохранить текущую книгуActiveWorkbook.Save`Закрыть книгуActiveWorkbook.CloseEnd Sub
Вариант 2:
В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2()`Открываем файл с которого нужно скопировать данныеWorkbooks.Open Filename:=»C:Данные.xlsx»`Скопировать нужный диапазон в открывшейся книге на листе 1Workbooks(«Данные.xlsx»).Worksheets(«Лист1»).Range(«A16:E16»).Copy`Активируем нужную нам книгуWorkbooks(«Книга1.xlsm»).Activate`Выделяем и вставляем скопированные данные в ячейку А1ActiveWorkbook.Worksheets(«Лист1»).Range(«A1»).SelectActiveSheet.Paste`Закрываем книгу откуда мы скопировали данныеWorkbooks(«Данные.xlsx»).CloseEnd Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу()Dim bookconst As WorkbookDim abook As WorkbookSet abook = ActiveWorkbook `присваиваем перменную активной книгеSet bookconst = Workbooks.Open(«C:UsersUserDesktop1.xlsx») `присваиваем перменную книге куда необходимо копировать данные`переходим в активную книгу откуда необходимо скопировать
данныеabook.Worksheets(«Лист1»).ActivateRange(«A1:I23»).Copy `копируем определенный диапазон листа, укажите свой диапазонbookconst.Worksheets(«Лист1»).Activate `активируем лист куда необходимо вставить данныеRange(«A1:I23»).Select `встаем на ячейку А1Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False`вставляем только форматы ячеекSelection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _SkipBlanks:=False, Transpose:=False`второй листabook.Worksheets(«Лист2»).ActivateRange(«A1:I23»).Copybookconst.Worksheets(«Лист2»).ActivateRange(«A1:I23»).Select `выделяем диапазонSelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False`вставляем только форматы ячеекSelection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _SkipBlanks:=False, Transpose:=False`третий листabook.Worksheets(«Лист3»).ActivateRange(«A1:I23»).Copybookconst.Worksheets(«Лист3»).ActivateRange(«A1:I23»).Select `выделяем диапазонSelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False`вставляем только форматы ячеекSelection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _SkipBlanks:=False, Transpose:=False`сохранить текущую книгуbookconst.Save`Закрыть книгуbookconst.Closeabook.ActivateEnd Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже. Спасибо за внимание.
(Пока оценок нет)
VBA копирование листа в конец рабочей книги (со скрытыми листами)
Я хочу скопировать лист и добавить его в конец всех текущих листов (независимо от того, скрыты ли листы).
Это работает нормально, за исключением того, что при наличии скрытых листов новый лист вставляется только после последнего видимого листа, поэтому команда name переименовывает неправильный лист.
Я пробовал варианты следующего, чтобы получить ссылку на недавно скопированный WorkSheet , но ни один из них не был успешным и / или допустимым кодом.
7 Ответов
Сделайте исходный лист видимым перед копированием. Затем скопируйте лист так, чтобы копия также оставалась видимой. После этого копия станет активным листом. Если вы хотите, снова скройте исходный лист.
Если вы используете следующий код, основанный на коде @Siddharth Rout, вы переименовываете только что скопированный лист, независимо от того, активирован он или нет.
Я столкнулся с подобной проблемой при копировании листа в другую книгу. Я предпочитаю избегать использования ‘activesheet’, хотя это и вызвало у меня проблемы в прошлом. Поэтому я написал функцию, чтобы выполнить это в соответствии с моими потребностями. Я добавляю его здесь для тех, кто приходит через google, как и я:
Основная проблема здесь заключается в том, что копирование видимого листа в последнюю позицию индекса приводит к Excel перемещению листа в конец видимых листов. Таким образом, копирование листа в позицию после последнего видимого листа сортирует эту проблему. Даже если вы копируете скрытые листы.
Для использования этой функции для исходного вопроса (т. е. в той же рабочей книге) можно было бы сделать что-то вроде.
Добавьте этот код в начало:
Добавьте этот код до конца:
Отрегулируйте код в конце, если вы хотите, чтобы активными и видимыми были не только первые листы. Например, следующие:
Чтобы убедиться, что новый лист является переименованным, измените свой код следующим образом:
Этот код находится в моей пользовательской форме, которая позволяет мне скопировать определенный лист (выбранный из выпадающего списка) с форматированием и формулами, которые я хочу создать, на новый лист, а затем переименовать новый лист с помощью пользовательского ввода. Обратите внимание, что каждый раз, когда лист копируется, ему автоматически присваивается старое имя листа с обозначением » (2)». Пример «OldSheet» становится «OldSheet (2)» после копирования и перед переименованием. Поэтому перед переименованием необходимо выбрать скопированный лист с именами программ.
Когда вы хотите скопировать лист с именем «mySheet» и использовать .Copy после:=, Excel сначала называет скопированный лист точно так же и просто добавляет ‘ (2)’, чтобы его конечное имя было «mySheet (2)».
Спрятан он или нет, не имеет значения. Он качается с 2 строками кода, добавляя скопированный лист в конце рабочей книги.
Пример:
Ответ: я нашел это и хочу поделиться этим с вами.
Но вопрос в том, можем ли мы использовать его со следующим кодом для переименования листов, если да, то как мы можем это сделать?
Похожие вопросы:
Мы используем OpenOfficeXML и до сих пор работает хорошо. Теперь у нас есть сценарий, в котором нам нужно скопировать несколько листов из разных книг и поместить их в одну книгу (как несколько.
У меня есть 3 книги, а именно: A, B и C. Я кодирую макрос VBA внутри A, чтобы скопировать содержимое диапазона ячеек определенного листа от B до C. Dim wb_TC_PBS As Excel.Workbook Dim wb_SPO_PBS As.
Я делаю некоторые функции copy-paste в VBA. Я должен скопировать всю строку, если значение в cell A1 совпадает со значением в другой книге. Допустим (имя листа: Sheet1): На этом листе все значения в.
Я отвечаю за очень большую таблицу Excel 2010 со ссылками на все виды внешних источников данных, включая Bloomberg, 65 листов с модулями vba и ссылками на другие надстройки vba. Я заметил, что.
Я нахожусь в процессе рефакторинга огромной рабочей книги с большим количеством устаревших частей, избыточных вычислений, перекрестных зависимостей и т. д. В основном, я пытаюсь удалить ненужные.
У меня есть рабочая книга с несколькими листами, один из которых является панелью мониторинга, а другой содержит отчет, содержащий диаграммы, основанные на данных, содержащихся на других листах. У.
у меня есть рабочая тетрадь 1 со 100 листами. у меня есть рабочая тетрадь 2 С 200 листами. мне нужно выполнить 2 задания: Для этих существующих листов (одно и то же имя листа в обеих книгах) я хочу.
У меня есть один лист с кодом VBA со многими переменными и константами, и я хотел бы использовать эти переменные даже в коде VBA другого листа. К сожалению, код разделен между листами и требует.
Я хочу скопировать рабочий лист и поместить его DIRECTLY после другого листа. Но у меня возникают проблемы, когда речь идет о скрытых листах. Используя Excel 2013, я открываю новую книгу. Добавьте.
Копирование модуля макроса в другую книгу
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Если в книге есть макрос Visual Basic для приложений (VBA), который вы хотите использовать в другом месте, вы можете скопировать модуль, содержащий этот макрос, в другую открытую книгу с помощью редактора Visual Basic (VBE).
Макросы и средства VBA находятся на вкладке Разработчик, которая по умолчанию скрыта, поэтому сначала нужно включить ее.
В Windowsперейдите в раздел Параметры _Гт_ файла _гт_ настроить ленту.
Для Macперейдите на вкладку _Гт_ параметры Excel. _гт_ ленты _амп_ Toolbar.
Затем в разделе Настройка ленты в разделе Основные вкладкиустановите флажок разработчик .
Общие сведения о макросах и языке VBA
Если вы не знакомы с макросами и VBA в целом, вы можете получить следующие сведения.
Макрос — это Макрокоманда или набор действий, которые можно использовать для автоматизации задач.
Вы можете записывать макросы с помощью команды » записать макрос » на вкладке » разработчик «.
Макросы записываются на языке программирования VBA.
Вы можете просматривать и редактировать макросы в редакторе Visual Basic — окне, которое открывается в Excel. Ниже приведен пример окна VBE для Windows:
Макросы с именами сделатьячейкузеленой и установитьвысотустроки находятся в модуле с именем Module1, который хранится в Книга1.
Копирование модуля из одной книги в другую
Откройте книгу, содержащую макрос, который нужно скопировать, и книгу, в которую ее нужно скопировать.
На вкладке разработчик нажмите кнопку Visual Basic , чтобы открыть Редактор Visual Basic.
В редакторе Visual Basic в меню вид выберите пункт Обозреватель проектов или нажмите клавиши CTRL + R .
В области » Обозреватель проектов » перетащите модуль с макросом, который вы хотите скопировать в конечную книгу. В данном случае мы копируем Module1 из book2. xlsm в Книга1. xlsm.
Module1 копируется из book2. xlsm
Копия Module1 скопирована в Книга1. xlsm
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.
11.5 Коллекция Sheets и объект Worksheet , их свойства и методы
Объект Excel.Worksheet, программное создание, обнаружение, удаление листа Excel средствами VBA, свойства, методы и события объекта Excel.Worksheet
В Word ниже объекта Application и Document начинались уже объекты непосредственно для работы с текстом — Selection, Range и т.п. В Excel между объектом рабочей книги и ячейками есть еще один промежуточный объект — объект Worksheet (лист). Объекты Worksheet в книге объединены в коллекцию Sheets.
Чаще всего для ввода данных в Excel (напрямую или из базы данных) нам потребуется в первую очередь определиться с листом, на который пойдет ввод данных — либо просто выбрать его, либо вначале создать, а потом выбрать.
Процесс создания выглядит очень просто:
Dim oExcel As New Excel.Application ‘Запускаем Excel
oExcel.Visible = True ‘Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add () ‘Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Add() ‘ Создаем новый лист
oSheet.Name = «Новый лист» ‘Присваиваем ему имя «Новый лист»
Метод Add() для коллекции Worksheets принимает несколько необязательных параметров, главная задача которых — определить, между какими существующими листами будет вставлен новый лист. Если ничего не указывать, то новый лист будет помещен самым первым.
Часто встречается и другая задача — просто найти нужный лист среди листов книги, например, если мы открыли существующую книгу. Сделать это очень просто, поскольку коллекция Worksheets умеет работать с именами листов. Ниже приведен пример, в котором мы так же запускаем Excel и создаем новую книгу, но при этом находим лист с именем «Лист1» и переименовываем его в «Новый лист»:
Dim oExcel As New Excel.Application ‘Запускаем Excel
oExcel.Visible = True ‘Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add() ‘Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Item(«Лист 1») ‘ Находим Лист1
oSheet.Name = «Новый лист» ‘Присваиваем ему имя «Новый лист»
Обратите внимание, что в английской версии Excel этот код, скорее всего, не пройдет, поскольку листы там по умолчанию называются «Sheet1», «Sheet2» и т.п. Если вы в вашем коде используете имена листов по умолчанию и при этом вашей программе придется работать на компьютерах с разноязычными версиями Excel, обязательно предусмотрите дополнительные проверки или просто используйте номера листов вместо их имен.
У коллекции Sheets, помимо привычных нам свойств и методов ( Count, Item, Add(), Delete()) и свойств и методов, которые удобнее применять для объекта Worksheet ( Visible(), Copy(), Move(), PrintOut(), PrintPreview(), Select()) — поскольку все равно указывать конкретный лист — есть и один специфический метод FillAcrossSheets() — скопировать объект диапазона Range (варианты: полностью, только содержимое, только оформление) во все листы данной книги.
У объекта Worksheet — множество важных свойств и методов:
- Cells — одно из наиболее часто используемых свойств объекта Worksheet. Работает точно так же, как и рассмотренное выше одноименное свойство объекта Application — за исключением того, что вам больше не нужно ограничиваться только активным листом. Аналогично работают свойства Columns и Rows.
- EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге.
- EnableSelection — возможность запретить выделять на листе: все, ничего не запрещать, или разрешить выделять только незаблокированные ячейки.
- Next — возможность получить ссылку на следующий лист в книге. Previous — то же самое для предыдущего листа.
- PageSetup — как и в Word, возможность получить объект PageSetup, при помощи которого можно настроить те же параметры, что и через меню Файл ->Параметры страницы.
- свойство Protection позволяет получить объект Protection, при помощи которого можно запретить пользователю вносить изменения в лист Excel. Настройке параметров защиты также служат и другие свойства, названия которых начинаются на Protection.
- QueryTables — исключительно важное свойство. Оно возвращает коллекцию QueryTables — набор объектов QueryTable, которые, в свою очередь, представляют данные, полученные из внешних источников (как правило, из баз данных).
- Range — самое важное свойство объекта Worksheet. Возвращает объект Range (диапазон ячеек), который в объектной модели Excel занимает примерно такое же место, что и одноименный объект в объектной модели Word. Этот объект будет рассматриваться ниже.
- Type — возможность определить тип данного листа. Обычно используются два типа: xlWorksheet (обычный лист) и xlChart (диаграмма).
- UsedRange — возвращает объект Range, представляющий собой прямоугольную область, включающую все непустые ячейки. Удобно для целей копирования или форматирования.
- Visible — возможность спрятать лист с глаз пользователя (например, если он используется для служебных целей).
Некоторые важные методы объекта Worksheet:
- методы Activate() , Calculate(), Copy(), Paste(), Delete(), Move(), Evaluate(), Select(), SaveAs(), PrintOut(), PrintPreview(), Protect(), Unprotect()нам уже знакомы . Отличие заключается только в том, что теперь эти методы могут применяться для выбранного вами листа.
- метод PivotTables() возвращает коллекцию очень интересных объектов PivotTable (сводная таблица), которые будут рассматриваться ниже;
- метод Scenarios() возвращает коллекцию Scenarios, состоящую из объектов Scenario (сценарии). Сценарии — это именованные наборы вводных данных, которые можно использовать для проверки различных сценариев (разные суммы продаж, уровни налогов, расходов и т.п.)
- SetBackgroundPicture() — возможность назначить листу фоновое изображение (естественно, желательно, чтобы оно было полупрозрачное — «водяной знак», иначе на его фоне будет трудно читать текст в ячейках).
- ShowAllData() — показать все скрытые и отфильтрованные данные на листе.
Самое важное событие объекта Worksheet — это, конечно, Change. Существует множество практических задач, когда изменение пользователем значения ячейки должно приводить к изменению значения в ячейке другого листа/рабочей книги Excel или даже в базе данных. Другая ситуация, в которой используется это события — сложная проверка вводимого пользователем значения (например, опять-таки через обращение к базе данных). Эта событийная процедура работает со специальным параметром Target — то есть объектом Range, представляющим изменившуюся ячейку. При помощи свойств и методов объекта Range вы можете получить информацию об изменившемся значении, столбце и строке, в котором произошло изменение и т.п.
У объекта Worksheet есть еще два очень удобных события (их сильно не хватает объекту Document в Word). Это — события BeforeRightClick() и BeforeDoubleClick(). Как понятно из названия, первое событие позволяет перехватывать щелчок правой кнопкой мыши по любому месту в листе, а второе — двойной щелчок мышью. При помощи этих событий вы можете назначить свою реакцию (открытие контекстных меню, выдачу предупреждающих сообщений, переход в другой режим работы и т.п.) на действия пользователя.