2016-05-26 162 views
0

我想在下面的代碼中使用IIF函數,但它給我一個編譯錯誤,指出「變量[是]未定義」。它強調在代碼第五行「零」: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 

我不知道爲什麼,因爲我認爲一個小區的範圍不必被定義在捉弄這個錯誤。我也嘗試將範圍定義爲一個變量,但也沒有解決它。

這裏會出現什麼問題?

+2

你永遠不分配'ws' – tigeravatar

+1

'With'塊在這裏沒有效果。刪除'ws'聲明,並用'.Range'替換'ws.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 

末次

+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」的工作表)在) – user3598756