2016-05-26 5 views
0

Я пытаюсь использовать функцию IIF в приведенном ниже коде, но она дает мне ошибку компиляции, которая гласит, что «Variable [is] не определен». Это выдвигает на первый план «Ноль» в пятой строке коды:VBA: переменная не определена

Option Explicit 

Sub macro() 

Dim ws As Worksheet 
With ThisWorkbook.Worksheets("Sheet1") 
    MsgBox IIf(ws.Range("A1") = 0, “Zero”, “Nonzero”) 
End With 

End Sub 

Я не знаю, почему он тянет эту ошибку, как я думал, что диапазон ячейки не должен быть определен. Я также попытался определить Range как переменную, но это тоже не решило.

В чем проблема?

+2

Вы никогда не назначены 'ws' – tigeravatar

+1

Блок 'With' здесь не действует. Удалите объявление 'ws' и замените' ws.Range' на '.Range'. –

ответ

3

потому, что вам не хватает, чтобы установить ws

так как он должен быть ThisWorkbook.Worksheets("Sheet1") себя и так идти, как этот:

Option Explicit 

Sub macro() 

With ThisWorkbook.Worksheets("Sheet1") 
    MsgBox IIf(.Range("A1") = 0, "Zero", "Nonzero") '<~~ '.Range("A1")' implies that the object following the 'With' keyword is assumed to be just before the dot 
End With 

или он должен быть другой лист, а затем, как это:

Option Explicit 

Sub macro() 

Dim ws As Worksheet 
set ws =ThisWorkbook.Worksheets("Sheet2") '<~~ set the "new" worksheet 
With ThisWorkbook.Worksheets("Sheet1") 
    MsgBox IIf(ws.Range("A1") = 0, "Zero", "Nonzero") 
End With 

End Sub

+0

Спасибо. Но я просто не понимаю, почему определение 'ws', а затем использование' ws.Range' не помогло. Это потому, что я использовал оператор 'with', где я ссылаюсь на рабочий лист? – user112947

+0

Пожалуйста, проигнорируйте вышеуказанный комментарий. Я перечитываю ваш ответ, и я понимаю. Спасибо за разъяснение. – user112947

+1

с 'Dim ws As Worksheet' вы только _declared_ переменная с именем' ws' типа 'Worksheet'. но вы не инициализировали его, поэтому VBA не знает, что должен указывать фактический объект 'ws'. если вы добавите инструкцию 'set ws = ThisWorkbook.Worksheets (« Sheet2 »), то инициализируется переменная' ws' для ссылки на реальный объект (то есть «Рабочий лист» с именем «Sheet2» в «Книге», где находится макрос in) – user3598756

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