какую ошибку я делаю? - PullRequest
       13

какую ошибку я делаю?

0 голосов
/ 12 августа 2011
sheet1.activate
activesheet.range(cells(2,"Q"),cells(40,"K")).select 'here the error occurs 
selection.copy

Приведенный выше код работает время от времени, а иногда выдает ошибку, при которой переменная объекта не установлена. почему приведенный выше код не работает, и если я снова открываю файл, он работает снова и иногда не работает. Но я не знаю причину, почему это происходит. Я делаю какие-либо ошибки в синтаксисе, если так, пожалуйста, дайте мне знать правильный способ сделать это. И есть ли более эффективный способ сделать выбор диапазона? кроме вышеупомянутого? Заранее спасибо

1 Ответ

5 голосов
/ 12 августа 2011

Причиной этой ошибки обычно является отсутствие ключевого слова 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, что само по себе грязный метод? ...

...