PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Überprüfung einer eingegebenen Zahl in VBA


Gast
2007-09-13, 19:41:34
Hallo,

ich habe ein kleines Problem, dessen Lösung ich gerade versuche herauszufinden. Ist eigentlich recht simpel, aber mit meinen bescheidenen Programmiererfahrungen komme ich nicht auf die Schlüsselidee, wie sich das, was ich will, realisieren lässt.

Es geht um ein kleines "Programm", das vom Anwender über eine InputBox mit einer Postleitzahl gefüttert wird. Dann soll geprüft werden, ob die eingegebene Zahl fünfstellig ist. Das Ergebnis der Prüfung soll dann über eine MsgBox ausgegeben werden.

Soweit kein Problem, das habe selbst ich auf Anhieb mit einer simplen "if...then...else"-Anweisung hinbekommen. Nun gibt es aber in den neuen Bundesländern auch Postleitzahlen, die mit 0 beginnen. Da diese führende 0 natürlich ignoriert wird, ergibt das Ergebnis der Prüfung dann keine fünfstellige Zahl, obwohl sie es eigentlich ist.

Das Datentyp Long Integer, den ich für die Speicherung der eingegebenen PLZ verwende, speichert die führende 0 bei der Eingabe ja gar nicht erst, wenn ich das richtig verstanden habe? Also muss es da schonmal was anderes sein. Als String vielleicht? Aber wie realisiere ich es da, dass die führende 0 auch als solche behandelt wird?

Die Hilfefunktion, die mir bisher sehr viele Fragen beantwortet hat, konnte mir leider in diesem Fall nicht helfen. Auch eine erste Onlinerecherche brachte keine verwendbaren Ergebnisse.

Hier mal der bisherige Code:
Public Sub plz()
On Error GoTo err_plz

'Deklaration
Dim int32_plz As Long

'Eingabe
int32_plz = InputBox("Bitte geben sie ihre Postleitzahl an.")

'Verarbeitung und Ausgabe

If int32_plz >= 10000 And int32_plz <= 99999 Then
MsgBox "Die PLZ ist fünfstellig."
Else
MsgBox "Die PLZ ist nicht fünfstellig."
End If

blah:
Exit Sub

'Fehlermeldung: "err.number" gibt Fehlernummer aus, "err.description" eine Fehlerbeschreibung.
err_plz:
MsgBox "Ein Fehler trat auf. Fehlernummer:" & Err.Number & vbCr & Err.Description
Resume blah

End Sub
Vielleicht hat einer von euch ja eine Idee.

Gruß,
ein Gast

robobimbo
2007-09-13, 19:52:48
Definiere die Rückgabevariable als String
Teste mittels der Funktion Len(String) ob der String 5 Zeichen lang ist.
Wenn er 5 Zeichen lang ist, mach eine For Schleife über den String, und prüfe ob er nur ASCII Codes der Zeichen 0-9 enthält :)

Tip: Funktionen Mid(String, Beginn, Länge) und Asc(String)

Ascii Codes: 0 = 58 ..... 9 = 57

Sephiroth
2007-09-13, 22:37:06
String; mit IsNumeric validieren und mittels der Len Funktion kannst du dann unterscheiden, ob 5 stellig oder nicht. Left(String, 1) liefert dir das erste Zeichen des Strings.

Die bessere Alternative ist ein regulärer Ausdruck wie ^0[0-9]{4}$

Gast
2007-09-15, 04:08:05
Danke für eure Antworten. Habe es dann gestern (bzw. mittlerweile vorgestern) Abend auch mithilfe der von euch empohlenen Len-Funktion hinbekommen.

Die Sache mit den regulären Ausdrücken klingt äußerst interessant. Darüber werde ich mal ein wenig lesen.

Schönes Wochenende noch,
ein Gast