Die gewöhnliche Input-Box-Funktion gibt immer eine Zeichenfolge zurück, die den Inhalt des Textfelds angibt. Egal, welche Schaltfläche gedrückt oder das Fenster sonst geschlossen wird.
Application.InputBox-Methode:
besitzt zusätzlich den Parameter Type um den Datentyp des Rückgabewertes vorab festzulegen.
Die MS-Dokumentation, egal welche Sprache dazu lautet:
"Wenn Sie auf die Schaltfläche Abbrechen klicken, gibt InputBox den Wert False zurück"
(If you click the Cancel button, InputBox returns False)
Diese Beschreibung ist unzulänglich, denn False wird im vorgewählten Datentyp zurückgegeben.
Option Explicit
Sub IPB_2()
'Meaning - Text (a string)
Dim strInp As String
strInp = Application.InputBox(prompt:="Eingabe", Type:=2)
'ggf. LänderCode beachten
If strInp = "Falsch" Then
MsgBox ("Abbruch gedrückt mit ") & strInp
Else
Call MsgBox("Eingabe mit " & CStr(Len(strInp)) & " Zeichen", _
vbInformation + vbOKOnly, "OK wurde gedrückt")
End If
End Sub
Sub IPB_1()
'Meaning - A Number
Dim nmbInp As Integer
'OK Button OHNE Eingabe führt immer zu Fehler
Application.DisplayAlerts = False
nmbInp = Application.InputBox(prompt:="Eingabe", Type:=1)
'so bleibt die Abfrage bei leerer Eingabe im LOOP bis Abbruch
Application.DisplayAlerts = True
If nmbInp = 0 Then
MsgBox ("Abbruch gedrückt mit ") & nmbInp
Else
Call MsgBox("Eingabe ist " & nmbInp, _
vbInformation + vbOKOnly, "OK wurde gedrückt")
End If
End Sub
Sub IPB_1_2()
'Meaning - Text (a string) or A Number
Dim nmbInp As Variant
nmbInp = Application.InputBox(prompt:="Eingabe", Type:=2 + 1)
If nmbInp = 0 Then
MsgBox ("Abbruch gedrückt mit ") & nmbInp
Else
Call MsgBox("Eingabe ist " & nmbInp, _
vbInformation + vbOKOnly, "OK wurde gedrückt")
End If
End Sub
Sub CaseAbfrage()
'Meaning - Text (a string) or A Number
Select Case Application.InputBox(prompt:="Eingabe", Type:=2 + 1)
Case ""
MsgBox "keine Eingabe"
Case 1
MsgBox "Eingabe war 1"
'ggf. Aufruf der Prozedur zu 1 mit Parameter
'Call Prozedur(1)
Case 2 To 3
MsgBox "Eingabe war 2 oder 3"
Case "Test"
MsgBox "Eingabe war " & "Test"
'ggf. Aufruf der Prozedur
'Call Test
Case "Hammer"
MsgBox "Eingabe war " & "Hammer"
'ggf. Aufruf der Prozedur
'Call Test("Hammer")
End Select
End Sub
Für den Fragesteller wäre es womöglich besser auf eine selbstgestrickte Userform auszuweichen!
|