Userform Textbox Eingabeformat vorgeben
#1
Hallo Forum,

ich suche eine Möglichkeit das auf einer Userform in TextBox1 nur folgende
Eingaben möglich sind.

Format1: 2 Buchstaben und 4 Zahlen
Beispiel: AB1234
Format2: 2 Buchstaben und 4 Zahlen und 1 Bindestich und 2 Zahlen.
Beispiel: AB1234-12

Ab besten wäre ein vorbelegtes Eingabeformat, so das der User nur die Zahlen eingeben muss.

Besten Dank im Voraus
omron2003
Antworten Top
#2
Hallo, und dann, was soll damit geschehen? In Sheet?
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
Antworten Top
#3
Hallo,

der Wert soll dann per Buttonklick an das aktive Sheet übergeben siehe Code.

Code:
Dim AktuelleZeile As Integer
AktuelleZeile = ActiveCell.Row()
Cells(ActiveCell.Row, 3) = TextBox1
usw....
Antworten Top
#4
Moin,

soetwas gibt es für TextBoxen nicht vorgefertigt, du müsstest das also selbst programmieren. Hierzu würde es sich eigentlich anbieten, "einfach" eine Klasse zu entwickeln, die eine "ValidatedTextBox" erstellt. Innerhalb der Klasse würden dann die Events der sichtbaren Textbox abgefangen und der Inhalt entsprechend verarbeitet. Blöd daran ist allerdings, dass die ActiveX-Steuerelemente die Enter() und Exit()-Events nicht weiterleiten und du somit nicht darauf reagieren kannst. Du müsstest also auf das .Change()-Event ausweichen, welches im Zweifel recht häufig aufgefangen werden muss.

Also bleibt dir zunächst nur, die Einzelfalllösung im Klassenmodul der UserForm. Hier würde ich mich an das Exit()-Event der Textbox binden und von dort aus eine Validation()-Function aufrufen, die den Inhalt der Textbox als Parameter enthält. Die Validierung selbst würde ich mit einem regulären Ausdruck erledigen. Falls die Validierung fehlschlägt, springst du zurück in die Textbox. Anschließend musst du nur noch überlegen, wie du den Fall abfängst, dass gar kein Exit-Event ausgelöst wird (bspw, wenn der Nutzer direkt einen Button klickt, während die Textbox noch aktiv ist). 

Praktischer fände ich persönlich, die Teile auf drei Textboxen aufzuteilen. Noch besser wäre es, einfach die Datengültigkeit im Tabellenblatt zu verwenden und auf die UserForm zu verzichten.

Viele Grüße
derHöpp
Antworten Top
#5
Hallo,

wenn ich es richtig verstanden habe, wäre es für deine Textbox so:
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    With TextBox1
        If Len(TextBox1) < 6 Then
            If Len(TextBox1) < 2 Then
                Select Case KeyAscii
                    Case 65 To 122
                    Case Else: KeyAscii = 0
                End Select
            Else
                Select Case KeyAscii
                    Case 48 To 57, 96 To 105
                    Case Else: KeyAscii = 0
                End Select
            End If
        Else
            If Len(TextBox1) = 6 Then
                Select Case KeyAscii
                    Case 45
                    Case Else: KeyAscii = 0
                End Select
            Else
                If Len(TextBox1) = 9 Then Exit Sub
                Select Case KeyAscii
                    Case 48 To 57, 96 To 105
                    Case Else: KeyAscii = 0
                End Select
            End If
        End If
    End With
End Sub

Gruß Uwe

ich habe noch etwas übersehen. Da brauchst noch die Begrenzung der maximalen Zeichenzahl.
Dies wäre so:
Code:
If Len(TextBox1) = 9 Then TextBox1 = Left(TextBox1, Len(TextBox1) - 1): Exit Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • omron2003
Antworten Top
#6
(04.12.2024, 10:27)omron2003 schrieb: Hallo Forum,

ich suche eine Möglichkeit das auf einer Userform in TextBox1 nur folgende
Eingaben möglich sind.

Format1: 2 Buchstaben und 4 Zahlen
Beispiel: AB1234
Format2: 2 Buchstaben und 4 Zahlen und 1 Bindestich und 2 Zahlen.
Beispiel: AB1234-12

Ab besten wäre ein vorbelegtes Eingabeformat, so das der User nur die Zahlen eingeben muss.

Besten Dank im Voraus
omron2003

Das wäre mein Vorschlag:
Code:
Option Explicit

Const MusterVorlage = "####-##"

Private Sub CommandButton1_Click()
  If TextBox1 Like MusterVorlage Then
    Cells(ActiveCell.Row, 3).Value = "AB" & UCase(TextBox1)
  Else
    MsgBox "Die Eingabe war nicht komplett!", vbInformation
    TextBox1.SetFocus
  End If
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If Not LCase(TextBox1 & Chr(KeyAscii)) Like Left(MusterVorlage, Len(TextBox1) + 1) Then
    KeyAscii = 0
  End If
End Sub
[-] Folgende(r) 2 Nutzer sagen Danke an Kuwer für diesen Beitrag:
  • omron2003, knobbi38
Antworten Top
#7
Danke an alle die mir hier geantwortet haben!

Ich werde die verschiedenen Lösungsvorschläge testen und mich bei Fragen ggf. nochmals melden.

Nochmals besten Dank für die schnelle Hilfe.
Gruß
omron2003
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste