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

Forumthread: Automatisch Email versenden - Probleme mit Makro

Automatisch Email versenden - Probleme mit Makro
31.10.2014 12:20:07
Christoph
Moin Moin,
mit nachfolgendem Makro (natürlich in Verbindung mit einem Weiteren), verschicke ich automatisch eine Email, wenn das heutige Datum mit einem bestimmten Datum einzelner Projekte übereinstimmt.
Sub testemail()
Dim objApp  As Outlook.Application
Dim objMail As Outlook.MailItem
Dim llast As Long
Dim i As Long
Dim wkb As Workbook
Dim wks As Worksheet
Set objApp = CreateObject("Outlook.Application")
Set objMail = objApp.CreateItem(olMailItem)
Set wkb = ThisWorkbook
Set wks = wkb.Sheets(1)
llast = wks.UsedRange.SpecialCells(xlCellTypeLastCell).Row
sbody = ""
For i = 5 To llast
If wks.Cells(i, 8).Value = wks.Cells(2, 2).Value Then
ssubject = ssubject & " - " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
sbody = sbody & vbCrLf & "> " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
End If
Next i
objMail.To = "xy@gmy.de"
objMail.Subject = "+++ Vorlaufstart folgender Projekte" & ssubject & " +++"
objMail.Body = "Sehr geehrter XY," & vbCrLf & vbCrLf & "für nachfolgende Projekte muss ein  _
Kostenvoranschlag erstellt werden:" & vbCrLf & sbody
objMail.ReadReceiptRequested = True
objMail.Display
objMail.Send
Set objApp = Nothing
Set objMail = Nothing
End Sub
Es funktioniert soweit auch alles. Allerdings habe ich zwei Probleme, bei denen ich etwas auf dem Schlauch stehe, da meine VBA-Möglichkeiten sehr limitiert sind und ich mir alles gerade im Stile von 'learning by doing' versuche anzueignen.
1.) Wenn das heutige Datum mit keinem der Projektdaten übereinstimmt, wird trotzdem eine Email mit dem Inhalt von objMail.Subject und objMail.Body versendet. Muss ich beides in die If-Schleife integrieren, um zu verhindern, dass überhaupt eine Email versendet wird, wenn die If-Bedingung nicht zutrifft?
2.) Die zu Grunde liegende Tabelle wird von mir und noch zwei weiteren Kollegen genutzt. Gibt es eine Möglichkeit mit der ich sicherstellen kann, dass die Email nur ein einziges Mal gesendet wird? Nicht dass bspw. ich die Tabelle am Tag als erstes öffne und die Email versendet wird und Kollege B dann beim öffnen auch nochmals eine Mail verschickt. Überdies wäre es natürlich schön, wenn die Email immer von der gleichen Adresse versendet wird. Man könnte es natürlich so machen, dass nur ich die Version mit dem Makro habe, aber dies ist nicht praktikabel, da wir alle in einer Datei arbeiten müssen.
Für Denkanstöße wäre ich unendlich dankbar und wünsche jedem im Forum ein wunderschönes Wochenende.
VG, Christoph

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisch Email versenden - Probleme mit Makro
31.10.2014 12:32:39
Rudi
Hallo,
1.
.....
Next i
if ssubject "" Then
objMail.To = "xy@gmy.de"
objMail.Subject = "+++ Vorlaufstart folgender Projekte" & ssubject & " +++"
objMail.Body = "Sehr geehrter XY," & vbCrLf & vbCrLf & "für nachfolgende Projekte muss ein  _
_
Kostenvoranschlag erstellt werden:" & vbCrLf & sbody
objMail.ReadReceiptRequested = True
objMail.Display
objMail.Send
end if

2. Schreib das Sendedatum in eine Zelle und frag es ab.
....
If sheets(1).Range("A1") Date then
Set objApp = CreateObject("Outlook.Application")
objMail.send
sheets(1).Range("A1")=Date
.....

Gruß
Rudi

Anzeige
AW: Automatisch Email versenden - Probleme mit Makro
31.10.2014 12:46:10
fcs
Hallo Christoph,
du muss eine Prüfung einbauen, ob die Body-Variable nach dem durchlaufen der For-Next-Schleife Inhalt hat. Wenn die For-Next-Schleife nur einen Treffer enthalten kann, dann kannst du den Senden-Code auch in den If-Part innerhalb der Schleife verschieben.
Den doppelten Versand kannst du vermeiden, indem das Makro in eine Testzelle nach dem Versand das aktuelle Datum einträgt. Zu Beginn des Makros wird geprüft, ob das Datum in der Testzelle = dem aktuellen Datum ist und das Makro ggf. beendet.
Bei der Sender-Adresse kann ich nicht weiterhelfen. Meines Wissens kann man nicht mit der gleichen Absender-Adressen aus verschiedenen E-Mail-Accounts heraus senden.
Gruß
Franz
Sub testemail()
Dim objApp  As Outlook.Application
Dim objMail As Outlook.MailItem
Dim llast As Long
Dim i As Long
Dim wkb As Workbook
Dim wks As Worksheet
Set objApp = CreateObject("Outlook.Application")
Set objMail = objApp.CreateItem(olMailItem)
Set wkb = ThisWorkbook
Set wks = wkb.Sheets(1)
'Prüfen ob heute schon E-Mail versendet
If wks.Range("X1").Value = Date Then
MsgBox "E-Mail wurde heute schon gesendet"
GoTo Beenden
End If
llast = wks.UsedRange.SpecialCells(xlCellTypeLastCell).Row
sbody = ""
For i = 5 To llast
If wks.Cells(i, 8).Value = wks.Cells(2, 2).Value Then
ssubject = ssubject & " - " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
sbody = sbody & vbCrLf & "> " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
End If
Next i
If sbody  "" Then
objMail.To = "xy@gmy.de"
objMail.Subject = "+++ Vorlaufstart folgender Projekte" & ssubject & " +++"
objMail.Body = "Sehr geehrter XY," & vbCrLf & vbCrLf & _
"für nachfolgende Projekte muss ein Kostenvoranschlag erstellt werden:" _
& vbCrLf & sbody
objMail.ReadReceiptRequested = True
objMail.Display
objMail.Send
'Datum in Testzelle für E-Mail-Versand eintragen
wks.Range("X1").Value = Date
Else
MsgBox "Keine Daten zum Versenden per E-Mail gefunden!"
End If
Beenden:
Set objApp = Nothing
Set objMail = Nothing
End Sub

Anzeige
AW: Automatisch Email versenden - Probleme mit Makro
31.10.2014 13:31:58
Christoph
Hallo Rudi, Hallo Franz,
vielen Dank für Eure Hilfe. Ihr habt mir wirklich sehr geholfen. Konnte das Ganze jetzt nochmal gut nachvollziehen, was mich in meinem VBA-Wissen sicher auch voran gebracht hat.
Vielen Dank und einen schönen Tag + entspanntes WE Euch.
VG, Christoph
;
Anzeige
Anzeige

Infobox / Tutorial

Automatisch Emails versenden mit VBA-Makros in Outlook


Schritt-für-Schritt-Anleitung

