Как в макросе 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`, то диапазон будет изменяться соответственно. Вы также можете изменять диапазон назначения с помощью аналогичного подхода, если хотите использовать переменные для указания места вставки.
Добрый день! <br/> Примерно по такой логике: <br/> ' открыты обе книги <br/> <br/> '   Set rgCopy = wb1.Sheets(1).Range(Cells(8, 1), Cells(65, 13)) <br/> '     rgCopy.Copy Destination:=wb2.Sheets(1).Range("A8:M65") <br/> <br/> Application.CutCopyMode = False <br/> <br/> Dim wb1 As Workbook <br/> Set wb1 = ActiveWorkbook <br/> <br/> <br/> Dim wb2 As Workbook <br/> Set wb2 = Workbooks("C:\Users\DataFile.xlsm") <br/> <br/> wb1.Activate <br/> wb1.Sheets(1).Range(Cells(8, 1), Cells(65, 13)).Copy <br/> <br/> wb2.Activate <br/> wb2.Sheets(1).Range("A8").Select <br/> Selection.Paste <br/> <br/> Application.CutCopyMode = True
Похожие вопросы