Hallo Tester96,
willst du nicht auch selbst Hand anlegen?
Hier mal eine mögliche Anpassung, dass 'x' 2 mal vorkommt und jede Ziffer nur 1 mal.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | Public Function testeString( ByRef s As String ) As Boolean
Dim i As Long , letzteZiffer As Long
Dim schar As String , lchar As Long , countx As Long
Dim ZifferVorhanden(1 To 7) As Boolean
testeString = False
If Not Len(s) = 9 Then Exit Function
countx = 0
letzteZiffer = 0
For i = 1 To 7: ZifferVorhanden(i) = False : Next
For i = 1 To 9
schar = Mid(s, i, 1)
If schar = "x" Then
letzteZiffer = 0
countx = countx + 1
If countx > 2 Then Exit Function
ElseIf InStr( "1234567" , schar) Then
lchar = CLng (schar)
If lchar < letzteZiffer Then Exit Function
letzteZiffer = lchar
If ZifferVorhanden(lchar) Then Exit Function
ZifferVorhanden(lchar) = True
Else
Exit Function
End If
Next
For i = 1 To 7
If Not ZifferVorhanden(i) Then Exit Function
Next
testeString = True
End Function
|
Man kann das sicherlich verdichten, dazu bin ich aber gerade zu faul :-).
Hier ein Test-Makro, mit den Beispielen, die mir bisher in diesem Thread über den Weg gelaufen sind:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | Sub test()
Dim richtige, falsche, aktuelles, tests_bestanden As Boolean
richtige = Array( "47x2356x1" , "123x57x46" , "xx1234567" , "567xx1234" )
falsche = Array( "3x1234567" , "67x123457" , "12345x76x" )
tests_bestanden = True
For Each aktuelles In richtige
If Not testeString((aktuelles)) Then
Debug.Print "Sollte eigentlich wahr sein: " , aktuelles
tests_bestanden = False
End If
Next
For Each aktuelles In falsche
If testeString((aktuelles)) Then
Debug.Print "Sollte eigentlich falsch sein: " , aktuelles
tests_bestanden = False
End If
Next
If tests_bestanden Then
Debug.Print "Tests erfolgreich durchlaufen"
End If
End Sub
|
Dorrt kannst du einfach in diesen Zeilen
1 2 | richtige = Array( "47x2356x1" , "123x57x46" , "xx1234567" , "567xx1234" )
falsche = Array( "3x1234567" , "67x123457" , "12345x76x" )
|
weitere Strings hinzufügen zum testen. Das kann beim Programmieren sehr helfen (man programmiert so lange, bis die Funktion alle tests besteht.
Grüße, Ulrich
|