Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код 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
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
Sub Do_It() ' ' Do_It Макрос ' ' Sheets("Результат").Select Rows("1:1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Delete Shift:=xlUp Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Columns("A:A").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Columns("A:A").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Selection.ColumnWidth = 2.43 Range("B2:C9").Select Columns("B:B").ColumnWidth = 25.57 ActiveWindow.ScrollWorkbookTabs Sheets:=-9 Range("B2").Select ActiveCell.FormulaR1C1 = "ПЕРЕВОЗКА" Range("B3").Select ActiveCell.FormulaR1C1 = "ЭКСПЕДИРОВАНИЕ" Range("B4").Select ActiveCell.FormulaR1C1 = "ДОП.УСЛУГИ" Range("B5").Select ActiveCell.FormulaR1C1 = "СТРАХОВКА" Range("B6").Select ActiveCell.FormulaR1C1 = "ОТВЕТХРАНЕНИЕ" Range("B7").Select ActiveCell.FormulaR1C1 = "РЕЙСЫ" Range("B8").Select ActiveCell.FormulaR1C1 = "ОПЛАТЫ" Rows("1:1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("C2").Select ActiveCell.FormulaR1C1 = "ГЛАВДОСТАВКЕ" Range("D2").Select ActiveCell.FormulaR1C1 = "ПАРТНЕРУ" Range("C3").Select Application.WindowState = xlNormal ActiveCell.FormulaR1C1 = _ "=VLOOKUP(""ИТОГО:"",'ГД - Перевозка'!C[14]:C[18],5,FALSE)" Range("C4").Select ActiveWindow.ScrollWorkbookTabs Sheets:=-6 Sheets("ГД - Перевозка").Select ActiveWindow.ScrollWorkbookTabs Sheets:=6 Sheets("Результат").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(""ИТОГО:"",'ГД - Эксп-е'!C[4]:C[6],3,FALSE)" Range("C5").Select Sheets("ГД - Эксп-е").Select Sheets("Результат").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(""ИТОГО:"",'ГД - Доп. услуги'!C[4]:C[6],3,FALSE)" Range("C6").Select ActiveWindow.ScrollWorkbookTabs Sheets:=-6 Sheets("ГД - Доп. услуги").Select ActiveWindow.ScrollWorkbookTabs Sheets:=6 Sheets("Результат").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(""ИТОГО:"",'ГД - Страховка'!C[1]:C[2],2,FALSE)" Range("C7").Select Sheets("ГД - ОТВ").Select ActiveWindow.ScrollWorkbookTabs Sheets:=5 Sheets("Результат").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(""ИТОГО:"",'ГД - ОТВ'!C[1]:C[2],2,FALSE)" Range("C8").Select ActiveCell.FormulaR1C1 = "0" Range("C9").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(""ИТОГО:"",'ГД - Оплаты'!C[3]:C[4],2,FALSE)" Range("C10").Select Sheets("ГД - Оплаты").Select Sheets("Результат").Select Range("D3").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(""ИТОГО:"",'П-р - Перевозка'!C[13]:C[17],5,FALSE)" Range("D4").Select Sheets("Результат").Select Range("D4").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(""ИТОГО:"",'П-р - Эксп-е'!C[3]:C[5],3,FALSE)" Range("D5").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(""ИТОГО:"",'П-р - Доп. услуги'!C[3]:C[5],3,FALSE)" Range("D6").Select ActiveCell.FormulaR1C1 = "0" Range("D7").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(""ИТОГО:"",'П-р - ОТВ'!C:C[1],2,FALSE)" Range("D8").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(""ИТОГО:"",'П-р - Рейсы'!C[-1]:C,2,FALSE)" Range("D9").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(""ИТОГО:"",'П-р - Оплаты'!C[2]:C[3],2,FALSE)" Range("C10").Select ActiveCell.FormulaR1C1 = "ИТОГО:" Range("D10").Select ActiveCell.FormulaR1C1 = _ "=IF(SUM(R[-7]C[-1]:R[-1]C[-1])-SUM(R[-7]C:R[-1]C)=R[2]C[1],SUM(R[-7]C[-1]:R[-1]C[-1])-SUM(R[-7]C:R[-1]C),""ОШИБКА"")" ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value Range("D10").Select Rows("11:12").Select Selection.Delete Shift:=xlUp Dim Ilastrow& Ilastrow = Cells(Rows.Count, 1).End(xlUp).Row Range("D12:E12" & Ilastrow).Cut Range("C12").Select ActiveSheet.Paste Dim objA As Range, objB As Range, objC As Range, objD As Range, objE As Range Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) = "ИТОГО ПО СЧЕТУ:" Set objA = ActiveSheet.UsedRange.Find("ИТОГО:") Set objB = ActiveSheet.UsedRange.Find("ИТОГО ПО СЧЕТУ:") If objA.Offset(0, 1) = objB.Offset(-1, 1) Then objB.Offset(0, 1) = objA.Offset(0, 1) If objA.Offset(0, 1) <> objB.Offset(-1, 1) Then objB.Offset(0, 1) = WorksheetFunction.Sum(objA.Offset(0, 1), Range(objA.Offset(2, 1), objB.Offset(-1, 1))) Sheets("ГД - Перевозка").Select ActiveSheet.Range("$A$1:$X$144").AutoFilter Field:=23, Criteria1:="=ДА", _ Operator:=xlOr, Criteria2:="=" Sheets("П-р - Перевозка").Select ActiveWindow.ScrollWorkbookTabs Sheets:=2 ActiveSheet.Range("$A$1:$X$236").AutoFilter Field:=23, Criteria1:="=ДА", _ Operator:=xlOr, Criteria2:="=" objB.Offset(2, 0) = "КУБЫ" objB.Offset(2, 1) = "ПРИБЫЛЬ" objB.Offset(2, 2) = "ФРАХТ" objB.Offset(3, -1) = "ГД ПЕРЕВОЗКА" objB.Offset(4, -1) = "П-Р ПЕРЕВОЗКА" objB.Offset(3, 0).FormulaR1C1 = "=SUBTOTAL(9,'ГД - Перевозка'!C[6])" objB.Offset(3, 1).FormulaR1C1 = "=SUBTOTAL(9,'ГД - Перевозка'!C[16])-VLOOKUP(""ИТОГО:"",'ГД - Перевозка'!C[13]:C[18],4,FALSE)-(SUBTOTAL(9,'ГД - Перевозка'!C[18])-VLOOKUP(""ИТОГО:"",'ГД - Перевозка'!C[13]:C[18],6,FALSE))" objB.Offset(3, 2).FormulaR1C1 = "=SUBTOTAL(9,'ГД - Перевозка'!C[14])-VLOOKUP(""ИТОГО:"",'ГД - Перевозка'!C[12]:C[17],3, FALSE)-SUBTOTAL(9,'ГД - Перевозка'!C[11])" objB.Offset(4, 0).FormulaR1C1 = "=SUBTOTAL(9,'П-Р - Перевозка'!C[6])" objB.Offset(4, 1).FormulaR1C1 = "=SUBTOTAL(9,'П-Р - Перевозка'!C[16])-VLOOKUP(""ИТОГО:"",'П-Р - Перевозка'!C[13]:C[18],4,FALSE)-(SUBTOTAL(9,'П-Р - Перевозка'!C[18])-VLOOKUP(""ИТОГО:"",'П-Р - Перевозка'!C[13]:C[18],6,FALSE))" objB.Offset(4, 2).FormulaR1C1 = "=SUBTOTAL(9,'П-Р - Перевозка'!C[14])-VLOOKUP(""ИТОГО:"",'П-Р - Перевозка'!C[12]:C[17],3, FALSE)-SUBTOTAL(9,'П-Р - Перевозка'!C[11])" Dim wb As Workbook, s s = MSGBOX("ВНЕСТИ ИЗМЕНЕНИЯ В ВАЛ?", vbYesNo + vbExclamation + vbDefaultButton1, "Что делать?") If s = vbNo Then objB.Offset(5, -1) = "ИТОГО ВАЛ:" Sheets("Результат").Select Set objC = ActiveSheet.UsedRange.Find("КУБЫ") Set objD = ActiveSheet.UsedRange.Find("ИТОГО ВАЛ:") objD.Offset(0, 1) = WorksheetFunction.Sum(Range(objC.Offset(1, 0), objD.Offset(-1, 1))) objD.Offset(0, 2) = WorksheetFunction.Sum(Range(objC.Offset(1, 1), objD.Offset(-1, 2))) objD.Offset(0, 3) = WorksheetFunction.Sum(Range(objC.Offset(1, 2), objD.Offset(-1, 3))) 'Действия, если "нет" Else With Application.FileDialog(msoFileDialogOpen) .Show If .SelectedItems.Count = 0 Then Exit Sub Else Set wb = Workbooks.Open(.SelectedItems(1)) End With ' Выбираем диапазон. Копипастим. ' Макрос далее подбивает сумм значений (с этим Вы справились) wb.Close False 'Закрываем книгу без сохранения End If End Sub
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub asdf() Dim x As Integer, z As Integer, y As Integer, WB1 As Workbook, Wb2 As Workbook Dim Sh1 As Worksheet, Sh2 As Worksheet Set WB1 = Workbooks("тест1.xlsm") Set Wb2 = Workbooks("тест2.xlsm") WB1.Activate x = Cells(Rows.Count, 1).End(xlUp).Row Wb2.Activate y = Cells(Rows.Count, 1).End(xlUp).Row z = Rows("1:1").Find(What:="раз", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column WB1.Activate WB1.Sheets(1).Range(Cells(x + 1, 1), Cells(x + y - 1, 1)).Value = Wb2.Sheets(1).Range(Cells(2, z), Cells(y, z)).Value ' первый вариант копирования Wb2.Activate Wb2.Sheets(1).Range(Cells(2, z), Cells(y, z)).Copy WB1.Sheets(1).Range(Cells(x + 1, 1), Cells(x + y - 1, 1)) 'второй вариант копирования End Sub |
To answer your question «Why is B running, but not A»..
In A:
currentWorksheet = xlWorkBook.Sheets.Item("Command Group")
First, you are missing SET
for your object assignment. Secondly, you are using Workbook.Sheets.Item()
which returns a Sheets object
. A Sheets object
can represent either a chart sheet, or a work sheet, and therefore does not have a .Range()
method.
You can verify this by stepping over this code:
Dim currentWorksheet As Sheets
Set currentWorksheet = ThisWorkbook.Sheets.Item("Command Group")
excelRange = currentWorksheet.Range("A1:A21")
It will error, and tell you that the method is not found.
To Fix A: Ensure you get back a Worksheet object by using strong typing.
Dim currentWorksheet as Worksheet
Set currentWorksheet = ThisWorkbook.Sheets.Item("Command Group")
To fix future code and ease the debugging process I highly recommend always declaring Option Explicit
at the top of all your modules.
For brevity you can shorten your code to:
Dim currentWorksheet as Worksheet
Set currentWorksheet = ThisWorkbook.Sheets("Command Group")
Bottom line: Learn 3 different ways to copy and paste cells or ranges in Excel with VBA Macros. This is a 3-part video series and you can also download the file that contains the code.
Skill level: Beginner
Copy & Paste: The Most Common Excel Action
Copy and paste is probably one of the most common actions you take in Excel. It’s also one of the most common tasks we automate when writing macros.
There are a few different ways to accomplish this task, and the macro recorder doesn’t always give you the most efficient VBA code.
In the following three videos I explain:
- The most efficient method for a simple copy and paste in VBA.
- The easiest way to paste values.
- How to use the PasteSpecial method for other paste types.
You can download the file I use in these videos below. The code is also available at the bottom of the page.
Video #1: The Simple Copy Paste Method
You can watch the playlist that includes all 3 videos at the top of this page.
Video #2: An Easy Way to Paste Values
Video #3: The PasteSpecial Method Explained
VBA Code for the Copy & Paste Methods
Download the workbook that contains the code.
'3 Methods to Copy & Paste with VBA
'Source: https://www.excelcampus.com/vba/copy-paste-cells-vba-macros/
'Author: Jon Acampora
Sub Range_Copy_Examples()
'Use the Range.Copy method for a simple copy/paste
'The Range.Copy Method - Copy & Paste with 1 line
Range("A1").Copy Range("C1")
Range("A1:A3").Copy Range("D1:D3")
Range("A1:A3").Copy Range("D1")
'Range.Copy to other worksheets
Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1")
'Range.Copy to other workbooks
Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1")
End Sub
Sub Paste_Values_Examples()
'Set the cells' values equal to another to paste values
'Set a cell's value equal to another cell's value
Range("C1").Value = Range("A1").Value
Range("D1:D3").Value = Range("A1:A3").Value
'Set values between worksheets
Worksheets("Sheet2").Range("A1").Value = Worksheets("Sheet1").Range("A1").Value
'Set values between workbooks
Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").Value = _
Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value
End Sub
Sub PasteSpecial_Examples()
'Use the Range.PasteSpecial method for other paste types
'Copy and PasteSpecial a Range
Range("A1").Copy
Range("A3").PasteSpecial Paste:=xlPasteFormats
'Copy and PasteSpecial a between worksheets
Worksheets("Sheet1").Range("A2").Copy
Worksheets("Sheet2").Range("A2").PasteSpecial Paste:=xlPasteFormulas
'Copy and PasteSpecial between workbooks
Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy
Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteFormats
'Disable marching ants around copied range
Application.CutCopyMode = False
End Sub
Paste Data Below the Last Used Row
One of the most common questions I get about copying and pasting with VBA is, how do I paste to the bottom of a range that is constantly changing? I first want to find the last row of data, then copy & paste below it.
To answer this question, I created a free training video on how to paste data below the last used row in a sheet with VBA. Can I send you the video? Please click the image below to get the video.
Free Training on Macros & VBA
The 3 videos above are from my VBA Pro Course. If you want to learn more about macros and VBA then checkout my free 3-part video training series.
I will also send you info on the VBA Pro Course, that will take you from beginner to expert. Click the link below to get instant access.
Free Training on Macros & VBA
Please leave a comment below with any questions. Thanks!
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код 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
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже. Спасибо за внимание.