2016-05-26 18 views
0

Ich versuche, die IIF-Funktion im folgenden Code zu verwenden, aber es gibt mir einen Compile-Fehler, der besagt, dass "Variable [ist] nicht definiert". Sie weist auf die „Zero“ auf dem fünften Codezeile:VBA: Variable nicht definiert

Option Explicit 

Sub macro() 

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

End Sub 

Ich weiß nicht, warum es diesen Fehler ziehen, wie ich dachte, dass der Bereich einer Zelle nicht definiert werden muss. Ich habe auch versucht, den Bereich als eine Variable zu definieren, aber das hat es auch nicht gelöst.

Was wäre das Problem hier?

+2

Sie nie 'zugewiesen ws' – tigeravatar

+1

Der 'With'-Block hat hier keine Wirkung. Entferne die 'ws' Deklaration und ersetze' ws.Range' durch '.Range'. –

Antwort

3

weil Sie fehlt ws

so entweder setzen es ThisWorkbook.Worksheets("Sheet1") selbst zu sein und gehen so wie diese:

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 

oder es hat ein anderes Blatt sein, und dann gehen Sie wie dies:

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

Danke. Aber ich verstehe einfach nicht, warum die Definition von 'ws' und die Verwendung von' ws.Range' den Trick nicht gemacht hat. Liegt es daran, dass ich die 'with'-Anweisung verwendet habe, wo ich auf das Arbeitsblatt Bezug nehme? – user112947

+0

Bitte ignorieren Sie den obigen Kommentar. Ich lese deine Antwort noch einmal und verstehe. Danke für das Aufklären. – user112947

+1

mit 'Dim ws As Worksheet' haben Sie nur _declared_ eine Variable namens' ws' vom Typ 'Worksheet'. aber Sie haben es nicht initialisiert, daher weiß VBA nicht, auf welches tatsächliche Objekt 'ws' verwiesen werden soll. Wenn Sie die Anweisung 'set ws = ThisWorkbook.Worksheets (" Sheet2 ") hinzufügen, wird die Variable' ws' initialisiert, um auf ein reales Objekt (dh das 'Arbeitsblatt' mit dem Namen "Sheet2" in der Arbeitsmappe, in dem sich das Makro befindet) zu verweisen in) – user3598756

Verwandte Themen