Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1668to1672
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

nachträgliches Komma nur an drittletzter Stelle

nachträgliches Komma nur an drittletzter Stelle
27.01.2019 14:15:12
Frank
Hallo,
ich benutze folgende Code für die Eingabe von Textfeldern.
Es werden nur Zahlen, zwei Nachkommastellen, ein Komma und ein Minus an erster Stelle erlaubt.
Jedoch kann ich das Komma löschen und an falscher Stelle wieder einsetzten und möchte gerne diesen Bug unterbinden und weiß nicht so recht, wie ich das Abfangen kann?
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'nur Zahlen, ein Komma und nur 2 Stellen nach dem Komma
Select Case KeyAscii
Case Asc("0") To Asc("9")
If InStr(TextBox1, ",")  0 Then
If Len(TextBox1) - InStr(TextBox1, ",") > 1 Then KeyAscii = 0
End If
Case Asc("."), Asc(",")
If InStr(TextBox1, ",")  0 Then
KeyAscii = 0
Else
KeyAscii = Asc(",")
End If
Case Asc(vbBack)
'Eingabe von Minus
Case Asc("-")
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub Textbox1_Change()
'Eingabe von Minus auch nachträglich
Dim BoWert As Boolean
If InStr(TextBox1, "-") >= 1 And Left(TextBox1, 1)  "-" Then
TextBox1 = Replace(TextBox1, "-", "")
BoWert = True
ElseIf InStr(TextBox1, "-") = 1 And InStr(2, TextBox1, "-") >= 1 Then
BoWert = True
If Left(TextBox1, 1) = "-" Then
TextBox1 = "-" + Replace(TextBox1, "-", "")
Else
TextBox1 = Replace(TextBox1, "-", "")
End If
End If
'nachträgliche Eingabe von Komma nur an drittletzter Stelle
'bei Eingabe von "," oder "-," wird eine Null vor dem Komma eingesetzt
If Left$(TextBox1.Text, 1) = "," Then
TextBox1.Text = Application.WorksheetFunction.Substitute(TextBox1.Text, ",", "0,")
ElseIf Left$(TextBox1.Text, 2) = "-," Then
TextBox1.Text = Application.WorksheetFunction.Substitute(TextBox1.Text, "-,", "-0,")
End If
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: nachträgliches Komma
27.01.2019 15:05:41
Frank
Denkfehler: ich meinte das Komma nachträglich an letzter, vorletzter und vor-vorletzter Stelle.
Ich möchte es festlegen, dass das Komma nur an diesen drei Positionen gesetzt werden kann...
AW: nachträgliches Komma
27.01.2019 15:30:15
Daniel
Hi
du kannst mit SelPos abfragen, an welcher Position sich der Cursor befindet und darüber entscheiden, ob das Komma an dieser Stelle eingefügt werden darf oder nicht.
Gruß Daniel
AW: nachträgliches Komma
27.01.2019 16:43:20
Frank
Vielen Dank, das wäre aber Neuland für mich...
Wie schaut so etwas aus?
AW: nachträgliches Komma
27.01.2019 17:00:52
Daniel
sorry die Eigenschaft heitß nicht SelPos, sondern SelStart.
wie das aussieht?
naja du fragst mit

If Textbox1.SelPos >= Len(TextBox1.Text) - 3
ab, ob sich der Cursor an den letzen Positionen des textes befindest und entscheidest dann, ob der Anwender das Komma einfügen darf oder nicht.
aber generell würde ich solche Prüfungen während der Eingabe nicht durchführen, das wird wie du sieht zu aufwendig wenn man es wirklich vollständig machen will.
checke lieber am Ende der Eingabe oder vor dem nächsten Schritt (z.B. im OK-Button, sofern du einen hast), ob die Eingabe korrekt ist.
Gruß Daniel
Anzeige
AW: nachträgliches Komma
27.01.2019 17:13:08
Frank
folgend umgebauter und funktionierender Code:
If TextBox1.SelStart 
Vielen Dank!
AW: nachträgliches Komma
27.01.2019 17:23:33
Frank
Hier der gesamte Code:
Private Sub Textbox1_Change()
'Eingabe von Minus auch nachträglich
Dim BoWert As Boolean
If InStr(TextBox1, "-") >= 1 And Left(TextBox1, 1)  "-" Then
TextBox1 = Replace(TextBox1, "-", "")
BoWert = True
ElseIf InStr(TextBox1, "-") = 1 And InStr(2, TextBox1, "-") >= 1 Then
BoWert = True
If Left(TextBox1, 1) = "-" Then
TextBox1 = "-" + Replace(TextBox1, "-", "")
Else
TextBox1 = Replace(TextBox1, "-", "")
End If
End If
'nachträgliche Eingabe von Komma nur an drei letzten Stellen
If TextBox1.SelStart 
wenn ich aber nun ein nachträgliches Minus eingebe, wird das Komma gelöscht.
Wo liegt mein Denkfehler?
Anzeige
AW: nachträgliches Komma
27.01.2019 17:28:27
Frank
auch beim Löschen von Minus...
AW: nachträgliches Komma
27.01.2019 18:00:31
Daniel
keine Ahnung, ist mir zu kompliziert.
ich würde, wie ich schon schrieb die Eingabe gar nicht überwachen, sondern erst vor dem nächsten Schritt ober nach Abschluss der der Eingabe überprüfen, ob ein korrekter Wert in der Textbox steht.
Gruß Daniel
AW: nachträgliches Komma
27.01.2019 18:41:31
Frank
Eleganter wäre es, das Endergebnis schon vor der Übernahme in der TextBox zu sehen...
AW: nachträgliches Komma
27.01.2019 20:36:43
Daniel
wenn du bestimmte Eingaben verhindern willst, solltest du das KeyPress oder noch besser das KeyDown-Event verwenden.
Damit greifst du ein, bevor die jeweilige Eingabe in die Textbox gemacht wird und kannst sie so verhindern (die KeyAscii/KeyCode-Variable auf 0 setzen).
das ist effektiver, als Hinterher wieder was rauslöschen.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige