Userform Textboxlänge festlegen

Guten Morgen,
in einer Userform möchte ich die Länge der TextBox auf 12 Zeichen festlegen.
Berücksichtigt werden soll das das 9.te Zeichen immer ein Buchstabe sein muss und keine Leerzeichen vorkommen dürfen.
Wenn dies nicht der Fall ist soll eine Meldung kommen.
Z.B. 00121257G017
Danke!
Gruß
Ludmila

Hallo Ludmilla,

probier mal Folgendes:
In den Eingeschaften der TextBox setzte die MaxLength auf 12.

Füge folgende Ereignisprozedur für deine Textbox ein:

Private Sub TextBox1\_Change()
 Const erlaubt As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜabcdefghijklmnopqrstuvwxyzäöüß"
 With TextBox1
 If InStr(.Value, " ") \> 0 Then
 MsgBox "keine Leerzeichen"
 .Value = Replace(.Value, " ", "")
 End If
 If InStr(erlaubt, Mid(.Value, 9, 1)) = 0 Then
 MsgBox "An 9. Stelle nur Buchstaben"
 .Value = Left(.Value, 8) & Mid(.Value, 10)
 End If
 End With
End Sub

Den Namen „TextBox1“ noch entsprechend anpassen.

Gruß, Andreas

Hallo Andreas,
Danke erstmal für Deine Hilfe.
Es funktioniert so sehr gut, jedoch müssen unbedingt auch 12 Ziffern eingegeben werden.
Das heißt, 1-8 = Zahl, 9 = Buchstabe, 10-12 = Zahl
Wie muss dann der Code lauten ?
Gruß
Ludmila

Hallo Ludmila, hallo Andreas
Sehr gut, habe auch keine bessere Antwort. Viel Erfolg.

Hallo Andreas,

Hallo Ludmila,

jedoch müssen unbedingt auch 12
Ziffern eingegeben werden.
Das heißt, 1-8 = Zahl, 9 = Buchstabe, 10-12 = Zahl
Wie muss dann der Code lauten ?

Dann kannst du die Prüfung natürlich erst durchführen, wenn der Benutzer, die Eingabe-, oder Tab-Taste oder was auch immer drückt. Denn erst dann ist klar, ob er genau 12 Zeichen eingegeben hat.
Der Code könnte dann so aussehen

Option Base 1
Option Explicit

Private Sub TextBox1\_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
 Dim erlaubt(12) As String
 Dim i As Integer

 For i = 1 To 12
 erlaubt(i) = "0123456789"
 Next i
 erlaubt(9) = "abcdefgihjklmnopqrstuvwxyzäöüßABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ"

 Cancel = False
 If Len(TextBox1.Value) 12 Then
 MsgBox "Bitte genau 8 Ziffern, 1 Buchstaben und 3 Ziffern eingeben"
 Cancel = True
 Exit Sub
 End If
 For i = 1 To 12
 If InStr(erlaubt(i), Mid(TextBox1.Value, i, 1)) = 0 Then
 MsgBox "Mindestens eine Position enthält einen Fehler"
 Cancel = True
 Exit Sub
 End If
 Next i
End Sub

Einen Schönheitsfehler hat das ganze noch. Wenn du eine falsche Eingabe machst und dann einfach die ganze UserForm zuklickst, kommt zwar eine Fehlermeldung, die UserForm ist aber trotzdem zu.
Ich werde noch ein bisschen daran arbeiten. Aber es gibt ja auch richtige Experten hier, die vielleicht dafür schon eine Lösung haben.

Gruß
Ludmila

Gruß, Andreas

Verbesserter Code
Hallo ludmila,

hier jetzt Code, der auch das Schließen der UserForm verhindert, wenn die Eingabe in der TextBox nicht den Vorgaben entspricht:

Option Base 1
Option Explicit

Private Sub TextBox1\_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
 Cancel = Not gueltig
End Sub

Private Sub TextBox1\_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Cancel = Not gueltig
End Sub

Private Sub UserForm\_QueryClose(Cancel As Integer, CloseMode As Integer)
 Cancel = (Not gueltig) \* -1
End Sub

Function gueltig() As Boolean
 Dim erlaubt(12) As String
 Dim i As Integer

 For i = 1 To 12
 erlaubt(i) = "0123456789"
 Next i
 erlaubt(9) = "abcdefgihjklmnopqrstuvwxyzäöüßABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ"

 gueltig = True
 If Len(TextBox1.Value) 12 Then
 MsgBox "Bitte genau 8 Ziffern, 1 Buchstaben und 3 Ziffern eingeben"
 gueltig = False
 Exit Function
 End If
 For i = 1 To 12
 If InStr(erlaubt(i), Mid(TextBox1.Value, i, 1)) = 0 Then
 MsgBox "Mindestens eine Position enthält einen Fehler"
 gueltig = False
 Exit Function
 End If
 Next i
End Function

Gruß, Andreas

Hallo Andreas,
Der Code fkt genauso wie ich es haben wollte.
Gruß, Ludmila