New user
  Beiträge: 3
 
  | Hallo,  
  
ist nicht ganz einfach, weil die Eingebenden so kreativ sind. Ich hatte so ein Funktion vor einiger Zeit geschrieben, allerdings für deutsche Rufnummern. Vorgehensweise: Tabelle mit allen Vorwahlen anlegen, dann aus der eingetragenen Rufnummer alle Sonderzeichen entfernen und dann die ersten 2 Zeichen der Rufnummer prüfen ob in Vorwahltabelle -> nicht gefunden, dann die ersten 3 Ziffern (4 Ziffern).  Gefundene Vorwahl und Rest in getrennte Felder schreiben. Als Abfallprodukt erhält man die nicht Gefundenen = falschen Rufnummern. Nebenstellen bekommt man nur hin, wenn man einen Verleich mit der Zentralnummer machen kann, da häufig auch kein Trennzeichen angegeben wird.  
Der beste Weg ist in der Eingabemaske alles getrennt erfassen.  
  
Bei den internationalen Vorwahlen ist es problematisch, weil hier auch einige deutsche Vorwahlen mit den gleichen Ziffern anfangen. Ich hab hier für einen Telefonanlagenvergleich den Umweg über das Land im Datensatz gemacht. Hier brauchte ich aber nicht die Trennung der nationalen Vorwahl, da in der TK die Rufnummer nur eine Zahl ist. Wenn man sicher ist, dass die internationale Vorwahl immer enthalten ist, kann man auch die ausdokumentierte Alternative nehmen.  
  
' Richtige Auslandsvorwahl unabhängig von Schreibweise ermittel  
Function cleanTelNrLand(RufNr As Variant, sLand As Variant) As Variant  
' Normalisiert Telefonnummern  
' Parameter RufNr = Telefonnummer, sLand = Land aus der Adresse  
    Dim sIVW, sVW, sRufNr As String  
    If IsNull(RufNr) Then cleanTelNrLand = Null: Exit Function 'Wenn Null nicht machen  
    RufNr = killSonderzeichen(RufNr) 'Nur noch Zahlen übergeben  
    sRufNr = RufNr  
    sIVW = DLookup("[IVW]", "intVorW", "[Land] = '" & sLand & "'") ' Vorwahl aus Tabelle mit Landesvorwahlen holen  
    If IsNull(sIVW) Then ' Vorwahl nicht gefunden  
        MsgBox ("Achtung! Es wurde kein Land in der Tabelle gefunden! Land: " & sLand & " Rufnummer: " & RufNr)  
    Else ' Vorwahl gefunden  
        If Left(sRufNr, Len(sIVW) - 2) = Right(sIVW, Len(sIVW) - 2) Then '  
            sRufNr = "00" & sRufNr  
        Else  
            sRufNr = sIVW & sRufNr  
        End If  
    'Alternative falls kein Landesfeld verwendet werden soll --> Prüfen ob Anfangszeichen eine Auslandsvorwahl ist.  
    'If IsIVW(Left(RufNr, 4)) Then  
'        sIVW = "00" & Left(RufNr, 4)  
'        sRufNr = Mid(RufNr, 5)  
'        GoTo EndeIVW  
'    End If  
'    If IsIVW(Left(RufNr, 3)) Then  
'        sIVW = "00" & Left(RufNr, 3)  
'        sRufNr = Mid(RufNr, 4)  
'         GoTo EndeIVW  
'    End If  
'    If IsIVW(Left(RufNr, 2)) Then  
'        sIVW = "00" & Left(RufNr, 2)  
'        sRufNr = Mid(RufNr, 3)  
'         GoTo EndeIVW  
'    End If  
    End If  
EndeIVW:  
  
cleanTelNrLand = sRufNr  
End Function  
  
Function killSonderzeichen(RufNr As Variant) As Variant  
' Alle Zahlen und führende Nullen aus Rufnummer entfernen  
  
    Dim i As Integer  
    Dim sTemp, sChar As String  
    Dim bNrStart As Boolean  
      
    bNrStart = False  
    If IsNull(RufNr) Then killSonderzeichen = Null: Exit Function  
      
    For i = 1 To Len(RufNr) ' Jedes Zeichen einzeln prüfen.  
        sChar = Mid(RufNr, i, 1)  
        If IsNumeric(sChar) Then  
            If sChar = "0" And bNrStart = False Then 'führende Nullen entfernen  
            Else  
                sTemp = sTemp & sChar  
                bNrStart = True  
            End If  
        End If  
    Next i  
    killSonderzeichen = sTemp  
End Function  
  
Public Function IsIVW(ByVal sIVW) As Boolean  
' Prüft ob in Auslandsvorwahltabelle enthalten  
     If DCount("*", "IntVorw", "IVW='00" & sIVW & "'") Then  
           IsIVW = True  
     End If  
End Function  
  
Gruß Conrad |