Bereinigung eines Textes von allen nicht numerischen Zeichen mit der Option für Ausnahmen.

Peter Brandt [Grutzeck Software GmbH]
19.08.2010 14:06

Beschreibung:
Textfelder, welche jedoch für numerische Zeichen vorgesehen sind z.B. Telefonnummer- oder Faxnummerfelder, sollen von nicht erwünschten Zeichen bereinigt werden. Der Grund dafür ist oftmals eine Benutzerfalscheingabe wie z.B. ein zusätzlicher Name der Person zu der Telefonnummer hinterlegt in diesem Feld. Ein weiterer Grund ist auch, wenn man z.B. über einen Drittanbieter per E-Mail eine SMS oder ein FAX versenden möchte und dann die kanonische Formatierung aus AG-VIP SQL übernommen wird ( mit Klammern, Bindestrichen, Leerzeichen etc. ) und diese nicht in dieser Formatierung per E-Mail verschickt werden kann.

Lösung:
Eine Funktion, welche jedes Zeichen des Textes einzeln anschaut und überprüft ob es ein numerisches Zeichen ist (IsNumeric) und auch nur dann diese numerischen Zeichen wieder zusammenfügt. Letztendlich wird der Text als numerische Zeichenfolge zurückgegeben. Eine Option auf spezielle Ausnahmen z.B. für das Plus "+" für die Ländervorwahl z.B. +49 ist durch eine ElseIf-Abfrage ermöglicht.

Makro-Funktion:
'Säuberung eines Textes von allen nicht numerischen Zeichen (Buchstaben, Sonderzeichen, Leerzeichen).
'Ausnahme das Zeichen Plus "+"
Function GetCleanedText(strNumber)
  Dim iCounter, cCharacter
  For iCounter = 1 To Len(strNumber)
    cCharacter = Mid(strNumber, iCounter, 1)
    If IsNumeric(cCharacter) Then
      GetCleanedText = GetCleanedText & cCharacter
    ElseIf cCharacter = "+" Then
      GetCleanedText = GetCleanedText & cCharacter
    End If
  Next
End Function

Anwendung:
Die Funktion wird am Ende des Makros angefügt und beim Aufruf des Feldes wird der Funktionsname vorangestellt (aufgerufen).

Beispiel:
Dim strFaxOffice, strFaxPrivate, strPhone1

strFaxOffice = GetCleanedText(ActiveAddress.Fields("CommFaxOffice").Value)
strFaxPrivate = GetCleanedText(ActiveAddress.Fields("CommFaxPrivate").Value)
strPhone1 = GetCleanedText(ActiveAddress.Fields("CommPhone1").Value)

Etc.

Hinweis:
Bei einer Verwendung von Ländervorwahl und einer Ortsvorwahl mit vorangestellter 0 z.B. +49 (06181) wird die 0 nicht entfernt!
Folge --> +4906181 (wegen Benutzerfalscheingabe! denn richtig wäre +49 (6181) ohne die führende 0)
Die Ausgabe ist Funktionsbezogen korrekt da alle Zeichen numerisch sind (mit Ausnahme des Plus)
Jedoch wäre für eine korrekte Telefon- bzw. FAX-Nummer folgende Ausgabe gewünscht gewesen --> +496181
Falls also die Funktion wirklich für eine Umfomatierung von Telefonnummern verwendet werden sollte, muss zuvor noch eine Abfrage über den Text gemacht werden. Diese sollte dann die führende 0 der Ortsvorwahl entfernen (sofern eine Ländervorwahl angegeben ist und die Ortsvorwahl eine führende 0 besitzt). Achten Sie also am besten darauf, dass Nummern mit einer Ländervorwahl nie mit einer vorangestellten 0 in der Ortsvorwahl gespeichert werden können z.B. mit Hilfe eines Makros beim Speichern. Dann wird dieses Problem nie auftreten können.

Durchschnittliche Bewertung: 0 (0 Abstimmungen)

Kommentieren nicht möglich