Um mithilfe eines Makros automatisch Emails zu versenden, benötigst du grundlegende Kenntnisse in VBA (Visual Basic for Applications). Folge diesen Schritten, um ein einfaches Makro für den automatischen Mailversand in Outlook zu erstellen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.
  2. Einfügen eines neuen Moduls:

    • Klicke im VBA-Editor auf Einfügen > Modul.
  3. Füge den folgenden VBA-Code ein:

    Sub testemail()
       Dim objApp  As Outlook.Application
       Dim objMail As Outlook.MailItem
       Dim llast As Long
       Dim i As Long
       Dim wkb As Workbook
       Dim wks As Worksheet
       Set objApp = CreateObject("Outlook.Application")
       Set objMail = objApp.CreateItem(olMailItem)
       Set wkb = ThisWorkbook
       Set wks = wkb.Sheets(1)
    
       ' Prüfen, ob heute schon eine E-Mail gesendet wurde
       If wks.Range("X1").Value = Date Then
           MsgBox "E-Mail wurde heute schon gesendet"
           Exit Sub
       End If
    
       llast = wks.UsedRange.SpecialCells(xlCellTypeLastCell).Row
       sbody = ""
       ssubject = ""
    
       For i = 5 To llast
           If wks.Cells(i, 8).Value = wks.Cells(2, 2).Value Then
               ssubject = ssubject & " - " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
               sbody = sbody & vbCrLf & "> " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
           End If
       Next i
    
       If sbody <> "" Then
           objMail.To = "xy@gmy.de"
           objMail.Subject = "+++ Vorlaufstart folgender Projekte" & ssubject & " +++"
           objMail.Body = "Sehr geehrter XY," & vbCrLf & vbCrLf & _
                          "für nachfolgende Projekte muss ein Kostenvoranschlag erstellt werden:" & vbCrLf & sbody
           objMail.ReadReceiptRequested = True
           objMail.Display
           objMail.Send
           ' Datum in Testzelle für E-Mail-Versand eintragen
           wks.Range("X1").Value = Date
       Else
           MsgBox "Keine Daten zum Versenden per E-Mail gefunden!"
       End If
    
       Set objApp = Nothing
       Set objMail = Nothing
    End Sub
  4. Makro ausführen:

    • Schließe den VBA-Editor und führe das Makro in Excel aus.

Häufige Fehler und Lösungen

  • Problem: Die Email wird trotz fehlender Daten versendet.

    • Lösung: Stelle sicher, dass die Bedingungen in der If-Anweisung korrekt sind und dass du die Logik so anpasst, dass die Email nur gesendet wird, wenn es auch relevante Daten gibt.
  • Problem: Das Makro sendet mehrmals Emails am gleichen Tag.

    • Lösung: Nutze eine Testzelle zur Speicherung des Versanddatums, wie im obigen Beispiel gezeigt.

Alternative Methoden

Du kannst auch Power Automate oder andere Automatisierungstools verwenden, um Emails automatisch zu versenden. Diese bieten eine benutzerfreundliche Oberfläche und erfordern keine Programmierkenntnisse.


Praktische Beispiele

Ein weiteres praktisches Beispiel könnte das Versenden von Geburtstagsgrüßen automatisch sein. Du könntest eine Excel-Tabelle führen, in der die Geburtstage eingetragen sind, und dein Makro so anpassen, dass es an den entsprechenden Tagen automatisch eine Email an die jeweiligen Personen sendet.


Tipps für Profis

  • Nutze Fehlerbehandlung: Implementiere Error-Handling in deinem Makro, um Probleme während der Ausführung besser zu diagnostizieren.

  • Optimiere den Email-Text: Ziehe in Betracht, HTML für die Formatierung der Email-Nachricht zu verwenden, um ansprechendere Emails zu erstellen.


FAQ: Häufige Fragen

1. Kann ich das Makro anpassen, um Emails an mehrere Empfänger zu senden?
Ja, du kannst die objMail.To-Zeile so anpassen, dass sie mehrere Email-Adressen durch ein Komma getrennt enthält.

2. Welche Excel-Version benötige ich für dieses Makro?
Das Makro sollte in den meisten aktuellen Excel-Versionen funktionieren, die VBA unterstützen, wie Excel 2010 und später.

3. Kann ich die Email auch im HTML-Format versenden?
Ja, dazu musst du die objMail.BodyFormat-Eigenschaft auf olFormatHTML setzen und die Email-Inhalte im HTML-Format formatieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige