Excel VBA IsNumeric?
Hallo!
Ich arbeite gerade mit VBA und habe folgendes Problem:
Ich habe ein Eingabefeld und möchte, dass das Programm nur weiterläuft, wenn drei Bedingungen erfüllt sind. Es soll sich um eine Zahl handeln, sie soll ganzzahlig sein und größer gleich Null.
Ich habe folgendes zusammengebastelt:
Dim Zahl As Variant
start:
Zahl = InputBox("Zahl eingeben")
If Anzahl <= 0 Or IsNumeric(Zahl) = False Or Int(Anzahl) = False Then
MsgBox ("Zahl muss ganzzahlig und größer als 0 sein. Bitte erneut eingeben.")
GoTo start
Mit der ersten Bedingung klappt noch alles so wie es soll. Wenn ich einen Buchstaben eingebe, kommt eine Fehlermeldung und wenn ich keine ganzzahlige Zahl eingebe, läuft es einfach weiter.
Ich habe keine Erfahrung mit VBA und hoffe, dass mir jemand meinen Fehler erklären kann.
Vielen Dank schon Mal!
5 Antworten
Zunächst einmal gilt es herauszufinden, ob es überhaupt eine Zahl ist.
If IsNumeric(Zahl) then
'Dann >= 0
If Zahl>= 0 then
'dann natürliche Zahl
If Worksheetfunctions.RoundDown(Zahl,0) = Zahl then
'Hier sind alle Bedingungen erfüllt.
End if
end if
else
End if
Ich wuerde zuerst pruefen, ob es ueberhaupt ein numerischer Ausdruck ist, also mit isnumeric. Wenn true zurueck gegeben wird, ist es damit aber immernich keine zahl, sindern nur ein numerischer Ausdruck, da inputbox ja string zurueck gibt.
Also, wenn ja, dann erstmal Typ konvertieren, alao mit cdbl(zahl). Jetzt ist der ausdruck eine zahl und kann weitergeprueft werden.
Ansonsten kracht es bei text bei int(zahl)
Heist also zuerst einmal
If isnumeric(zahl) =false then
Msgbox...
Goto...
End if
Hier jetzt weiter mit den anderen Prüfungen
Gruss, Armin
ersetze mal
Int(Anzahl) = False
durch
Anzahl <> Int(Anzahl)
Und die erste Bedingung ist in zweierlei Hinsicht falsch.
If Anzahl <= 0 ...
Die Variable heißt Zahl. Und wenn die Null erlaubt sein soll, dann müsste es
If Zahl < 0 ...
heißen.
Im Übrigen, so wie Hannes62a schreibt, stimmen die Variablennamen nicht ueberein. Dies zuerst in Ordnung bringen.
Dann ist die Funktion int() auch nicht korrekt. Int liefert ja nur den ganzzahligen Teil einer Zahl. Also int(33.6)=33. Aber Du willst ja pruefen, ob es eine Dezimalzahl ist.
Deshalb bringt es auch nichts, wie oben gepostet, wenn man die Bedingung mit int umbaut. Die Variable Zahl ist ja der Rückgabewert der Inputbox. Wenn das also Text ist, dann kracht es bei der int Funktion. Deshalb grundsaetzlich erstmal pruefen, wie weiter oben beschrieben n, ob der Ausdruck numerisch ist.
Wenn ja, dann geht es weiter, ansonsten die Meldung.
Dann ist auch der Ansatz mit dem Verglich <> gut anzuwenden
Vg