Hi!
Nein, ich habe einen String den ich aus der Betreff Zeile von
Outlook habe. Jetzt will ich nachschauen ob in diesem String
sich irgendwo eine Kundennummer befindet (Die Kundennummer ist
alphanumerisch), somit will ich die 3 Buchstaben nicht
abschneiden.
Ich gehe jetzt einfach mal von deinem Ursprungsbeispiel aus (mit dem „GER.000023“):
Zuerst definierst du dir alle notwendigen Variablen. Das sind:
Dim cTextFeld As String
Dim cGesucht As String
Dim cKdNr As String
Dim bGueltig As Boolean
Dim lZaehler As Long
Dim lStart As Long
Dann schiebst du den Inhalt des Textfeldes in die entsprechende Variable:
cTextFeld = Text1.Text
Du definierst dir den Suchbegriff:
cGesucht = „.“
Du ermittelst die Länge des zu durchsuchenden Strings und ziehst davon sechs Stellen ab (Bei einer sechsstelligen Kundennummer kann an z.B. fünfletzter Stelle kein Punkt mehr mit nachfolgender gültiger Kundennummer kommen):
lLenText = Len(cTextFeld) - 6
Du legst den Startwert fest, ab wo die erste Durchsuchung des Strings starten soll (ist immer 1):
lStart = 1
Nun nimmst du eine Schleife (z.B. FOR … NEXT) von Stelle 1 des Strings bis zur letzten gültigen Position, an der ein Punkt erscheinen kann
For lZaehler = 1 To lLenText
Über die INSTR-Funktion suchst du die Position, an der ein Punkt steht und merkst dir diese Position in der Variablen „lPosPunkt“:
lPosPunkt = InStr(lStart, cTextFeld, cGesucht)
Wurde im String ein Punkt gefunden, ist „lPosPunkt“ ungleich 0:
If lPosPunkt > 0 Then
Nun löst du aus dem String die nächsten sechs auf den Punkt folgenden Stellen heraus, beginnend mit der Stelle _nach_ dem Punkt:
cKdNr = Mid$(cTextFeld, lPosPunkt + 1, 6)
Jetzt überprüfst du, ob diese sechs Stellen einen numerischen Wert darstellen (also sechs Ziffern gefunden wurden). Dafür nimmst du die Funktion ISNUMERIC, die dir einen booleschen Wert (True oder False) zurückliefert:
bGueltig = IsNumeric(cKdNr)
Handelt es sich um sechs Ziffern … :
If bGueltig Then
… brichst du die Schleife ab (in der Variablen „cKdNr“ hast du deine gültige Kundennummer):
Exit For
Handelt es sich _nicht_ um sechs Ziffern … :
Else
setzt du den Startwert für die Suche nach dem nächsten Punkt im String auf die Position nach dem gerade gefundenen Punkt:
lStart = lPosPunkt + 1
Ende der IF-Abfrage des booleschen Wertes
End If
Wurde überhaupt kein Punkt im String gefunden … :
Else
… brichst du die Schleife ebenfalls ab. Die Variable „cKdNr“ ist leer:
Exit For
Ende dieser IF-Abfrage
End If
Falls ein Punkt gefunden wurde, aber keine gültige Kundennummer folgte, wird weitergesucht:
Next lZaehler
Und das war’s!
Das Fehler-Handling, die weitere Verarbeitung usw. kannst du gemäß deinen Anforderungen einbauen.
Solltest du den Landercode und den Punkt im Prüfergebnis brauchen, mußt du die vier Stellen von der Kundennummer wieder anfügen.
Hier nochmal der komplette Code ohne Erläuterungen (ist doch eigentlich ganz einfach, oder?
)
Dim cTextFeld As String
Dim cGesucht As String
Dim cKdNr As String
Dim bGueltig As Boolean
Dim lZaehler As Long
Dim lStart As Long
cTextFeld = Text1.Text
cGesucht = „.“
lLenText = Len(cTextFeld) - 6
lStart = 1
For lZaehler = 1 To lLenText
lPosPunkt = InStr(lStart, cTextFeld, cGesucht)
If lPosPunkt > 0 Then
cKdNr = Mid$(cTextFeld, lPosPunkt + 1, 6)
bGueltig = IsNumeric(cKdNr)
If bGueltig Then
Exit For
Else
lStart = lPosPunkt + 1
End If
Else
Exit For
End If
Next lZaehler
Grüße
Heinrich