Excel vba ячейки другого файла

Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код 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")
  1. First, define the range or the cell that you want to copy.
    1-define-the-range-or-cell
  2. Next, type a dot (.) and select the copy method from the list of properties and methods.
    2-type-a-dot-and-select-the-copy-method
  3. Here you’ll get an intellisense to define the destination of the cell copied.
    3-define-the-destination-of-the-copied-cell
  4. From here, you need to define the worksheet and then the destination range.
    4-define-the-worksheet-and-than-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
    Регистрация: 21.12.2012

    Подсказываю.  
    Нужно написать макрос.

     

    Serge

    Пользователь

    Сообщений: 11308
    Регистрация: 01.01.1970

    {quote}{login=RAN}{date=21.08.2011 09:49}{thema=}{post}  
    Нужно написать макрос.{/post}{/quote}Можно макрорекордером.

     

    Спасибо, я пробовал макрорекодорам, но там не пишется открытие файла, а тем более ввод пароля.  

      Копирую диапазон а дальше запись не идет  
    Range(«C2:N33»).Select  
    Selection.Copy

     

    Serge

    Пользователь

    Сообщений: 11308
    Регистрация: 01.01.1970

    У меня пишется:  

      Sub Макрос2()  
       Range(«A1:B2»).Select  
       Selection.Copy  
       ChDir «C:Documents and SettingsSerge 007Рабочий столПримеры решений»  
       Workbooks.Open Filename:= _  
           «C:Documents and SettingsSerge 007Рабочий столПримеры решенийКнига.xls»  
       Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _  
           xlNone, SkipBlanks:=False, Transpose:=False  
       ActiveWorkbook.Save  
      End Sub  

      Workbooks.Open Filename отвечает за открытие файла по указанному пути.  
    Пароль не ставил, можете добавить сами — методы protect и unprotect.

     

    Без пароля пробую так, но что-то не получается.  

      Range(«C2:N33»).Select  ‘выделяют диапазон в текущей книге  
    Selection.Copy ‘копирую его  
    Dim Ex As New Excel.Application  
    Ex.Workbooks.Open «C:UsersYunDesktoptest.xlsx»  ‘открывают другую книгу  
    Ex.Visible = False  
    Range(«A2»).Select ‘становлюсь на ячейку A2  
    ActiveSheet.Paste ‘вставляю, сохраняю и закрываю  
    Ex.ActiveWorkbook.Save    
    Ex.ActiveWorkbook.Close  
    End Sub

     

    ran

    Пользователь

    Сообщений: 7091
    Регистрация: 21.12.2012

    А зачем New Excel.Application?  
    Чтобы НЕ работало?  
    И не будет.-:)

     
     

    RAN, не знаю, я VBA не знаю, пробовал просто изменить другой макрос. Сейчас понимаю, что это не нужно было

     

    KuklP

    Пользователь

    Сообщений: 14868
    Регистрация: 21.12.2012

    E-mail и реквизиты в профиле.

    Ясен пень, Вы создали другую инстанцию Экса, скрыли ее и что Вы куда копируете? Каким боком тут Ex.ActiveWorkbook? Вам бы правила почитать. Оч полезно. Для Вас и нас.

    Я сам — дурнее всякого примера! …

     

    KuklP

    Пользователь

    Сообщений: 14868
    Регистрация: 21.12.2012

    E-mail и реквизиты в профиле.

    Это я G3org отвечал. Не анониму.

    Я сам — дурнее всякого примера! …

     

    Serge

    Пользователь

    Сообщений: 11308
    Регистрация: 01.01.1970

    Мы поняли :-)))  
    Ты никогда анонимам не отвечаешь ;-)

     

    ran

    Пользователь

    Сообщений: 7091
    Регистрация: 21.12.2012

    Sub www()  
    iwbName = ThisWorkbook.Name  
    ifailName = ThisWorkbook.Path & «» & «Книга4.xls»  
    Set wbTmp = Workbooks.Open(ifailName)  
    Workbooks(iwbName).Sheets(1).Copy After:=wbTmp.Sheets(wbTmp.Sheets.Count)  
    wbTmp.Close True  
    End Sub

     

    Выбрал способ Serge 007, т.к он мне более понятен.  
    ввод пароля написал вот так: ActiveSheet.Unprotect («0000») — в кавычки взял т.к без них 0000 превращаются автоматически в просто 0  
    При запуске макроса, пароль все равно спрашивается, после ввода книга открывается, вставляются данные, но без форматирования (не копируется цвет ячеек). Подскажите почему, пожалуйста  

      Sub Макрос2()  
    Range(«A1:F52»).Select  
    Selection.Copy  
    ChDir «C:UsersYunDesktop»  
    Workbooks.Open Filename:= _  
    C:UsersYunDesktoptest2.xlsx  
    ActiveSheet.Unprotect («0000»)  
    Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _  
    xlNone, SkipBlanks:=False, Transpose:=False  
    ActiveWorkbook.Save  
    ActiveWorkbook.Close  
    End Sub

     

    ran

    Пользователь

    Сообщений: 7091
    Регистрация: 21.12.2012

    А ежели не так  
    Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _  
    xlNone, SkipBlanks:=False, Transpose:=False  
    а так  
    Selection.Paste

     

    Выдает ошибку на Selection.Paste

     

    Serge

    Пользователь

    Сообщений: 11308
    Регистрация: 01.01.1970

    {quote}{login=RAN}{date=21.08.2011 10:54}{thema=}{post}А ежели так  
    Selection.Paste?{/post}{/quote}Автор вроде хотел <<<скопировать туда данные (с всем форматированием) >>>  
    Просто Paste и связи вставит, а надо только данные?..

     

    Нужно как текст, с форматированием (ширина столбцов, цвет текста и ячеек), но можно и формулами.

     

    ran

    Пользователь

    Сообщений: 7091
    Регистрация: 21.12.2012

    Погорячился с Selection  
    Sub Макрос4()  
    ‘  
    ‘ Макрос4 Макрос  
    ‘  
       Range(«A1:A3»).Select  
       Selection.Copy  
       Range(«C6»).Select  
       ActiveSheet.Paste  
    End Sub

     

    RAN, спасибо это помогло.    
    Еще раз всем спасибо за помощь и терпение

     

    KuklP

    Пользователь

    Сообщений: 14868
    Регистрация: 21.12.2012

    E-mail и реквизиты в профиле.

    Чудите… Примерно:  
    Sub Макрос2()  
       With Workbooks.Open(«C:UsersYunDesktoptest2.xlsx»)  
           Me.[A1:F52].Copy .Sheets(1).[a1]
           .Sheets(1).UsedRange.Value = .Sheets(1).UsedRange.Value  
           .Close -1  
       End With  
    End Sub

    Я сам — дурнее всякого примера! …

     

    KuklP

    Пользователь

    Сообщений: 14868
    Регистрация: 21.12.2012

    E-mail и реквизиты в профиле.

    Забыл сказать — в модуль листа откуда.

    Я сам — дурнее всякого примера! …

     

    Доброго времени суток!  
    К сожалению, используя вышеописанные примеры не получилось выполнить следующую задачу:  
    необходимо скопировать таблицу в другой файл (разумеется, не открывая 2-ой файл), причём:  
    1) во 2-ом файле также должны быть работоспособны фильтры таблицы;  
    2) в случае, если во 2-ом файле отсутствуют пользовательские функции 1-ого файла — копировать только значения из 1-ого файла.  
    3) любые ссылки в таблице с других листов 1-ого файла заменяются значениями при переносе на 2-ой файл.  
    4) значение/формула (если не противоречит пункту 3) исходника также переносится во 2-ой файл и вяглядит как значение/формула.

     

    KuklP

    Пользователь

    Сообщений: 14868
    Регистрация: 21.12.2012

    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

    ))  
    Как же всё-таки любят некоторые личности придираться к словам..  
    Имелось в виду: открывается 1-ый файл, нажимается кнопочка (выполняется макрос, который открывает 2-ой файл, копирует всё это дело и закрывает 2-ой файл) и всё, вуаля..  

      Копирует необходимый диапазон:  
    Range(«бла-бла»).Select  
    Selection.Copy  

      Открывает 2-ой файл:  
    Workbooks.Open Filename:= _  
    C:Users»бла-бла»  

      С какого места будет происходить «вставка»:  
    Range(«C6»).Select  

      «Вставляет», сохраняет, закрывает:  
    ActiveSheet.Paste  
    ActiveWorkbook.Save  
    ActiveWorkbook.Close  

      С этим проблем нет, но как выяснилось — Excele не копирует таблицу (чтобы во 2-ой файле были работоспособны фильтры таблицы).  
    По пункту два — в случае, если во 2-ом файле отсутствуют пользовательские функции 1-ого файла — при копировании разными методами выдаёт ошибку «ИМЯ».

    Присвоение объекта переменой — оператор 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
    

    Понравилась статья? Поделить с друзьями:
  • Excel vba ячейка с датой
  • Excel vba ячейка с выпадающим списком
  • Excel vba ячейка cells
  • Excel vba ячейка cell
  • Excel vba это просто