Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Emailadresse auf Vollständigkeit prüfen

Emailadresse auf Vollständigkeit prüfen
23.01.2018 19:35:15
Gregy
Hallo liebe Experten,
ich versuche seit Stunde eine aus dem Netz gefundene Funktion in meine Tabelle einzubauen. Es handelt sich um eine Funktion zur Prüfung der Emailadresse (Syntaxprüfung)
Hier der Code:

Public Function IsValidEMail(S)
Dim Ch As String * 1, i As Long, Ats As Long, Periods As Long
Dim LeftofAt As Boolean, IsLeading As Boolean
IsValidEMail = True
If IsNull(S) Then Exit Function
IsValidEMail = False
LeftofAt = True
IsLeading = True
Periods = 0
Ats = 0
For i = 1 To Len(S)
Select Case Asc(Mid(S, i, 1))
Case Asc("@")
Ats = Ats + 1
' links vom "@" muss wenigstens ein Zeichen sein:
If i = 1 Then Exit Function
' nur ein "@" erlaubt:
If Ats > 1 Then Exit Function
LeftofAt = False
IsLeading = True
Case Asc(".")
' Punkte rechts vom "@" zählen:
If Not LeftofAt Then Periods = Periods + 1
' zu viele Punkte (technisch zwar möglich, aber unwahrscheinlich):
If Periods > 4 Then Exit Function
' Top Level Domain hat weniger als 2 Zeichen:
If i > Len(S) - 2 Then Exit Function
Case Asc("A") To Asc("Z"), Asc("a") To Asc("z"), Asc("0") To Asc("9")
IsLeading = False
Case Asc("-")
' kein führendes "-" erlaubt:
If IsLeading Then Exit Function
Case Asc("_")
' "_" nur links vom "@" erlaubt:
If IsLeading Or Not LeftofAt Then Exit Function
Case Else
' andere Zeichen sind nicht zulässig:
Exit Function
End Select
Next
If Periods > 0 Then IsValidEMail = True
End Function
Ich habe im weiteren eine Userform mit zwei Textfeldern für Emailadressen und zwei CommandButtons (Absenden und Abbruch)
Hier der Code in der Userform

Public Sub CommandButton1_Click()
If Dir("H:\Subkontraktoren-Anlage", vbDirectory) = "" Then
MkDir "H:\Subkontraktoren-Anlage"
Else
ChDir ("H:\Subkontraktoren-Anlage")
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"H:\Subkontraktoren-Anlage\Subkontraktoren-Anlage.pdf", openAfterPublish:=False
Dim Outlook As Object
Dim OutlookMailItem As Object
Dim myAttachments As Object
Set Outlookapp = CreateObject("outlook.application")
Set OutlookMailItem = Outlookapp.CreateItem(0)
Set myAttachments = OutlookMailItem.Attachments
On Error Resume Next
With OutlookMailItem
.To = Me.TextBox1.Value
.Cc = Me.TextBox2.Value
.Subject = Me.TextBox3.Value
.Body = Me.TextBox4.Value
myAttachments.Add "H:\Subkontraktoren-Anlage\Subkontraktoren-Anlage.pdf" _
.Send
End With
Call CommandButton2_Click
End If
End Sub
Wie kann ich die Private Function zur Syntaxabfrage in den Commandbutton1 (Absenden) einbringen (ich habe keinen Plan von functions...)
Schon einmal vielen Dank für die Unterstützung!
VG Gregy
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Emailadresse auf Vollständigkeit prüfen
23.01.2018 19:42:57
Sepp
Hallo Gregy,
zur Prüfung würde ich diese Funktion benutzen:
Private Function IsValidMailAddress(ByVal strAddress As String) As Boolean
Dim oRegExp As Object

Set oRegExp = CreateObject("vbscript.regexp")

With oRegExp
  .Pattern = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|" & _
    "}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:" & _
    "[a-z0-9-]*[a-z0-9])?"
  
  .IgnoreCase = True
  IsValidMailAddress = .test(strAddress)
End With

Set oRegExp = Nothing
End Function

Und anwenden dann so:
Public Sub CommandButton1_Click()
If IsValidMailAddress(textbox1) Then
  If IsValidMailAddress(textbox2) Then
    If Dir("H:\Subkontraktoren-Anlage", vbDirectory) = "" Then
      MkDir "H:\Subkontraktoren-Anlage"
      
    Else
      ChDir ("H:\Subkontraktoren-Anlage")
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "H:\Subkontraktoren-Anlage\Subkontraktoren-Anlage.pdf", openAfterPublish:=False
      
      Dim Outlook As Object
      Dim OutlookMailItem As Object
      Dim myAttachments As Object
      
      Set Outlookapp = CreateObject("outlook.application")
      Set OutlookMailItem = Outlookapp.CreateItem(0)
      Set myAttachments = OutlookMailItem.Attachments
      
      On Error Resume Next
      With OutlookMailItem
        .To = Me.textbox1.Value
        .Cc = Me.textbox2.Value
        .Subject = Me.TextBox3.Value
        .Body = Me.TextBox4.Value
        myAttachments.Add "H:\Subkontraktoren-Anlage\Subkontraktoren-Anlage.pdf"
        .Send
      End With
      Call CommandButton2_Click
    End If
  Else
    MsgBox "CC-Adresse ungültig!"
  End If
Else
  MsgBox "Empfängeradresse ungültig!"
End If

End Sub

Gruß Sepp

Anzeige
AW: Emailadresse auf Vollständigkeit prüfen
24.01.2018 07:59:21
Gregy
Hallo Sepp,
vielen Dank, es funktioniert einwandfrei!!!
Ich werde mich jetzt ranmachen und versuchen zu verstehen was Du da umgesetzt hast.
Gruß Gregy
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

E-Mail-Adresse auf Vollständigkeit prüfen


Schritt-für-Schritt-Anleitung

Um die E-Mail-Adresse zu überprüfen, kannst Du eine benutzerdefinierte Funktion in VBA erstellen. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du die Syntaxprüfung einer E-Mail-Adresse in Excel umsetzen kannst:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  3. Kopiere den Code für die E-Mail-Prüfung:

    • Füge den folgenden Code in das Modul ein:
    Public Function IsValidEMail(S As String) As Boolean
       Dim Ch As String * 1, i As Long, Ats As Long, Periods As Long
       Dim LeftofAt As Boolean, IsLeading As Boolean
       IsValidEMail = True
       If IsNull(S) Then Exit Function
       IsValidEMail = False
       LeftofAt = True
       IsLeading = True
       Periods = 0
       Ats = 0
       For i = 1 To Len(S)
           Select Case Asc(Mid(S, i, 1))
               Case Asc("@")
                   Ats = Ats + 1
                   If i = 1 Then Exit Function
                   If Ats > 1 Then Exit Function
                   LeftofAt = False
                   IsLeading = True
               Case Asc(".")
                   If Not LeftofAt Then Periods = Periods + 1
                   If Periods > 4 Then Exit Function
                   If i > Len(S) - 2 Then Exit Function
               Case Asc("A") To Asc("Z"), Asc("a") To Asc("z"), Asc("0") To Asc("9")
                   IsLeading = False
               Case Asc("-")
                   If IsLeading Then Exit Function
               Case Asc("_")
                   If IsLeading Or Not LeftofAt Then Exit Function
               Case Else
                   Exit Function
           End Select
       Next
       If Periods > 0 Then IsValidEMail = True
    End Function
  4. Implementiere die Funktion im CommandButton:

    • Gehe zu der Userform und füge im Code für den CommandButton1_Click die E-Mail-Überprüfung wie folgt hinzu:
    If IsValidEMail(Me.TextBox1.Value) Then
       ' Weiterer Code
    Else
       MsgBox "Ungültige E-Mail-Adresse!"
    End If
  5. Testen:

    • Führe die Userform aus und teste die E-Mail-Adresse, um sicherzustellen, dass die Funktion funktioniert.

Häufige Fehler und Lösungen

  • Fehler: Ungültige E-Mail-Adresse wird nicht erkannt: Stelle sicher, dass die Funktion IsValidEMail korrekt implementiert ist und keine Syntaxfehler im Code vorhanden sind.
  • Fehler: Die Anwendung stürzt ab: Überprüfe, ob alle Variablen richtig deklariert sind und ob der Code keine endlosen Schleifen verursacht.
  • E-Mail-Adresse wird nicht gesendet: Vergewissere Dich, dass die E-Mail-Adresse wirklich gültig und die Outlook-Anwendung korrekt konfiguriert ist.

Alternative Methoden

Eine alternative Methode zur E-Mail-Überprüfung ist die Verwendung von regulären Ausdrücken. Hier ist ein Beispiel:

Private Function IsValidMailAddress(ByVal strAddress As String) As Boolean
    Dim oRegExp As Object
    Set oRegExp = CreateObject("vbscript.regexp")
    With oRegExp
        .Pattern = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"
        .IgnoreCase = True
        IsValidMailAddress = .test(strAddress)
    End With
    Set oRegExp = Nothing
End Function

Diese Methode ist besonders nützlich, wenn Du die E-Mail-Adresse validieren möchtest, um die Gültigkeit der E-Mail-Adresse umfassender zu prüfen.


Praktische Beispiele

Wenn Du E-Mail-Adressen prüfen möchtest, kannst Du dies in Deiner Excel-Tabelle tun. Hier ein Beispiel, wie Du eine Liste von E-Mail-Adressen überprüfen kannst:

Sub CheckEmailAddresses()
    Dim cell As Range
    For Each cell In Range("A1:A10") 'Angenommen, die E-Mail-Adressen sind in Spalte A
        If Not IsValidEMail(cell.Value) Then
            cell.Offset(0, 1).Value = "Ungültig" 'Markiere die ungültige E-Mail Adresse in der nächsten Spalte
        Else
            cell.Offset(0, 1).Value = "Gültig"
        End If
    Next cell
End Sub

Tipps für Profis

  • Massenhaft E-Mail-Adressen erstellen: Wenn Du viele E-Mail-Adressen generieren und überprüfen musst, kannst Du VBA verwenden, um dies automatisiert zu tun. Dies spart Zeit und minimiert Fehler.
  • E-Mail-Erreichbarkeit prüfen: Es ist möglich, die Erreichbarkeit einer E-Mail-Adresse zu prüfen, indem Du SMTP-Serveranfragen sendest, jedoch erfordert dies mehr Programmierkenntnisse.
  • Regelmäßige Ausdrücke verwenden: Nutze reguläre Ausdrücke zur umfassenden Validierung. Diese Methode ist flexibler und kann an unterschiedliche Anforderungen angepasst werden.

FAQ: Häufige Fragen

1. Wie kann ich die E-Mail-Adresse auf Existenz prüfen? Antwort: Um zu überprüfen, ob eine E-Mail-Adresse existiert, kannst Du den SMTP-Server anfragen. Beachte jedoch, dass dies nicht immer legal oder praktisch ist.

2. Was kann ich tun, wenn meine Funktion nicht funktioniert? Antwort: Überprüfe den Code auf Syntaxfehler und stelle sicher, dass alle Variablen korrekt deklariert sind. Du kannst auch den Debugger von VBA verwenden, um mögliche Probleme zu identifizieren.

3. Wie kann ich mehrere E-Mail-Adressen gleichzeitig prüfen? Antwort: Du kannst eine Schleife verwenden, um über eine Liste von E-Mail-Adressen zu iterieren und die Validierungsfunktion auf jede Adresse anzuwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige