Herbers Excel-Forum - das Archiv

Textfelder in UF - 2 Fragen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Textfelder in UF - 2 Fragen
von: Markus

Geschrieben am: 15.02.2005 09:54:46
Hallo,
ich habe in einer UF einige Textfelder. Nun möchte ich das in einem Textfeld nur eine 10 stellige Zahl eingetragen werden kann. Zum Thema Zahlen eingabe habe ich folgenden Code genutzt:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc(","), Asc(".")
If InStr(TextBox2, ".") <> 0 Then
KeyAscii = 0
Else
KeyAscii = Asc(".")
End If
Case Asc(vbBack)
Case Asc("-")
If Len(TextBox1) = 0 Then
If InStr(TextBox2, "-") <> 0 Then
Else
KeyAscii = Asc("-")
End If
Else
KeyAscii = 0
End If
Case Else
KeyAscii = 0
End Select
End Sub

Zur Längenbegraenzung habe ich bei dem Druck auf einen Button folgenden If Code genutzt. Doch klappt es nicht, auch wenn ich eine 10 stellige Zahl eingebe bekomme ich die MsgBox angezeigt. Was hab ich falsch gemacht?
If TextBox2.TextLength <> 10 Then
MsgBox ("Please fill in a valid customer number")
Exit Sub
End If
Die zweite Frage dazu ist, wie kann ich eine Prozedur beenden ohne das die nächste Textbox aktiviert wird? Ich habe diesen Code genutzt um auf eine 10 stellige Eingabe zu bestehen, das klappt auch, aber wenn ich die MsgBox bestätige, dann springt er zur nächsten Textbox, doch er soll in dieser bleiben bis die Eingabe richtig ist.
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Length <> 10 Then
MsgBox ("Number to long or to short")
End If
End Sub

Danke im Voraus für Eure Hilfe!!
Markus
Bild

Betrifft: AW: Textfelder in UF - 2 Fragen
von: Roland Hochhäuser

Geschrieben am: 16.02.2005 22:34:51
Hallo Markus,
zur 1.Frage: der Code ist ok: dann sind es eben wirklich keine 10 Stellen
zur 2.Frage: etwa folgendes Strickmuster:
Option Explicit
Dim bolClose As Boolean
Private Sub TextBox2_AfterUpdate()
If bolClose Then Exit Sub
If TextBox2.TextLength <> 10 Then MsgBox "Fehler"
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2.TextLength <> 10 Then
TextBox2 = ""
Cancel = True
End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
bolClose = True
End Sub

Diese Konstruktion verhindert, dass beim Schließen der UF die MessageBox noch mal erscheint.
Feedback wäre nett :-)
Gruß Roland
 Bild
Excel-Beispiele zum Thema "Textfelder in UF - 2 Fragen"
Freiraum am linken Rand von MS-FORMS-Textfeldern löschen Textfelder in UserForm beim Start vorbelegen
Unterdrückung von Sicherheitsabfragen Name der aufrufenden Schaltfläche abfragen
Anzahl der einzufügenden Zeilen abfragen Start- und Enddatum abfragen und markieren
Passwort vergeben und bei CheckBox-Aktivität abfragen Werte von CheckBoxes in einer UserForm abfragen
Wert in Array suchen, ohne jedes Datenfeld abzufragen Mit InputBoxes Zeilennummern abfragen und Summe bilden