marcoborn
Goto Top

Rückgabewert einer InputBox

Hallo Forum,
ich möchte über eine InputBox vom Nutzer eine Integer-Zahl von 1 bis 5 abfragen. Wird ein anderer Wert eingegeben, soll die Abfrage wiederholt werden. Hierfür nutze ich folgenden Code (die Dim's habe ich weggelassen):

Eingabe = 0
Do until Eingabe = 1
Rückgabe = InputBox("Wieviel Level sollen in der UfAB-Tabelle angezeigt werden (1-5)?", "Rückfrage")
If Not IsError(CInt(Rückgabe)) Then
If CInt(Rückgabe) < 6 And CInt(Rückgabe) > 0 Then
'korrekte Eingabe
Eingabe = 1
Else
MsgBox ("Bitte nur Ganzzahlen von 1 bis 5 eingeben.")
End If
Else
MsgBox ("Bitte nur Ganzzahlen von 1 bis 5 eingeben.")
End If
Loop

Mit Hilfe der Variablen "Eingabe" will ich testen, ob ein korrekter Wert eingegeben wurde, und die Schleife soll solange durchlaufen werden, bis dies geschehen ist. Da die InputBox als Rückgabe einen String liefert, prüfe ich zuerst mit IsError, ob der String einen Integer-Wert enthält. Aber genau bei dieser Prüfung bricht das Makro ab und ich lande im Catch-Zweig der Exceptio-Behandlung.

Was mache ich hier verkehrt? Gibt es eventuell eine bessere Möglichkeit, die Abfrage zu realisieren?

Vielen Dank im voraus,
M. Born

Content-Key: 213395

Url: https://administrator.de/contentid/213395

Printed on: April 25, 2024 at 18:04 o'clock

Member: SlainteMhath
SlainteMhath Aug 05, 2013 at 13:44:08 (UTC)
Goto Top
Moin,

zur Prüfung ob ein Integer in der InputBox eingegeben wurde solltest Du eine eigenen Funktion verwenden.
Etwa so:
    Public Function IsInteger(ByVal value As String) As Boolean
        If String.IsNullOrEmpty(value) Then
            Return False
        Else
            Return Integer.TryParse(value, Nothing)
        End If
    End Function

und dann entsprechend anstatt deinen IsError(... eben IsInteger(... verwenden.

lg,
Slainte
Member: Snowman25
Snowman25 Aug 05, 2013 updated at 13:51:11 (UTC)
Goto Top
Hallo @MarcoBorn,

benutz in Zukunft bitte das code-Tag.

Eingabe = 0
Do until Eingabe = 1
	Rückgabe = InputBox("Wieviel Level sollen in der UfAB-Tabelle angezeigt werden (1-5)?", "Rückfrage")  
		If Not IsError(CInt(Rückgabe)) Then
			If CInt(Rückgabe) < 6 And CInt(Rückgabe) > 0 Then
				'korrekte Eingabe  
				Eingabe = 1
				Else
				MsgBox ("Bitte nur Ganzzahlen von 1 bis 5 eingeben.")  
			End If
		Else
			MsgBox ("Bitte nur Ganzzahlen von 1 bis 5 eingeben.")  
		End If
	Loop

Die Schleife würde ich andersherum schreiben. Vielleicht auch einfach nur eine while(true)-Schleife mit break sobald keine Fehler vorhanden sind.
Warum packst du Rückgabe nicht gleich in einen INT? Dann musst du nicht jedesmal in einen Integer casten.
Ausserdem solltest du deinen IF-Statements einklammern. Dann ist es leicher lesbar und der Compiler kommt auch besser damit klar:
If (CInt(Rückgabe) < 6) And (CInt(Rückgabe) > 0) Then

Gruß,
@Snowman25
Member: MarcoBorn
MarcoBorn Aug 05, 2013 at 13:56:37 (UTC)
Goto Top
Hallo Slainte,
Deine Funktion läuft wunderbar.

Vielen Dank,
M. Born
Member: SlainteMhath
SlainteMhath Aug 05, 2013 updated at 13:59:39 (UTC)
Goto Top
@Snowman25
Warum packst du Rückgabe nicht gleich in einen INT?
Wegen dem "IsNullOrEmpty" face-smile

@MarcoBorn
Deine Funktion läuft wunderbar.
Freud mich face-smile
Member: MarcoBorn
MarcoBorn Aug 05, 2013 at 14:03:40 (UTC)
Goto Top
Hallo Snowman,
danke für Deine Tipps. Ich bin noch zienlicher .NET-Neuling, daher wusste ich das mit dem Einklammern nicht. Eine While-Schleife hatte ich auch erst probiert, die hat aber nicht richtig funktioniert.

Wenn ich Rückgabe=Int(Inputbox...) schreibe, bricht dann der Compiler nicht mit einer Fehlermeldung ab, wenn etwas anderes als ein Integer eingegeben wurde?

Wie verwende ich das Code-Tag? Wie bei HTML, also mit <>, oder mit anderen Zeichen?

Vielen Dank im voraus,
M. Born
Member: Snowman25
Snowman25 Aug 05, 2013 at 14:30:05 (UTC)
Goto Top
Ja, mit <>.
Siehe auch: Formatting instructions in the posts
Member: MarcoBorn
MarcoBorn Aug 06, 2013 at 06:03:21 (UTC)
Goto Top
Danke. Die Seite kannte ich noch nicht.