Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1436to1440
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Der ewige Kampf mit TxtBoxen

Der ewige Kampf mit TxtBoxen
19.07.2015 12:40:09
P-Quest
Hallo,
Ich verwende in einen Userform eine Textbox (txtMenge) in der nur Zahlen zugelassen sein sollen. Mit diesem Wert wird dann in einer weiteren Textbox (txtWert) eine Berechnung durchgeführt.
Später werden die Daten per CmdButton in eine Tabelle geschrieben.
Ich kämpfe jetzt gerade mit der unverträglichkeiten der Typen in der ersten IF Anweisung, die immer dann als Fehler auftaucht, wenn ich keine Eingabe in txtMenge mache oder einen Text eingebe.
Mein Fehler liegt wohl daran, dass ich noch nicht richtig damit klarkomme, wann denn nun mit Text und wann mit Zahl (also mit in Zahl umgewandelten Text) gearbeitet werden muss.
Ich hatte das ganze schon mal so hinbekommen, dass die Fehlermeldung wie gewollt abgearbeitet wurde, dann gab es aber ein Problem mit dem VLookup, weil auch hier eine Typunverträglichkeit angezeigt wurde.
Kann mir da mal jemand auf die Sprünge helfen?!
Private Sub txtMenge_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtMenge = Trim(txtMenge.Value)
If Not IsNumeric(txtMenge.Value) And txtMenge  "" Or CByte(txtMenge.Value) = 0 Then
Cancel = True
If Not UFCloseMode Then MsgBox "Bitte geben Sie einen Wert größer 0 ein!", vbCritical, " _
Falsche Eingabe : " & UFCloseMode
txtMenge.Value = ""
Else
txtWert.Value = WorksheetFunction.VLookup(cbID.Value, Worksheets("Stammdaten").ListObjects(" _
Stammdaten").DataBodyRange, 11, False) * txtMenge.Value
txtWert.Value = Format(txtWert.Value, "####0.00 €")
End If
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Der ewige Kampf mit TxtBoxen
19.07.2015 12:54:00
Nepumuk
Hallo,
If Not IsNumeric(txtMenge.Value) And txtMenge "" Or Val(txtMenge.Value) = 0 Then
").DataBodyRange, 11, False) * CDbl(txtMenge.Value)
Gruß
Nepumuk

AW: Der ewige Kampf mit TxtBoxen
19.07.2015 12:54:39
Herbert
Hallo P?,
eine Dateivorlage wäre hier sehr hilfreich. Lade doch mal eine Beispieldatei hoch. Behalte aber die Originalbezüge bei, so hast Du es hinterher leichter.
Servus

AW: Der ewige Kampf mit TxtBoxen
19.07.2015 13:08:55
Daniel
Hi
wenn du eine IF-Bediungung aus mehreren Prüfungen erstellst, die mit AND oder OR vernküpft sind, berechnet Excel immer alle Prüfungen!
Das bedeutet, dass If Not IsNumeric(txtMenge.Value) And txtMenge "" verhindert also nicht den Fehlerabbruch von Or CByte(txtMenge.Value) = 0 wenn die Textbox leer ist.
dh IF-Prüfungen zur Fehlervermeidung müssen immer in eigene IF-Blöcke vorangstellt werden.
du könntest hier aber die Umwandlung von Text in Zahl mit der Funktion VAL machen.
diese erzeugt keinen Fehlerabbruch wenn der umzuwandelnde Wert keine Zahl ist, sondern hat dann den Wert 0 als Ergebnis.
Private Sub txtMenge_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Menge As Double
Menge = Val(Replace(Trim(txtMenge.Text), ",", "."))
If Menge = 0 Then
Cancel = True
txtMenge.Value = ""
If Not UFCloseMode Then MsgBox "..."
Else
txtWert.Text = ....
End If
End Sub
was man beachten musss ist, dass VAL immer den Punkt als Dezimalzeichen erfordert, daher das Replace, falls jemand die Menge als Dezimalbruch eingeben will und das deutsche Komma verwendet.
Gruß Daniel

Anzeige
AW: An alle Antworter
19.07.2015 13:43:36
P-Quest
Besten Dank für die Hilfestellungen. Es funktioniert!

AW: Der ewige Kampf mit TxtBoxen
19.07.2015 16:37:32
Michael
Hi zusammen,
nur der Vollständigkeit halber: es gibt auch die Möglichkeit, gar nicht erst falsche Eingaben zuzulassen:
https://www.herber.de/forum/archiv/692to696/692490_In_Textbox_nur_Zahlen_zulassen.html
Wenn ein Komma noch mit rein soll, kann man das in der CASE berücksichtigen: den Wert kann man einfach ermitteln, indem man ein gewünschtes Zeichen z.B. in A1 schreibt und in B1 die Formel = Code(a1)
Das ergibt fürs Komma 46.
Schöne Grüße,
Michael

Anzeige
AW: Der ewige Kampf mit TxtBoxen
19.07.2015 17:28:53
P-Quest
Vielen Dank für die weiterführende Info, Michael. Ich habe es in meinem Formular direkt übernommen. Macht sich gut :-)

freut mich, aber...
19.07.2015 17:43:28
Michael
wenn ich's mir genau überlege, kommt man auch so um Errorhandling nicht herum - zumindest muß man aufpassen, daß nicht mehr als 1 Komma vorhanden ist, evtl. mit einer globalen Variablen "komma_vorhanden", die nach dem ersten Komma auf True gesetzt wird, damit sie keine weiteres mehr "durchläßt".
Es ist halt leider nie ganz so einfach, wie man es sich auf den ersten Blick vorstellt.
Happy Exceling,
Michael

AW: freut mich, aber...
19.07.2015 20:26:16
Nepumuk
Hallo,
du kannst verhindern das der User etwas anderes eingibt als Zahlen und maximal ein Komma:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case 48 To 57
            'Number do nothing
        Case 44, 46
            If InStr(1, TextBox1.Text, ",") > 0 Then
                KeyAscii = 0
            Else
                KeyAscii = 44
            End If
        Case Else
            KeyAscii = 0
    End Select
End Sub

Gruß
Nepumuk

Anzeige
AW: freut mich, aber...
19.07.2015 21:12:33
P-Quest
Ja, stimmt, aber ich habe da im netz eine Lösung gefunden, die die Anzahl der Kommata abprüft. Werde ich mal testen.
Danke für den Hinweis!

AW: freut mich, aber...
21.07.2015 16:58:53
Michael
Hi zusammen,
hab ich doch glatt nicht richtig hingesehen mit dem "46"...
... und zu umständlich gedacht mit einer globalen Variablen: ich versuche immer, Stringfuntionen wie instr möglichst sparsam zu verwenden, da sie "relativ" langsam sind, aber bei Tastatureingaben ist "die Maschine" ja immer schneller als der Anwender, so what.
Mir taugt Nepumuks Vorschlag jedenfalls, zumal ein versehentlicher Punkt gleich in ein Komma verwandelt wird.
Happy Exceling,
Michael
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige