Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: e-mail automatisch versenden bei Bedingung

e-mail automatisch versenden bei Bedingung
26.09.2006 15:51:38
frank
Hallo Leute,
ich habe im Forum ein tolles makro gefunden welches mir bei meinem Problem sehr helfen könnte. Dieses schaut in C4 und weiter mit E4, F4... -> habe es mal so gelassen wegen den Urheberrechten!!
Ich brauche nun Hilfe um dieses etwas umzustricken. Habe von VBA außer Makrorecorder noch nicht viel Ahnung. Es sind mehr oder weniger Wenn abfragen.
Ich habe eine Tabelle welche Zeilenweise abgearbeitet werden soll.
Ich probiere mal dies zu veranschaulichen.
Das Programm soll folgendes machen:
Es soll Zeile für Zeile durchgegangen und nur eine mail abgeschickt werden wenn folgende Bedingungen erfüllt sind. Beginn in Zeile 1:
Wenn in Zelle F1 ein x steht und L1 leer ist und das heutige datum plus 7 Tage kleiner oder gleich dem datum in K1 dann Kopiere email Adresse von Zelle J1 nach L1 und sende eine mail an die Adresse welche in Zelle J1 steht.
Ich hoffe mir kann jemand auf die Sprünge helfen.
Gruß Frank

Sub Mail()
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Dim strFile As String, strRecipient As String, strSubject As String
Dim bolStatusBar
bolStatusBar = Application.DisplayStatusBar
Range("C4").Select
Do While ActiveCell <> ""
If ActiveCell > 0 Then
ActiveCell.Offset(-2, 0) = ""
End If
If ActiveCell <= 0 And ActiveCell.Offset(-2, 0) = "" Then
ActiveCell.Offset(-2, 0) = "ja"
' betrag = Format(ActiveCell, "0.00")' brauche ich nicht
Set objOutlook = CreateObject("Outlook.Application")
strRecipient = ActiveCell.Offset(-3, 0)
strSubject = "Erinnerung!"
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
Set objOutlookRecip = .Recipients.Add(strRecipient)
objOutlookRecip.Type = olTo
.Subject = strSubject
.Body = "Hallo, " & vbLf & vbLf & _
"Denkt bitte an ... " & vbLf & vbLf & vbLf & _
"Mit freundlichen Grüßen" & vbLf & vbLf & vbLf & _
Application.UserName
weiter:
objOutlookRecip.Resolve
End With
Set objOutlook = Nothing
'objOutlookMsg.Display ' wird jede Mail vorher angeigt
objOutlookMsg.Send ' wird jede Mail gleich abgeschickt
Application.StatusBar = False
Application.DisplayStatusBar = bolStatusBar
End If
ActiveCell.Offset(0, 1).Select
Loop
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: e-mail automatisch versenden bei Bedingung
26.09.2006 17:01:59
Anton
Hallo Frank,
ich habe das Problem modular gelöst:
Du schreibst Deine Bedingungen:
If Range("F1").value = "x" then 'erste Prüfung ob "x" da ist
If Range("L1").value = "" then 'zweite Prüfung ob die Zelle leer ist
If Range ("K1").value Range("L1") = Range("J1").value 'der Kopiervorgang
Call Makro_Email_senden 'Aufruf eines zweiten Makros (siehe Unten)
End If
End if
End If
Hier Das Makro zum E-Mail versenden:
Du mußt Dir nur die Zellen ändern bzw. die Einträge direkt im Makro ändern.

Sub Excel_Serienmail_mit_mehreren_Anlagen_via_Outlook_Senden()
'Variablendefinition
Dim fs As Object            'Das ist eine Datei
Dim F As Object             '  ?
Dim OutApp As Object        'Das E-Mail-Programm
Dim Mail As Object          'Die für sich
Dim i As Integer            'Die abzuarbeitenden Zeilen
Dim y As Integer            'Die Zeilen der Dateien
Dim Msg As Integer          ' ? Rückgabewert der MSG-Box ?
Dim Nachricht As Variant    'Definition der E-Mail-Dtails
Dim AWS As String           'Übergabe der Datei/Pfad-Namen
Dim AnzEmpfänger As Integer 'Anzahl der Schleifenwiederholungen
Dim Auswahldatum As String  'Datum der Auswertungen eingeben (für die Datei-Auswahl)
Dim AnzDateien As Integer 'Anzahl der Schleifenwiederholungen
'Auswertungsdatum setzen
Auswahldatum = InputBox("Bitte geben Sie das Datum" & Chr(10) & "der Auswertung ein:" & Chr(10) & "(JJJJ-MM-TT) oder" & Chr(10) & "(JJJJ-'KW'-Wochennummer) oder" & Chr(10) & "(JJJJ-'Monat'-Monatnummer)", "Dateneingabe:")
Range("J1").Value = Auswahldatum
'Variablen füllen
'Filesystemobjekt erstellen
Set fs = CreateObject("Scripting.FileSystemObject")
'Hier die Anzahl Empfänger definieren
'Kann auch ein Range auf der Tabelle sein
AnzEmpfänger = Range("G1") + 1    '"+1" wegen der in der ersten Zeile stehenden Überschriften
AnzDateien = Range("H1")
'1. Fehlerprüfung
'Prüfen ob alle Inhalte vorhanden sind
'Wenn nicht wird das Makro abgebrochen
'In Spalte A steht der (Original)Empfänger
'In Spalte B steht der Kopie-Empfänger
'In Spalte C steht der Blindkopie-Empänger
'In Spalte D steht der Betreff
'In Spalte E steht der Text
For i = 2 To AnzEmpfänger       '2 wegen der in der ersten Zeile stehenden Überschriften
If Cells(i, 1) = "" Or Cells(i, 2) = "" Then
Msg = MsgBox("Unvollständige Angaben beim Empfänger in Zeile " & i, vbCritical + vbOKOnly, "Abbruch")
Exit Sub
End If
Next i
'2. Fehlerprüfung
'Mit dem FilesystemObjekt wird zuerst die Existenz
'der Dateien geprüft. Wenn eine nicht existiert
'wird das Makro abgebrochen
'Die Links auf deine Anlagen liegen im
'Bereich F2 : F3
For y = 2 To (AnzDateien + 1) 'Zahl der Dateien plus Überschriftenzeile
'Wenn eine Zelle leer ist, wird aus der Schleife ausgestiegen
'ohne weitere Fehlerprüfung
If Cells(y, 9) = "" Then Exit For
If fs.fileexists(Cells(y, 9)) = False Then
Msg = MsgBox("Die Datei: " & Cells(y, 9) & " in F" & y & " exitstiert nicht !" & vbCrLf & "Der Sendevorgang an; " & Cells(i, 1) & " wird abgebrochen!", vbCritical + vbOKOnly, "Dateifehler")
Exit Sub
End If
Next y
'Sendevorgang einleiten
For i = 2 To AnzEmpfänger       '2 wegen der in der ersten Zeile stehenden Überschriften
Set OutApp = CreateObject("Outlook.Application")
Set Nachricht = OutApp.CreateItem(0)        'Initial-Stoß für Outlook
With Nachricht
.To = Cells(i, 1) 'irgendwer@irgendein-provider.de
'vielleicht per: .Recipients:=Array(Lyck.Lack@t-online.de,hausmeister@de.stabilus.com)
'oder per semikolon getrennt (als Formel-Code)
.cc = Cells(i, 2) 'irgendwerZweites@nochein-provider.de
'            .bcc = Cells(i, 3) 'irgendwerdrittes@blind-provider.de
.Subject = Cells(i, 4) 'Betreffzeile
.Body = Cells(i, 5) 'Sendetext"
For y = 2 To (AnzDateien + 1) 'Zahl der Dateien plus Überschriftenzeile
AWS = Cells(y, 9)
'Wenn die Zelle / Variable leer ist
'wird diese Schleife für die Attachments abgebrochen
If AWS = "" Then Exit For
.attachments.Add AWS
Next y
'Hier wird die Mail zuerst angezeigt
.Display
'Hier wird die Mail gleich in den Postausgang gelegt
'.Send
End With
'Variablen zurücksetzen
Set OutApp = Nothing
Set Nachricht = Nothing
'Warten auf Outlook :-))
Application.Wait (Now + TimeValue("0:00:05"))
Next i
End Sub

Servus,
Anton
Anzeige
AW: e-mail automatisch versenden bei Bedingung
26.09.2006 17:55:01
frank
Hallo Anton,
vielen Dank für Deine Bemühungen.
Wenn ich das richtig interpretiere sind die ersten Zeilen mit der If Abfrage für das makro welches ich angegeben hatte und der professionelle Teil Deine Vorgehensweise.
Werde beide gleich ausprobieren.
Melde mich wenn ich es hinbekommen habe.
Danke Frank
Anzeige
AW: e-mail automatisch versenden bei Bedingung
26.09.2006 18:50:11
frank
Hallo Anton
jetzt kommen schon meine ersten Probleme. Die IF Bedingungen kommen doch in meinem Makro an die stelle wo ich die erste Zellenauswahl starte, oder?
Wie stelle ich es denn an, dass wenn ich die drei Bedingungen abgefragt habe diese zur nächsten Zeile springt. Sind immerhin 100 Zeilen.
Sobald eine Bedingung nicht erfüllt ist soll keine Mail geschrieben werden sondern sofort zur nächsten Zeile und erneut die Bedingungen abgefragt.
Frank
Anzeige
AW: e-mail automatisch versenden bei Bedingung
26.09.2006 22:22:28
frank
Hallo,
irgendwie komme ich nicht klar. Habe mal meine Datei in Kurzform eingehängt. Vielleicht kannst du oder jemand anderes doch noch helfen.
Komme mit der schleife nicht zurecht Momentan hängt sich das makro dort auf, dass es keine e-mailadresse für AN: findet. Das blöde ist, dass wenn die zelle j2 nach l2 kopiert werden soll j2 leer ist. Tue mich mit cells und ranges verennen.
https://www.herber.de/bbs/user/37032.xls

Sub Mail()
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Dim strFile As String, strRecipient As String, strSubject As String
Dim bolStatusBar
Dim i
bolStatusBar = Application.DisplayStatusBar
For i = 2 To 1000
If Cells(i, 6).Value = "x" Then 'erste Prüfung ob "x" da ist
If Cells(i, 12).Value = "" Then 'zweite Prüfung ob die Zelle leer ist
If Cells(i, 11).Value <= DateValue(Date + 7) Then 'dritte Prüfung ob das Datum das erforderliche Alter hat
Cells(i, 10) = Cells(i, 12).Value 'der Kopiervorgang
Set objOutlook = CreateObject("Outlook.Application")
strRecipient = Cells(i, 10)
strSubject = "Erinnerung!"
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
Set objOutlookRecip = .Recipients.Add(strRecipient)
objOutlookRecip.Type = olTo
.Subject = strSubject
.Body = "Hallo, " & vbLf & vbLf & _
"Denkt bitte an ...  (cells(i,2))" & vbLf & vbLf & vbLf & _
"Mit freundlichen Grüßen" & vbLf & vbLf & vbLf & _
Application.UserName
weiter:
objOutlookRecip.Resolve
End With
Set objOutlook = Nothing
objOutlookMsg.Display ' wird jede Mail vorher angeigt
'objOutlookMsg.Send ' wird jede Mail gleich abgeschickt
Application.StatusBar = False
Application.DisplayStatusBar = bolStatusBar
End If
End If
End If
Next i
End Sub

Anzeige
AW: e-mail automatisch versenden bei Bedingung
27.09.2006 01:30:37
frank
Hei,
habe es hinbekommen
Gruß Frank
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

E-Mail automatisch versenden bei bestimmten Bedingungen in Excel


Schritt-für-Schritt-Anleitung

Um eine E-Mail automatisch zu versenden, wenn bestimmte Bedingungen in einer Excel-Tabelle erfüllt sind, kannst du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:
    • Rechtsklick auf "VBAProject (deinWorkbookName)" > Einfügen > Modul.
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub Mail()
    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient
    Dim strRecipient As String
    Dim strSubject As String
    Dim i As Integer

    Set objOutlook = CreateObject("Outlook.Application")

    For i = 2 To 100 ' Durchlaufe die Zeilen 2 bis 100
        If Cells(i, 6).Value = "x" Then ' Prüfung auf "x" in Spalte F
            If Cells(i, 12).Value = "" Then ' Prüfung auf leere Zelle in Spalte L
                If Cells(i, 11).Value <= Date + 7 Then ' Prüfung auf Datum in Spalte K
                    strRecipient = Cells(i, 10).Value ' E-Mail-Adresse aus Spalte J
                    strSubject = "Erinnerung!"
                    Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
                    With objOutlookMsg
                        .To = strRecipient
                        .Subject = strSubject
                        .Body = "Hallo," & vbLf & vbLf & "Denkt bitte an ..." & vbLf & vbLf & "Mit freundlichen Grüßen" & vbLf & Application.UserName
                        .Send ' Sendet die E-Mail
                    End With
                End If
            End If
        End If
    Next i

    Set objOutlook = Nothing
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus:
    • Drücke ALT + F8, wähle Mail aus und klicke auf "Ausführen".

Dieses Makro überprüft die Bedingungen in den entsprechenden Zellen und sendet eine E-Mail, wenn alle Bedingungen erfüllt sind.


Häufige Fehler und Lösungen

  • Fehler: "Keine E-Mail-Adresse gefunden."

    • Überprüfe, ob die Zelle mit der E-Mail-Adresse (Spalte J) tatsächlich eine gültige E-Mail-Adresse enthält.
  • Fehler: "Outlook kann nicht gestartet werden."

    • Stelle sicher, dass Microsoft Outlook installiert und korrekt eingerichtet ist. Das Makro funktioniert nur, wenn Outlook auf deinem Computer vorhanden ist.

Alternative Methoden

Es gibt verschiedene Möglichkeiten, E-Mails aus Excel zu versenden:

  1. Verwende Power Automate (ehemals Microsoft Flow):

    • Du kannst automatisierte Workflows erstellen, die E-Mails basierend auf Excel-Daten versenden.
  2. Nutze Drittanbieter-Tools:

    • Es gibt Tools wie MailChimp, die eine Integration mit Excel bieten, um Mails automatisch zu versenden.

Praktische Beispiele

  1. E-Mail versenden, wenn ein Datum erreicht ist:

    • Du kannst die Bedingungen so anpassen, dass eine E-Mail versendet wird, wenn beispielsweise der Fälligkeitstermin in einer bestimmten Zelle erreicht ist.
  2. E-Mail versenden, wenn ein Wert erreicht ist:

    • Ändere die Bedingungen im Makro, um eine E-Mail zu senden, wenn ein bestimmter Wert in einer Zelle erreicht wird, z.B. wenn der Wert in Spalte B über 100 liegt.

Tipps für Profis

  • Verwende Fehlerbehandlungsroutinen in deinem Makro, um die Stabilität zu erhöhen.
  • Füge Anlagen zu deinen E-Mails hinzu, indem du .Attachments.Add in den E-Mail-Objektbereich einfügst.
  • Teste dein Makro gründlich, um sicherzustellen, dass es unter verschiedenen Bedingungen funktioniert.

FAQ: Häufige Fragen

1. Kann ich das Makro anpassen, um nur bestimmte Zeilen zu prüfen? Ja, du kannst die Schleife anpassen, um nur die gewünschten Zeilen zu durchlaufen.

2. Muss Outlook offen sein, um E-Mails zu versenden? Ja, das Makro benötigt eine aktive Outlook-Anwendung, um E-Mails zu senden. Stelle sicher, dass Outlook geöffnet ist.

3. Kann ich das Makro so einstellen, dass es automatisch zu einem bestimmten Zeitpunkt ausgeführt wird? Ja, du kannst das Makro in Verbindung mit der Windows Aufgabenplanung nutzen, um es zu einem festgelegten Zeitpunkt auszuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige