Причиной этой ошибки обычно является отсутствие ключевого слова Set
, например,
Dim w as Worksheet
w = Sheet1 ' throws error 91
' Correct syntax:
' Set w = Sheet1
Если вы сообщите нам, в какой строке происходит ошибка, будет получен более конкретный ответ. Синтаксис вашего примера кода выглядит нормально, но ошибка может быть связана с другой строкой в вашем коде, возможно, не показанной в вашем вопросе.
Есть ли более «эффективный» способ выбора диапазона? Лично мне не нравится метод, который вы показываете, со строками в качестве аргументов для Cells
. Струны являются грязными и часто приводят к ошибкам и, следовательно, к потере эффективности работы. Почему бы и нет:
Sheet1.Range(Cells(2,18),Cells(40,11)).Select
' or
Sheet1.Cells(2,11).Resize(39,8).Select
' or
Sheet1.Range("K2").Resize(39,8).Select
Или, определите K2: Q40 как именованный диапазон на вашем листе, назвав его, например, "myRange", и сделайте это:
Sheet1.Range("myRange").Select ' My personal favourite
Но почему вы используете Select
? Это обычно не обязательно. Просто напишите:
Sheet1.Range("myRange").Copy
Но тогда я мог бы спросить, почему вы используете Copy
, что само по себе грязный метод? ...