Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
204to208
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
204to208
204to208
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

In Textbox < 5 Stellen vor Komma verhindern

In Textbox < 5 Stellen vor Komma verhindern
19.01.2003 15:52:15
Felix
Hallo,
habe gedacht ich würde es selber austüfteln können. Schaffe es aber nicht.

Habe von Bernd eben folgenden Code erhalten.
Dieser Code lässt maximal 2 stellen nach dem Komma in der Textbox zu.

Nun mein neues Problem:
Der einzugebende Wert soll außerdem auf 4 Stellen vor dem Komma begrenzt sein.

Kann mir jemand helfen und den Code ergänzen?

Danke Felix

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If InStr(TextBox1.Value, ",") = 0 Then Exit Sub
If Mid(TextBox1.Value, InStr(TextBox1.Value, ",") + 2) <> "" Then TextBox1.MaxLength = InStr(TextBox1.Value, ",") + 2
End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Korrektur: > 4 Stellen verhindern
19.01.2003 16:28:33
Felix
Hallo,
korrektur, in Betreff muß es natürlich so stehen:

"In Textbox > 4 Stellen vor Komma verhindern"

Nochmal mein Problem (Wiederholung vom ersten Text):

habe gedacht ich würde es selber austüfteln können. Schaffe es aber nicht.
Habe von Bernd eben folgenden Code erhalten.
Dieser Code lässt maximal 2 stellen nach dem Komma in der Textbox zu.

Nun mein neues Problem:
Der einzugebende Wert soll außerdem auf 4 Stellen vor dem Komma begrenzt sein.

Kann mir jemand helfen und den Code ergänzen?

Danke Felix

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If InStr(TextBox1.Value, ",") = 0 Then Exit Sub
If Mid(TextBox1.Value, InStr(TextBox1.Value, ",") + 2) <> "" Then TextBox1.MaxLength = InStr(TextBox1.Value, ",") + 2
End Sub

Anzeige
Re: Korrektur: > 4 Stellen verhindern
19.01.2003 16:39:21
Bernd Held
Hallo Felix,

beim rausgehen aus dem Textfeld würde folgendes Makro anlaufen:

Private Sub TextBox1_LostFocus()
If Len(Left(TextBox1.Value, InStr(TextBox1.Value, ",") - 1)) > 4 Then MsgBox "Eingabe nur bis zu 4 Stellen vor dem Komma!"
End Sub

Viele Grüße
Bernd
MVP für Microsoft Excel
Neue VBA-Bücher, Office-FAQs und Makros unter: http://held-office.de

Re: Korrektur: > 4 Stellen verhindern
19.01.2003 17:01:38
Felix
Hallo Bernd,

ist es möglich das Du eine andere Excel-Version nutzt?

Ich habe in der Auswahlliste der Prozeduren keine Möglichkeit für Textbox1 "LostFocus" anzuklicken.

Außerdem ist das nicht das, was ich mir vorgestellt habe. Hatte gehofft es gibt die Möglichkeit wie bei KeyDown das die Textbox dann einfach keinen weiteren Eintrag zuläßt. (ohne MsgBox) Im Grund wie bei dem Beispiel mit "2 Stellen nach dem Komma"

Hast Du noch eine Idee?

Danke
Gruß
Felix

Anzeige
Re: In Textbox < 5 Stellen vor Komma verhindern
19.01.2003 18:37:28
L.Vira
Wenn wasserdicht sein soll(also z.B. die doppelte Eingabe eines Komma verhindern), dann in zwei Schritten:

1. Schritt Eingabe

Private Sub txt1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim S As Byte
Select Case KeyAscii
Case 44
Case 48 To 58
Case Else: KeyAscii = 0
End Select
S = InStr(txt1, ",")
If Len(txt1) = 4 Then KeyAscii = 44
If S > 0 Then txt1.MaxLength = S + 2
End Sub

2. Schritt Exit

Private Sub txt1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(txt1) > 0 And Not IsNumeric(txt1) Then
txt1 = ""
Cancel = True
End If
txt1 = Format(txt1, "#,##0.00")
End Sub

Anzeige
Re: In Textbox < 5 Stellen vor Komma verhindern
19.01.2003 19:30:04
Felix
Hallo L.Vira,
fast gut. Vielen Dank für die Mühe.

Erstes Problem: schreibt zweites Komma, wenn ich einen dreistelligen Wert mit Zwei Stellen hinter dem Komma eingeben will.

Daher habe ich folgende Zeile herausgenommen:

Private Sub txt1_KeyPress(ByVal KeyAscii As Forms.ReturnInteger)
...
'If Len(txt1) = 4 Then KeyAscii = 44
...
End Sub

zweites Problem, wenn erstes Problem behoben: Jetzt kann man ein zweites Komma eingeben.
Kann ich im Notfall mit leben.

Falls Du noch eine Idee hast wie man das verhindern kann, würde ich mich freuen.

Der jetzt folgende Code macht bei mir keinen Sinn da man nach der Eingabe mit "OK" oder "Abbrechen" die Userform verläst.

Private Sub txt1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(txt1) > 0 And Not IsNumeric(txt1) Then
txt1 = ""
Cancel = True
End If
txt1 = Format(txt1, "#,##0.00")
End Sub

Danke
Gruß
Felix


Anzeige
Re: In Textbox < 5 Stellen vor Komma verhindern
19.01.2003 19:39:00
L.Vira
Das Exit Ereignis tritt auch ein, wenn du Ok klickst, also erfolgt die Prüfung auch! Wenn du abbrechen klickst, ist es eh wurscht, was da in der textbox steht.
Re: In Textbox < 5 Stellen vor Komma verhindern
19.01.2003 19:46:43
L.Vira
in Keypress das ändern:

Private Sub txt1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim S As Byte
Select Case KeyAscii
Case 44
Case 48 To 58
Case Else: KeyAscii = 0
End Select
S = InStr(txt1, ",")
If Len(txt1) = 4 And Right(txt1, 1) <> "," Then KeyAscii = 44
If S > 0 Then txt1.MaxLength = S + 2
End Sub

Danke, aber...
19.01.2003 20:20:42
Felix
Hallo L.Vira,

vielen Dank das Du noch mit mir die Geduld aufbringst.

Es wird immer besser, probiere auch noch etwas herum.

Hast Du es bemerkt, zweistelliger Eintrag mit Komma und weiteren zwei Stellen hinter dem Komma, schreibt er wieder in der letzten Stelle ein Komma (insgesamt dann 2).

Sonst bei einstelligen, dreistelligen und vierstelligen Eintrag scheint es zu funktionieren.

Gruß
Felix

Anzeige
Re: Danke, aber...
19.01.2003 20:36:55
L.Vira
Ne, nicht gemerkt, danke für den Hinweis, muss halt noch Bedingung rein.
Jetzt aber...
19.01.2003 20:59:51
L.Vira
manchmal sieht man den Baum vor lauter Wald nicht, oder wars andersrum?

Private Sub txt1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim S As Byte
Select Case KeyAscii
Case 44
Case 48 To 58
Case Else: KeyAscii = 0
End Select
S = InStr(txt1, ",")
If Len(txt1) = 4 And S = 0 Then KeyAscii = 44
If S > 0 Then txt1.MaxLength = S + 2
End Sub

SUPER...
19.01.2003 21:19:20
Felix
Hallo L.Vira,

dieser Einsatz von Dir gebührt ein großes Loooob.

Wirklich super, habe es auch versucht aber nicht geschaft.

Vielen Dank
Gruß
Felix

Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige