|
Manchmal sollte man doch recht genau lesen, was in der Visual
Basic-Hilfe steht. So können Sie etwa bei der InputBox-Funktion zu
deren Rückgabewert lesen:
Klickt der Benutzer auf Abbrechen, gibt die Funktion eine
Null-Zeichenfolge ("") zurück.
Oberflächlich gesehen soll das ""
bedeuten, dass bei einem leeren zurückgegebenen String der Anwender
eben die "Abbrechen"-Schaltfläche betätigt
hat.
Dim Eingabe As String
Eingabe = InputBox$("Gib' etwas ein - oder auch nicht:")
If Eingabe = "" Then
Debug.Print "Abbrechen"
Else
Debug.Print "OK"
End If
Solange nicht ein Vorgabe-Text an die InputBox übergeben wird
(im Parameter Prompt), ist diese Rückgabe-Prüfung auch brauchbar -
der Anwender hat ja nichts eingegeben, egal, ob er die "Abbrechen"-
oder "OK"-Schaltfläche betätigt hat. Sobald
jedoch ein Vorgabe-Text hinzukommt, sagt die Prüfung des
Rückgabe-Strings nichts mehr zuverlässig über die betätigte
Schaltfläche aus.
Dim Eingabe As String
Eingabe = InputBox$("Gib' etwas ein - oder auch nicht:", , _
"Vorgabe")
If Eingabe = "" Then
Debug.Print "Abbrechen"
Else
Debug.Print "OK"
End If
Einerseits trifft zwar
Eingabe = ""
zu, wenn die "Abbrechen"-Schaltfläche
betätigt wurde. Doch andererseits trifft das auch zu, wenn der
Anwender die Vorgabe gelöscht und die "OK"-Schaltfläche
betätigt hat. Wie also lässt sich zuverlässig, und jedweder
Aufgabenstellung exakt gerecht werdend, die betätigte Schaltfläche
unterscheiden?
Auf den ersten Blick könnte geprüft werden, ob sich der
zurückgegebene String von der Vorgabe unterscheidet.
If Eingabe = "Vorgabe" Then
Sind beide identisch, hat sich der Anwender offensichtlich mit
der Vorgabe einverstanden erklärt. Genau genommen stimmt das jedoch
nicht: Nur mit der ausdrücklichen Betätigung der "OK"-Schaltfläche
hätte er sein Einverständnis erklärt. Denn es ist durchaus auch
ein Programm-Szenario denkbar, in dem der Anwender mit dem
Betätigen der "Abbrechen"-Schaltfläche
aussagt, dass er zum Zustand vor der Anzeige der InputBox
zurückkehren möchte, etwa um sich noch einmal zu informieren, oder
um vorangegangene Eingaben zu korrigieren, und dergleichen mehr. Das
Betätigen der "OK"-Schaltfläche hingegen
würde zum nächsten Programmschritt weiterleiten, auch bei
unverändert zurückgegebenem Vorgabe-String.
Sie erinnern sich: Eingangs sprach ich von "genauem
Lesen". Schauen wir also noch einmal hin:
Klickt der Benutzer auf Abbrechen, gibt die Funktion eine
Null-Zeichenfolge ("") zurück.
Mit der Prüfung von "" als Rückgabewert
haben wir Schiffbruch erlitten. Versuchen wir doch einmal
herauszufinden, was hinter "Null-Zeichenfolge"
stecken könnte. Dazu müssen wir wieder einmal in die Trickkiste
greifen und eine undokumentierte Visual-Basic-Funktion zutage
fördern - die Funktion StrPtr. Diese Funktion liefert uns den Wert
des Zeigers auf einen String (das ist, vereinfacht gesagt, die
Speicheradresse eines Strings). Könnte es etwa sein, dass...?
Wir probieren folgendes aus:
Dim Eingabe As String
Eingabe = InputBox$("Gib' etwas ein - oder auch nicht:" , , _
"Vorgabe")
If StrPtr(Eingabe) = 0 Then
Debug.Print "Abbrechen"
Else
Debug.Print "OK"
End If
Und siehe da - die InputBox gibt nach dem Betätigen der "Abbrechen"-Schaltfläche
immer und eindeutig einen Zeiger zurück, dessen Wert 0 ist, eben
eine "Null-Zeichenfolge". Die Rückgabe ist nun eindeutig
auswertbar geworden. Dabei macht es auch nichts aus, welchen Wert
die Variable Eingabe vor dem Aufruf der InputBox gehabt haben mag.
|