2014-10-18 6 views
-2

Я знаю, что это глупый вопрос, но я нахожусь в конце, пытаясь понять это.Метод диапазона в Excel VBA

Этот небольшой фрагмент кода вызывает ошибку времени выполнения '1004': метод 'Range' объекта '_Worksheet' не удался. Но только тогда, когда Sheet3 не является активным листом. Он делает то, что ожидается, когда Sheet3 активен.

With Sheet3.Range(Cells(1, 1), Cells(nrows1, ncols1)) 
    .Clear 
    .Value = SCDevNeeds1 
End With 

Кроме того, если изменить ссылку на имя вкладки листа, я все еще получаю ошибку во время выполнения, но на этот раз это ошибка приложения или объекта определены. Эта ТАКЖЕ случается только тогда, когда лист не активен:

With Sheets("newest").Range(Cells(1, 1), Cells(nrows1, ncols1)) 
    .Clear 
    .Value = SCDevNeeds1 
End With 

Что мне не хватает?

+1

Какие значения ** nrows1, ncols1 ** и ** ** SCDevNeeds1, когда линии выполнены ?? –

+4

Ячейки() всегда ссылаются на активный лист, если вы не имеете права ссылаться на конкретный лист. Ошибки вашего кода, потому что Range ссылается на sheet3, но Cells() не работают, если только файл3 не активен. –

+1

В этом случае да, но не всегда, зависит от того, где находится код, что делает его еще более подверженным ошибкам. (см. мой ответ ниже) – KekuSemau

ответ

1

Cells в выражении Sheet3.Range(Cells(1, 1), Cells(nrows1, ncols1)) относится к:
а) активный лист, если код является индивидуальный код модуля
б) лист модуля, если код в рабочий лист-модуль.

Таким образом, код будет работать, если он находится внутри модуля Sheet3, но скорее случайно.
Вы должны всегда использовать полные ссылки на все объекты Range (например,, Range, Rows, Columns, ...).

Sheet3.Range(Sheet3.Cells(1, 1), Sheet3.Cells(nrows1, ncols1))

1

Попробуйте этот код

With ThisWorkbook.Sheets("Sheet3") 
    With .Range(.Cells(1, 1), .Cells(100, 2)) 
     .Clear 
     .Value = "" 
    End With 

End With

+0

Спасибо ЗАЗ. КекуСмау работал. Ваше предложение, кажется, очень эффективный код, но он дал мне индекс ошибки вне диапазона, который я не чувствую, как выяснять! Однако я ценю ответ. Я знаю, что смогу заставить его работать. – SteveS

+0

если проблема решена, пожалуйста, примите этот ответ. – ZAZ

+0

Относительно новый к этому форуму. Могу ли я принять оба ответа? Похоже, это не позволит мне. Я поднял ваш ответ. – SteveS

Смежные вопросы