Ошибка при копировании данных с одного листа на другой с помощью vba - PullRequest
1 голос
/ 17 января 2020

При копировании данных из Sheet1 в Sheet2 я получаю

"Ошибка времени выполнения" 1004 ": ошибка приложения или объекта"

Я использую код VBA:

lnRow = 33
Sheets("Sheet1").Range("A3:C14").Copy Destination:=Sheets("Sheet2").Range(Cells(lnRow + 3, 1))

Как я могу скопировать данные из Sheet1 в Sheet2, используя column числа?

Ответы [ 2 ]

2 голосов
/ 17 января 2020

На самом деле проблемная c часть - Sheets("Sheet2").Range(Cells(lnRow + 3, 1)), и с ней есть 2 проблемы.

1. Проблема

Для объекта Cells не указано, в каком листе он находится, поэтому VBA принимает ActiveSheet. Это то же самое, что и запись Sheets("Sheet2").Range(ActiveSheet.Cells(lnRow + 3, 1)).

Теперь, если активным листом является , а не Sheet2, тогда код завершится ошибкой, поскольку объект Range не находится на том же листе, что и объект Cells, и это недопустимо.

2. Ошибка

В соответствии с документацией свойства Worksheet.Range он принимает 2 аргумента Range(Cell1, Cell2), где второй является необязательным, но , только если первый является адресной строкой .

Cell1

  • A Строка , которая является ссылкой на диапазон при использовании один аргумент .
  • Либо String , являющаяся ссылкой на диапазон, либо Range объект, когда используются два аргумента.

Это означает, что вы можете использовать следующий синтаксис:

  • Range("Address")
  • Range("Address", "Address")
  • Range(Cells(row, column), Cells(row, column))

, но вы не можете использовать

  • Range(Cells(row, column))

, поскольку, если используется только один аргумент, это должна быть строка /адрес. На самом деле, последний не существует, потому что вы можете использовать Cells напрямую, без использования Range: Cells(row, column)


Так что в вашем случае это означает, что вы должны использовать Cells напрямую:

Sheets("Sheet2").Cells(lnRow + 3, 1)
0 голосов
/ 17 января 2020

Если вы хотите использовать метод ячейки, то ошибка связана с использованием range(cells(3,1)). Вместо этого используйте sheets("Sheet1").range(cells(3,1),cells(4,1)). В противном случае вы можете опустить ячейки и указать диапазон как обычно, например range("C4:D5").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...