Как в макросе Excel скопировать диапазон ячеек из одной книги в другую?

Здравствуйте! Я пытаюсь скопировать диапазон ячеек из одной книги Excel в другую. Когда я использую следующий код:<br/><br/><pre><code class="vbscript">Set rgCopy = wb1.Sheets(1).Range("A8:M65")
rgCopy.Copy Destination:=wb2.Sheets(1).Range("A8:M65")</code></pre><br/> он работает корректно. Однако, поскольку диапазон меняется каждый раз, мне нужно использовать переменные для указания начала и конца диапазона. При попытке сделать это следующим образом:<br/><br/><pre><code class="vbscript">Set rgCopy = wb1.Sheets(1).Range(Cells(8, 1), Cells(65, 13))
rgCopy.Copy Destination:=wb2.Sheets(1).Range("A8:M65")</code></pre><br/> код не работает. Как правильно реализовать копирование произвольного диапазона из одной книги в другую?
  • 16 сентября 2024 г. 9:53
Ответы на вопрос 2
Если вы хотите использовать переменные для определения границ диапазона, вам нужно убедиться, что вы правильно ссылаетесь на объект `Cells`, указывая полные ссылки на листы. Вот правильный способ изменить ваш код:

```vbscript
Dim startRow As Integer
Dim startCol As Integer
Dim endRow As Integer
Dim endCol As Integer

startRow = 8
startCol = 1
endRow = 65
endCol = 13

Dim rgCopy As Range

' Правильная ссылка на Cells в данном случае
Set rgCopy = wb1.Sheets(1).Range(wb1.Sheets(1).Cells(startRow, startCol), wb1.Sheets(1).Cells(endRow, endCol))
rgCopy.Copy Destination:=wb2.Sheets(1).Range("A8")

' Можно использовать диапазон назначения с переменными так же
' wb2.Sheets(1).Range(wb2.Sheets(1).Cells(destinationStartRow, destinationStartCol), wb2.Sheets(1).Cells(destinationEndRow, destinationEndCol))
```

### Объяснение:

1. **Определение диапазона**: Теперь вы используете `wb1.Sheets(1).Cells(...)`. Это гарантирует, что `Cells` относится к правильному листу в вашей книге `wb1`.

2. **Копирование в другую книгу**: Вы можете просто указать верхний левый угол диапазона (например, `Range("A8")`), куда хотите вставить скопированные данные.

Таким образом, если вы будете изменять значения переменных `startRow`, `startCol`, `endRow` и `endCol`, то диапазон будет изменяться соответственно. Вы также можете изменять диапазон назначения с помощью аналогичного подхода, если хотите использовать переменные для указания места вставки.
Добрый день! 
Примерно по такой логике:
' открыты обе книги

' Set rgCopy = wb1.Sheets(1).Range(Cells(8, 1), Cells(65, 13))
' rgCopy.Copy Destination:=wb2.Sheets(1).Range("A8:M65")

Application.CutCopyMode = False

Dim wb1 As Workbook
Set wb1 = ActiveWorkbook


Dim wb2 As Workbook
Set wb2 = Workbooks("C:\Users\DataFile.xlsm")

wb1.Activate
wb1.Sheets(1).Range(Cells(8, 1), Cells(65, 13)).Copy

wb2.Activate
wb2.Sheets(1).Range("A8").Select
Selection.Paste

Application.CutCopyMode = True
Похожие вопросы