На самом деле проблемная 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)