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