Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate 'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste 'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("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").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("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.Close abook.Activate End Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.
Метод Range.Cut
Range.Cut – это метод, который вырезает объект Range (диапазон ячеек) в буфер обмена или перемещает его в указанное место на рабочем листе.
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена. |
Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.
Метод Range.Copy
Range.Copy – это метод, который копирует объект Range (диапазон ячеек) в буфер обмена или в указанное место на рабочем листе.
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена. |
Метод Worksheet.Paste
Worksheet.Paste – это метод, который вставляет содержимое буфера обмена на рабочий лист.
Синтаксис
Worksheet.Paste (Destination, Link) |
Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект. |
Link | Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию). |
В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.
Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).
Примеры
Вырезание и вставка диапазона одной строкой (перемещение):
Range(«A1:C3»).Cut Range(«E1») |
Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Range(«A1:C3»).Cut ActiveSheet.Paste Range(«E1») |
Копирование и вставка диапазона одной строкой:
Range(«A18:C20»).Copy Range(«E18») |
Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Range(«A18:C20»).Copy ActiveSheet.Paste Range(«E18») |
Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:
Range(«A1»).Copy Range(«B1:D10») |
Home / VBA / VBA Copy Range to Another Sheet + Workbook
To copy a cell or a range of cells to another worksheet you need to use the VBA’s “Copy” method. In this method, you need to define the range or the cell using the range object that you wish to copy and then define another worksheet along with the range where you want to paste it.
Copy a Cell or Range to Another Worksheet
Range("A1").Copy Worksheets("Sheet2").Range("A1")
- First, define the range or the cell that you want to copy.
- Next, type a dot (.) and select the copy method from the list of properties and methods.
- Here you’ll get an intellisense to define the destination of the cell copied.
- From here, you need to define the worksheet and then the destination range.
Now when you run this code, it will copy cell A1 from the active sheet to the “Sheet2”. There’s one thing that you need to take care that when you copy a cell and paste it to a destination it also pastes the formatting there.
But if you simply want to copy the value from a cell and paste it into the different worksheets, consider the following code.
Worksheets("Sheet2").Range("A1") = Range("A1").Value
This method doesn’t use the copy method but simply adds value to the destination worksheet using an equal sign and using the value property with the source cell.
Copy Cell from a Different Worksheet
Now let’s say you want to copy a cell from a worksheet that is not active at the time. In this case, you need to define the worksheet with the source cell. Just like the following code.
Worksheets("sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1")
Copy a Range of Cells
Range("A1:A10").Copy Worksheets("Sheet2").Range("A1:A10")
Range("A1:A10").Copy Worksheets("Sheet2").Range("A1")
Copy a Cell to a Worksheet in Another Workbook
When workbooks are open but not saved yet.
Workbooks("Book1").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("Book2").Worksheets("Sheet1").Range("A1")
When workbooks are open and saved.
Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1")
Copy a Cell to a Worksheet in Another Workbook which is Closed
'to open the workbook that is saved in a folder on your system _
change the path according to the location you have in your _
system
Workbooks.Open "C:UsersDellDesktopmyFile.xlsx"
'copies cell from the book1 workbook and copy and paste _
it to the workbook myFile
Workbooks("Book1").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("myFile").Worksheets("Sheet1").Range("A1")
'close the workbook and after saving
Workbooks("myFile").Close SaveChanges:=True
Related: How to Open a Workbook using VBA in Excel
More Tutorials
- Count Rows using VBA in Excel
- Excel VBA Font (Color, Size, Type, and Bold)
- Excel VBA Hide and Unhide a Column or a Row
- Excel VBA Range – Working with Range and Cells in VBA
- Apply Borders on a Cell using VBA in Excel
- Find Last Row, Column, and Cell using VBA in Excel
- Insert a Row using VBA in Excel
- Merge Cells in Excel using a VBA Code
- Select a Range/Cell using VBA in Excel
- SELECT ALL the Cells in a Worksheet using a VBA Code
- ActiveCell in VBA in Excel
- Special Cells Method in VBA in Excel
- UsedRange Property in VBA in Excel
- VBA AutoFit (Rows, Column, or the Entire Worksheet)
- VBA ClearContents (from a Cell, Range, or Entire Worksheet)
- VBA Enter Value in a Cell (Set, Get and Change)
- VBA Insert Column (Single and Multiple)
- VBA Named Range | (Static + from Selection + Dynamic)
- VBA Range Offset
- VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
- VBA Wrap Text (Cell, Range, and Entire Worksheet)
- VBA Check IF a Cell is Empty + Multiple Cells
⇠ Back to What is VBA in Excel
Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes
Подскажите, как можно с помощью VBA в текущей книге выделить определенный диапазон, открыть другую книгу, ввести там пароль для редактирования, скопировать туда данные (с всем форматированием) и закрыть книгу? |
|
ran Пользователь Сообщений: 7091 |
Подсказываю. |
Serge Пользователь Сообщений: 11308 |
{quote}{login=RAN}{date=21.08.2011 09:49}{thema=}{post} |
Спасибо, я пробовал макрорекодорам, но там не пишется открытие файла, а тем более ввод пароля. Копирую диапазон а дальше запись не идет |
|
Serge Пользователь Сообщений: 11308 |
У меня пишется: Sub Макрос2() Workbooks.Open Filename отвечает за открытие файла по указанному пути. |
Без пароля пробую так, но что-то не получается. Range(«C2:N33»).Select ‘выделяют диапазон в текущей книге |
|
ran Пользователь Сообщений: 7091 |
А зачем New Excel.Application? |
RAN, не знаю, я VBA не знаю, пробовал просто изменить другой макрос. Сейчас понимаю, что это не нужно было |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Ясен пень, Вы создали другую инстанцию Экса, скрыли ее и что Вы куда копируете? Каким боком тут Ex.ActiveWorkbook? Вам бы правила почитать. Оч полезно. Для Вас и нас. Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Это я G3org отвечал. Не анониму. Я сам — дурнее всякого примера! … |
Serge Пользователь Сообщений: 11308 |
Мы поняли :-))) |
ran Пользователь Сообщений: 7091 |
Sub www() |
Выбрал способ Serge 007, т.к он мне более понятен. Sub Макрос2() |
|
ran Пользователь Сообщений: 7091 |
А ежели не так |
Выдает ошибку на Selection.Paste |
|
Serge Пользователь Сообщений: 11308 |
{quote}{login=RAN}{date=21.08.2011 10:54}{thema=}{post}А ежели так |
Нужно как текст, с форматированием (ширина столбцов, цвет текста и ячеек), но можно и формулами. |
|
ran Пользователь Сообщений: 7091 |
Погорячился с Selection |
RAN, спасибо это помогло. |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Чудите… Примерно: Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Забыл сказать — в модуль листа откуда. Я сам — дурнее всякого примера! … |
Доброго времени суток! |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
{quote}{login=АнЯ-2}{date=24.02.2012 05:55}{thema=}{post}…необходимо скопировать таблицу в другой файл (разумеется, не открывая 2-ой файл)…{/post}{/quote}С этим на сайт Павла Глобы:-) 33355 Я сам — дурнее всякого примера! … |
АнЯ-2 Гость |
#25 25.02.2012 09:19:32 )) Копирует необходимый диапазон: Открывает 2-ой файл: С какого места будет происходить «вставка»: «Вставляет», сохраняет, закрывает: С этим проблем нет, но как выяснилось — Excele не копирует таблицу (чтобы во 2-ой файле были работоспособны фильтры таблицы). |
Присвоение объекта переменой — оператор Set
Книгу Вы разместили в переменной
Set WB = Application.Workbooks.Open("C:UsersS.BochkarevDesktopppweb2.xlsm")
Но лист — тоже объект, нужно
Set Sht = WB.Sheets("Sheet1")
А вот ячейка как объект не нужна, достаточно в переменную занести значение:
curCell = .Cells(Counter, 3).Value
Application.Workbooks.Open — открыли книгу. Нередко книга после открытия пересчитывается (наличие имен, УФ, летучих формул…). При закрытии Excel попросит подтверждения действия. Правильно — отключать сообщения:
Application.DisplayAlerts = False
WB.Close
Application.DisplayAlerts = True
После завершения работы макроса переменные очищаются, но бывают случаи, когда память остается занятой, поэтому желательно чистить принудительно
Set WB = Nothing: Set Sht = Nothing
End Sub
Непонятно, зачем в цикле заполнять одну ячейку (Sheets(«Остатки»).Cells(1, 1).Value) 20 раз… Бессмысленно.
Вариант. Загружать объекты в память с помощью With
. Ячейка для вставки тоже меняется (как нужно — смотрите по задаче)
Sub объем()
Dim sht As Worksheet
Dim i As Long
With Application: .ScreenUpdating = False: .DisplayAlerts = False: End With
Set sht = TnisWorkbook.Sheets("Остатки")
'Открываем другой файл'
With Application.Workbooks.Open("C:UsersS.BochkarevDesktopppweb2.xlsm")
With .Sheets("Sheet1")
'Обрабатываем диапазон'
For i = 1 To 20
'значение ячейки из другого файла вставляем куда надо'
sht.Cells(i, 1).Value = .Cells(i, 3).Value
Next i
End With
.Close
End With
With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With
Set sht = Nothing
End Sub