VBA Tipp: E-Mail-Adresse aus Textfeld extrahieren

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte aus einem Datenbankfeld "Kommentar" eine E-Mail-Adresse extrahieren und in ein Feld "EMail" übertragen.
Wie mache ich das? Das Problem ist, dass die E-Mail-Adresse an einer beliebigen Stelle in diesem Feld stehen kann.

Lösung

Das geht mit folgender VBA-Funktion:

Public Function ExtractEMailAddr(Text As Variant) As Variant
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Dim merkSep As Long
   Dim merkAt  As Long
   Dim i       As Long
 
   ExtractEMailAddr = Null
 
   If IsNull(Text) Then Exit Function
 
   For i = 1 To Len(Text)
      Select Case LCase$(Mid$(Text, i, 1))
         Case "a" To "z", "0" To "9", "-", "_", "."
         Case "@"
            merkAt = i
         Case Else
            If merkAt > 0 Then Exit For
            merkSep = i
      End Select
   Next
   If merkAt > 0 Then
      ExtractEMailAddr = Mid$(Text, merkSep + 1, i - merkSep - 1)
      Exit Function
   End If
End Function

Aufruf

So können die Daten im Feld "Kommentar" aussehen:

"Nur Montags anliefern, hans@meiser.de, Tel.:2135464"
"peter@mueller.de, 18,30 DM EK"
"www.beispiel.de heinz@beispiel.de / Hobby ist Fußball"

Damit kann man jetzt z.B. eine Aktualisierungsabfrage aufbauen mit folgender SQL:

UPDATE MeineTabelle SET [EMail] = ExtractEMailAddr([Kommentar])

Oder man verwendet die Funktion in einer Ereignisprozedur:

Private Sub Kommentar_AfterUpdate()
   Me.EMail = ExtractEMailAddr(Me.Kommentar)
End Function