VBA Tipp: E-Mail-Adresse aus Textfeld extrahieren

Aus DBWiki
Wechseln zu: Navigation, Suche

Problem

Ich möchte aus einem Datenbankfeld "Kommentar" eine E-Mail-Adresse extrahieren und in ein Feld "EMail" übertragen.

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"

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(S)
Dim MerkSep As Long, MerkAt As Long, I As Long
 
ExtractEMailAddr = Null
 
If IsNull(S) Then Exit Function
  MerkSep = 0: MerkAt = 0
  For I = 1 To Len(S)
    Select Case LCase(Mid(S, 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(S, MerkSep + 1, I - MerkSep - 1)
    Exit Function
End If
 
End Function

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