In VBA wenn die eingabe keine Zahl ist soll er EingabeBox erneutbringen
Hallo Liebe Leute
Ich habe folgendes Probelm : Ich muss mit hilfe von VBA Volumen berechnen können.
Dies klappt. Nun soll ich es so machen, dass wenn ich keine Zahl eingebe das das Fenster erneut kommt.
Kenne den befehl nicht.
Hier ist mein Quellcode:
Ich habe folgendes Probelm : Ich muss mit hilfe von VBA Volumen berechnen können.
Dies klappt. Nun soll ich es so machen, dass wenn ich keine Zahl eingebe das das Fenster erneut kommt.
Kenne den befehl nicht.
Hier ist mein Quellcode:
Private Sub cmdStart_Click()
Call volumen
End Sub
Public Sub volumen()
Dim h, l, b As Integer
Dim a, z, r As Variant
Dim ausgabe As Variant
l = InputBox("Länge : ")
If l < 0 Then
Exit Sub
End If
h = InputBox("Höhe: ")
If h < 0 Then
Exit Sub
End If
b = InputBox("Breite: ")
If b < 0 Then
Exit Sub
End If
a = l * h * b
ausgabe = MsgBox("Das Volume Beträgt: " & a, vbOKCancel)
If ausgabe = vbOK Then
Call volumen
ElseIf ausgabe = vbCancel Then
Exit Sub
End If
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 128632
Url: https://administrator.de/contentid/128632
Ausgedruckt am: 24.11.2024 um 10:11 Uhr
17 Kommentare
Neuester Kommentar
Hallo eldiablo9100, Hallo bastla!
Wäre noch zu überlegen, ob bei Zahleneingaben nicht besser die App.InputBox mit Typ-Angabe verwendet wird.
z.B. InputBox mit Typ Zahl:
Gruß Dieter
Wäre noch zu überlegen, ob bei Zahleneingaben nicht besser die App.InputBox mit Typ-Angabe verwendet wird.
z.B. InputBox mit Typ Zahl:
Dim b As Double
b = Application.InputBox(prompt:="Länge: ", Title:="Flächenberechnung", Type:=1)
Gruß Dieter
Zitat von @bastla:
Wenn wir Excel (und nicht zB Access) voraussetzen wollen, auf jeden Fall die elegantere Version ...
Tja, wir wissen es nicht und eldiablo9100 hat wohl schon Feierabend gemachtWenn wir Excel (und nicht zB Access) voraussetzen wollen, auf jeden Fall die elegantere Version ...
Und das fehlende Loop hast Du ja auch schon hinzugefügt! Habe extra nix gesagt
Gruß Dieter
@all,
einen kleinen Nachteil hat das "IsNumeric" schon, gell?
Sonderzeichen.
Nur mal zum üben in VBS:
Gruß
Tsuki
einen kleinen Nachteil hat das "IsNumeric" schon, gell?
Sonderzeichen.
Nur mal zum üben in VBS:
Do
l = InputBox("Länge : ")
Loop Until IsNumeric(l)
msgbox l
For iKN = 1 To Len(l)
l1 = Mid(l, iKN, 1)
If IsNumeric(l1) = False Then
KeineNummer = 0
End If
If IsNumeric(l1) = True Then
l2 = l2 & l1
End If
Next
msgbox l2
Gruß
Tsuki
Hallo Tsuki!
Eigentlich reduziert sich das Sonderzeichenproblem auf die Verwendung des Punktes (wenn jemand partout eine Eingabe als Oktal- , zB &24, oder Hex-Wert , etwa &H14, vornehmen möchte, wäre das Ergebnis ja immer noch eine Zahl).
Per "
Grüße
bastla
P.S.: In Deiner "Übungsschleife" bleiben leider Dezimalzahlen auf der Stecke ...
Eigentlich reduziert sich das Sonderzeichenproblem auf die Verwendung des Punktes (wenn jemand partout eine Eingabe als Oktal- , zB &24, oder Hex-Wert , etwa &H14, vornehmen möchte, wäre das Ergebnis ja immer noch eine Zahl).
Per "
Replace()
" lässt sich die Sache mit dem Punkt allerdings recht einfach erledigen:l = Replace(InputBox("Länge : "), ".", ",")
Grüße
bastla
P.S.: In Deiner "Übungsschleife" bleiben leider Dezimalzahlen auf der Stecke ...
Hallo TsukiSan!
Is ja logisch, wenn IsNumeric anstelle einer Zahl mit diversen Zeichen, nur einen Punkt oder Komma zum Prüfen bekommt.
Ansonsten werden Zahleneingaben im deutschen oder englischen Format von IsNumeric als Zahlen korrekt erkannt. Eine entsprechende Konvertierung ist wieder eine andere Sache.
Gruß Dieter
Is ja logisch, wenn IsNumeric anstelle einer Zahl mit diversen Zeichen, nur einen Punkt oder Komma zum Prüfen bekommt.
Ansonsten werden Zahleneingaben im deutschen oder englischen Format von IsNumeric als Zahlen korrekt erkannt. Eine entsprechende Konvertierung ist wieder eine andere Sache.
Gruß Dieter
Hallo Dieter,
so funktioniert es ja auch auf meinen Rechnern. Nur bastla hatte erwähnt, dass
der PUNKT noch übrig bliebe in meiner Versuchsschleife. Das ist aber bei mir nicht der
Fall. Es gäbe nur noch "Integers", wenn man das so nennen darf. Deswegen, was
passiert bei bastlas Rechner mit meiner Schleife anders???
Danke und Gruss
Tsuki
so funktioniert es ja auch auf meinen Rechnern. Nur bastla hatte erwähnt, dass
der PUNKT noch übrig bliebe in meiner Versuchsschleife. Das ist aber bei mir nicht der
Fall. Es gäbe nur noch "Integers", wenn man das so nennen darf. Deswegen, was
passiert bei bastlas Rechner mit meiner Schleife anders???
Danke und Gruss
Tsuki
@tsuki
Deine Schleife lässt tatsächlich nur Ziffern durch - damit ist aber dann auch nur die Eingabe von "Integers" und eben nicht von Dezimalzahlen möglich.
Grüße
bastla
Nur bastla hatte erwähnt, dass der PUNKT noch übrig bliebe in meiner Versuchsschleife.
Hatte ich (hoffentlich) nicht - was ich gemeint hatte: Eine Eingabe mit einem Punkt wird als "Numeric
" erkannt, aber bei der Konvertierung in zB einen Dbl
-Wert wird der Punkt einfach weggelassen - daher würde aus 1.5 dann 15. Aus diesem Grund ist der Punkt das einzige Sonderzeichen, das im Zusammenhang mit "IsNumeric()
" Probleme macht (Du hattest ja, relativ sparsam formuliert , vor "Sonderzeichen" gewarnt).Deine Schleife lässt tatsächlich nur Ziffern durch - damit ist aber dann auch nur die Eingabe von "Integers" und eben nicht von Dezimalzahlen möglich.
Grüße
bastla
...es geht mich ja nichts an, aber...
die Wahrscheinlichkeit, dass eldiabolo9100 bei seinem Übungsprogramm zur Berechnung des Volumens eines Schuhkartona irgendeinen anderen numerischen Datentyp als unsigned smallint verwenden muss, ist eher gering.
Soweit ich das als Laie beurteilen kann, wird der oben im Eröffnungsbeitrag gepostete Schnipsel eher nicht so weit aufgebohrt, dass sich damit Satelliten steuern oder die Kursverläufe der New Yorker Börse visualisieren lassen.
Geht doch einfach von Ganzzahlen aus - dann lässt sich Prüfung doch auf die überschaubaren 10 Ziffern reduzieren und sogar, falls die Funktion IsNumeric() gerade Urlaub hat, mit einer (Buchstaben-) Prüfung auf [Zeichen ist >="0" und Zeichen ist <="9" ] abfackeln.
Abgesehen davon wäre ich -ungeachtet der kurzweiligen Diskussion in diesem Thread- eigentlich ganz dankbar für ein Lebenszeichen des TOs....
Grüße
Biber
die Wahrscheinlichkeit, dass eldiabolo9100 bei seinem Übungsprogramm zur Berechnung des Volumens eines Schuhkartona irgendeinen anderen numerischen Datentyp als unsigned smallint verwenden muss, ist eher gering.
Soweit ich das als Laie beurteilen kann, wird der oben im Eröffnungsbeitrag gepostete Schnipsel eher nicht so weit aufgebohrt, dass sich damit Satelliten steuern oder die Kursverläufe der New Yorker Börse visualisieren lassen.
Geht doch einfach von Ganzzahlen aus - dann lässt sich Prüfung doch auf die überschaubaren 10 Ziffern reduzieren und sogar, falls die Funktion IsNumeric() gerade Urlaub hat, mit einer (Buchstaben-) Prüfung auf [Zeichen ist >="0" und Zeichen ist <="9" ] abfackeln.
Abgesehen davon wäre ich -ungeachtet der kurzweiligen Diskussion in diesem Thread- eigentlich ganz dankbar für ein Lebenszeichen des TOs....
Grüße
Biber
@bastla,
ich hatte es wohl dann falsch verstanden. Sorry!
die "Punkt- und Strichzeichen" - mal maedchenhaft formuliert -
laesst IsNumeric durch. Ist ja auch logisch!
Das hatte ich tatsaechlich sparsam formuliert.
Naja, wichtig ist, ich hab's begrffen
Nun pflichte ich biber bei und warte auf ein Feedback des TOs.
Gruss,
Tsuki
ich hatte es wohl dann falsch verstanden. Sorry!
die "Punkt- und Strichzeichen" - mal maedchenhaft formuliert -
laesst IsNumeric durch. Ist ja auch logisch!
Das hatte ich tatsaechlich sparsam formuliert.
Naja, wichtig ist, ich hab's begrffen
Nun pflichte ich biber bei und warte auf ein Feedback des TOs.
Gruss,
Tsuki