Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA-double-Variable auf leer abfragen!

936 views
Skip to first unread message

Gottfried Wehr

unread,
Jun 27, 2002, 11:17:18 AM6/27/02
to
Hallo VBA-Kenner,

ich lese eine (leere) Zelle in eine Variable ein und möchte anschliessend
prüfen ob diese Variable einen Inhalt hat:

x = range("A1")
If Application.WorksheetFunction.IsNumber(x) Then " A1 ist doch nicht leer"

Auch mit isNull oder x="" oder x=Null funktioniert das nicht.
Wie hat sich das der Erfinder von VBA denn vorgestellt?
Ihr wisst sicher weiter.
Gruss Gottfried


Bernd Held

unread,
Jun 27, 2002, 11:35:18 AM6/27/02
to
Hallo Gottfried,

na so ähnlich, Du hast es fast getroffen:
Sub Test()
x = Range("A1")
If IsEmpty(x) Then MsgBox "Variable leer"

End Sub

Viele Grüße
Bernd
MVP für Microsoft Excel
Excel-Know-How und Publikationen unter http://held-office.de

"Gottfried Wehr" <gottfri...@mch20.sbs.de> schrieb im Newsbeitrag
news:affadc$o0f$1...@news.mch.sbs.de...

Melanie Breden

unread,
Jun 27, 2002, 11:46:50 AM6/27/02
to
Hallo Gottfried,

"Gottfried Wehr" <gottfri...@mch20.sbs.de> schrieb im Newsbeitrag
news:affadc$o0f$1...@news.mch.sbs.de...

ich hoffe ich habe dich richtig verstanden, dann prüft folgendes Makro den
Wert in A1:

Sub ZelleAbfragen()
Dim x As Range
Set x = [A1]
If IsEmpty([A1]) Then
MsgBox "Zelle ""A1"" ist leer"
Else
MsgBox "Zelle ""A1"" hat den Wert " & x.Value
End If
End Sub

Hoffe, dass dir das weiterhilft.

mit Gruß
Melanie

XL2000


Melanie Breden

unread,
Jun 27, 2002, 11:49:41 AM6/27/02
to
Hallo Gottfried,

noch ein Nachtrag:


> >
> ich hoffe ich habe dich richtig verstanden, dann prüft folgendes Makro den
> Wert in A1:
>
> Sub ZelleAbfragen()
> Dim x As Range
> Set x = [A1]
> If IsEmpty([A1]) Then
> MsgBox "Zelle ""A1"" ist leer"
> Else
> MsgBox "Zelle ""A1"" hat den Wert " & x.Value
> End If
> End Sub
>

muss natürlich heissen:

If IsEmpty(x) Then

mit Gruß
Melanie


Michael Schüller

unread,
Jun 27, 2002, 1:26:58 PM6/27/02
to
Hallo Gottfried,

"Gottfried Wehr" <gottfri...@mch20.sbs.de> schrieb im Newsbeitrag
news:affadc$o0f$1...@news.mch.sbs.de...

> Hallo VBA-Kenner,
>
> ich lese eine (leere) Zelle in eine Variable ein und möchte anschliessend
> prüfen ob diese Variable einen Inhalt hat:
>
> x = range("A1")
> If Application.WorksheetFunction.IsNumber(x) Then " A1 ist doch nicht
leer"
>
> Auch mit isNull oder x="" oder x=Null funktioniert das nicht.

Hm, falls die Anmerkung zu blöd ist, entschuldige bitte, aber Dein Hinweis
'x="" funktioniert nicht' legt nahe, dass Du x als String dimensioniert
hast. (Dabei gehe ich vielleicht fälschlicherweise davon aus, dass Du die
Zeile 'x = range("A1")' durch 'x=""' ersetzt hast, um testweise einen
Null-Wert zu "provozieren".)

Wenn x als String dimensioniert ist kann Dein Code nicht funktionieren, da
ein String niemals IsNumber()=TRUE zurückgeben wird.
Du musst entweder x als Integer, Long, oder was auch immer dimensionieren,
oder Deine Abfrage umformulieren in 'If x="" Then " A1 ist doch nicht leer"'

Der Code von Melanie sollte aber auf jeden Fall funktionieren, weil dort
nicht der Wert der Zelle ausgelesen wird, sondern direkt die Zelle auf
IsNull überprüft wird.
Daher: falls meine Vermutung richtig ist, bitte dieses Posting nur als
Erläuterung der Fehlerursache verstehen, falls meine Vermutung falsch ist,
dieses Posting bitte ungelesen löschen und mich mit wüsten Beschimpfungen
belegen...;-)

--
Schönen Gruß
Michael
michael....@gmx.de


Michael Schüller

unread,
Jun 27, 2002, 1:31:21 PM6/27/02
to
Nochmal hallo,

> Wenn x als String dimensioniert ist kann Dein Code nicht funktionieren, da
> ein String niemals IsNumber()=TRUE zurückgeben wird.
> Du musst entweder x als Integer, Long, oder was auch immer dimensionieren,
> oder Deine Abfrage umformulieren in 'If x="" Then " A1 ist doch nicht
leer"'

Die "neue" Abfrage muss natürlich lauten 'If x <>"" Then " A1 ist doch nicht
leer"'.

> Schönen Gruß
> Michael
> michael....@gmx.de
>
>
>
>


Gottfried Wehr

unread,
Jun 27, 2002, 4:26:45 PM6/27/02
to
Hallo Melanie, Hallo Michael,
leider habe ich nur im Betreff vermerkt, dass es sich mit x um eine
double-Variable handelt. Also Michael Deine Vermutung ist leider nicht
richtig.
Melanie, Deine Lösung ist mir bekannt, kann ich aber nicht verwenden, da zu
dem Zeitpunkt der Abfrage die Arbeitsmappe nicht mehr geladen ist. Deshalb
habe ich mir ja die Information in die double-Variable x gespeichert!
Und jetzt habe ich das Problem festzustellen ob die Zelle den Wert 0
enthielt oder leer war!

Ich habe inzwischen die Lösung selbst rausbekommen: man muss x als variant
und nicht als double definieren! siehe folgendes Beispiel:

Sub ausprobieren()
Dim x As Variant 'mit double kann 0 von leer nicht unterschieden werden
Cells(1, 1).clear
x = Cells(1, 1) 'Zelle "A1"
If Not Application.WorksheetFunction.IsNumber(x) Then MsgBox "x is not
number" 'true
If x = "" Then MsgBox "x = ''" 'true
If IsEmpty(x) Then MsgBox "x is empty" 'true
If IsNull(x) Then MsgBox "x is Null" 'false
If Not IsNumeric(x) Then MsgBox "x is not numeric" 'false
If Application.WorksheetFunction.IsNA(x) Then MsgBox "x is NA" 'false
End Sub

trotzdem noch vielen Dank Melanie und Michael
Gottfried


"Gottfried Wehr" <gottfri...@mch20.sbs.de> schrieb im Newsbeitrag
news:affadc$o0f$1...@news.mch.sbs.de...

0 new messages