Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Email versenden an mehrere Empfänger

Email versenden an mehrere Empfänger
11.03.2020 17:05:42
Patrick
Moin moin zusammen,
ich benötige bitte mal die Hilfe der Experten ;-) Komme hier einfach nicht zu dem was ich mir so vorstelle, da sind meine Kenntnisse zu schlecht für …
Habe die Liste teils aus dem Netz übernommen und für die eigenen Bedürfnisse angepasst. Vorgestellt habe ich mir folgendes:
- Wenn ein Termin (Spalte J) eingetragen ist und das Makro ausgeführt wird, soll der Textinhalt aus Spalte H an die hinterlegte Mail-Adresse aus (Spalte F) automatisch verschickt werden und in Spalte L ein "versendet" eingetragen werden. Derzeit wird das Ganze nur im Excel-Kalender eingetragen und es erscheint ein Laufzeitfehler.
Habe meine Datei mit dem Makro mal hier hinterlegt.
https://www.herber.de/bbs/user/135785.xlsm
Wäre SUPER wenn hier Jemand eine Lösung bzw. mir das mal austüfteln kann gerne auch zwei unterschiedliche Makros "Versenden per Mail" und "Eintragung in Kalender mit jährlichem Serienmuster", galt einer geburtstagliste, hat aber auch nicht so funktioniert ^^
Gruß
Patrick =)

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Email versenden an mehrere Empfänger
11.03.2020 18:54:47
Steve
Hi,
eine kurze Suche (excel vba email versenden) brachte im ersten Treffer
https://www.makro-excel.de/2017/03/06/per-vba-makro-eine-email-mit-outlook-versenden/
Das Makro daraus
Sub EmailDirektSenden()
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = "deinname@deinedomain.de"
.Subject = "Betreff"
.Body = "Ihre Nachricht."
.Send        'Sendet die Email automatisch
End With
End Sub
Und bevor das Sub endet einfach noch mit range(bereffende Zelle).value ="versendet"
Grüße Steve
Anzeige
AW: Email versenden an mehrere Empfänger
11.03.2020 18:58:45
Regina
Hi Patrick,
dert Laufzeitfehler erscheint, weil Du mit UsedRange arbeitest und das auch Formatierungen (Rahmen) mit einschließt. Außerdem füllst Du weiter unten die Variable "Adressaten", nutzt sie dann aber nicht.
Hier der überarbeitete Code. Teste mal, ob das jetzt läuft:
Sub Excel_Control_Schachtmeister_nach_Outlook()
'E 2000
'Dim OutApp As Outlook.Application
Dim OutApp As Object, apptOutApp As Object
'Hier beginnen die Termine
Dim BlattName As String
Dim Zeile As Integer
BlattName = "Schachtmeister"
EmailNamen = "patrick.gruel@strabag.com; heike.harslem@strabag.com" 'hier können auch Termin an  _
Emailempfänger versendet werden, Adressen mit Semikolon trennen
For Zeile = 2 To Sheets(BlattName).Cells(Rows.Count, 2).End(xlUp).Row
Set OutApp = CreateObject("Outlook.Application")
Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem
If Sheets(BlattName).Cells(Zeile, 10) > 0 Then    'Datum vorhanden
If IsEmpty(Sheets(BlattName).Cells(Zeile, 12)) = True Then  'Status ohne Wert
With apptOutApp
'Datum wird die Termine aus der Zelle genommen
.Start = Format(Sheets(BlattName).Cells(Zeile, 10), "dd.mm.yyyy") & " 08:00"
'Termininfo
.Subject = "Erinnerung Abgabe Stundenberichte: " & Sheets(BlattName).Cells(Zeile, 7)
'Zusätzlicher Text
Nachricht = Sheets(BlattName).Cells(Zeile, 8) & Chr(10)
'Nachricht = Nachricht & "weiterer Text möglich"
.Body = Nachricht
'Anzeige
.display
'ort
.Location = "Stundenberichte: " & Sheets(BlattName).Cells(Zeile, 7)
'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen
.Duration = "5"
'Erinnerung
.ReminderMinutesBeforeStart = "20"
'mit Sound :-)
.ReminderPlaySound = True
'Erinnerung wiederholen
.ReminderSet = True
'Wichtigkeit
.Importance = olImportanceHigh
'Status
.MeetingStatus = olMeeting
'Optionale Adressen
.OptionalAttendees = "EmailNamen"
Application.DisplayAlerts = False
'Termin speichern
.Save
'Schließen ohne senden
'Application.SendKeys "%DL"
'Senden an anderen EmailAdressen (Aktivierung: 1. Zeichen bei den nächsten 2 Zeilen  _
entfernen)
OptionalAttendees = "EmailNamen"
'       Application.SendKeys "%S" '*** automatisch ohne überprüfung senden ***
Application.DisplayAlerts = True
'Erledigt setzen
Sheets(BlattName).Cells(Zeile, 12) = "in Outlook übernommen"
End With
'ActiveCell.Offset(1, 0).Select
'Variablen leeren,
End If
End If
Set apptOutApp = Nothing
Set OutApp = Nothing
Next Zeile
'MsgBox "Termine an Outlook übertragen!"
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
Dim Adressaten As String
Dim z As Range
For Each z In Range("F2:F" & Worksheets(BlattName).Cells(Rows.Count, 2).End(xlUp).Row)
If z  "" Then
Adressaten = Adressaten & ";" & z
End If
Next
.Subject = "Erinnerung Stundenberichte"
.Body = Nachricht
.To = Adressaten
'.cc = ""     'per Kopie
'.bcc = ""    'per Blindkopie
' .send       'versand erfolgt automatisch!
.display   'Versand erfolgt manuell
End With
Set OutlookApp = Nothing
Set OutlookMailItem = Nothing
End Sub
Gruß Regina
Anzeige
AW: Email versenden an mehrere Empfänger
11.03.2020 19:03:41
volti
Hallo Patrick,
habe Dir Deine Sub mal etwas angepasst und einen eMail-Versand lt. Liste reingebaut.
Den Kalenderteil habe ich auch angepasst, aber nicht weiter getestet.
Letztendlich war mir nicht ganz klar, was Du genau wolltest.
Aber vielleicht kannst Du mit dem Ansatz ja weiterarbeiten oder Lehren ziehen...
Sub Excel_Control_Schachtmeister_nach_Outlook()
 Dim objOL As Object, objKal As Object
 Dim Wsh As Worksheet
'Hier beginnen die Termine
 Dim Zeile As Long, iAnzMAil As Integer
 Dim bIsMail As Boolean
 
 bIsMail = True     'Mail oder Kalendereintrag
 EmailNamen = "patrick.gruel@strabag.com; heike.harslem@strabag.com" 'hier können auch Termin an Emailempfänger versendet werden, Adressen mit Semikolon trennen
 Set objOL = CreateObject("Outlook.Application")
 Set Wsh = ThisWorkbook.Sheets("Schachtmeister")
 
 For Zeile = 2 To Wsh.UsedRange.Rows.Count
  If Wsh.Cells(Zeile, 10) > 0 Then    'Datum vorhanden?
    If IsEmpty(Wsh.Cells(Zeile, "L").Value) Then   'Status ohne Wert
     If bIsMail Then
'Mailversand
      Set objMail = objOL.CreateItem(0)
      With objMail
        .BodyFormat = 3     'HTML-Format (Angabe optional)
        .Subject = "Erinnerung Stundenberichte" 'Betreff
        .To = Wsh.Cells(Zeile, "F").Value       'Empfänger
       '.cc = ""                                'Kopie
       '.bcc = ""                               'Blindkopie
        sMailtext = Wsh.Cells(Zeile, "H").Value
        sMailtext = Replace(sMailtext, ", ", ",<br>")
        sMailtext = Replace(sMailtext, "! ", "!<br>")
        sMailtext = Replace(sMailtext, "¶", "!<br>")
        .GetInspector                           'Signatur holen
        .HTMLBody = Replace(sMailtext, vbCrLf, "<br>") & .HTMLBody
        If Wsh.Cells(Zeile, "F").Value Like "?*@?*.?*" Then
         Wsh.Cells(Zeile, "L").Value = "versendet"
         iAnzMAil = iAnzMAil + 1
         ' .send               'Versand erfolgt automatisch!
         .display            'Versand erfolgt manuell
        End If
      End With
      Set objMail = Nothing
     
     Else
'Kalendereintrag
      Set objKal = objOL.CreateItem(1) 'olAppointmentItem
      With objKal
        'Datum wird die Termine aus der Zelle genommen
        .Start = Format(Wsh.Cells(Zeile, "J").Value, "dd.mm.yyyy") & " 08:00"
        'Termininfo
        .Subject = "Erinnerung Abgabe Stundenberichte: " & Wsh.Cells(Zeile, "G").Value
        'Zusätzlicher Text
        Nachricht = Wsh.Cells(Zeile, "H") & vbLf
        'Nachricht = Nachricht & "weiterer Text möglich"
        .Body = Nachricht
        'Anzeige
        .display
        'ort
        .Location = "Stundenberichte: " & Wsh.Cells(Zeile, "G").Value
        'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen
        .Duration = "5"
        .ReminderMinutesBeforeStart = "20"  'Erinnerung
        .ReminderPlaySound = True           'mit Sound :-)
        .ReminderSet = True                 'Erinnerung wiederholen
        .Importance = olImportanceHigh      'Wichtigkeit
        .MeetingStatus = olMeeting          'Status
        .OptionalAttendees = EmailNamen     'Optionale Adressen
         Application.DisplayAlerts = False
        .Save                               'Termin speichern
         'Schließen ohne senden
         'Application.SendKeys "%DL"
         
      'Senden an anderen EmailAdressen (Aktivierung: 1. Zeichen bei den nächsten 2 Zeilen entfernen)
         OptionalAttendees = "EmailNamen"
         
         
         Application.SendKeys "%S" '*** automatisch ohne überprüfung senden ***
         Application.DisplayAlerts = True
         
         'Erledigt setzen
         Wsh.Cells(Zeile, "L").Value = "in Outlook übernommen"
      End With
      Set objKal = Nothing
     
     End If
    End If
  End If
 Next Zeile
 
 Set objOL = Nothing
 MsgBox CStr(iAnzMAil) & " Mails wurden versendet!", vbInformation, "Mail senden"
End Sub

viele Grüße
Karl-Heinz

Anzeige
AW: Email versenden an mehrere Empfänger
12.03.2020 08:33:58
Patrick
Hey Karl-Heinz,
Vielen Dank, habe den Teil mit dem Kalender jetzt rausgenommen, weil wie du schon sagst, war keine deutliche Aussage, was ich genau damit meinte. Werde dazu noch mal einen Eintrag aufmachen, wo es deutlicher beschrieben ist … =) Mit dem "Email versenden" klappt perfekt, habe paar kleine Änderungen vorgenommen und läuft super!! *happy!* ^^
Auch vielen Dank an die anderen Antworten, aber deins Karl-Heinz funktioniert einwandfrei! ;-)
VG Patrick
AW: Email versenden an mehrere Empfänger
12.03.2020 09:20:35
volti
Freut mich und danke für die Rückmeldung. :-)
VG KH
AW: Email versenden an mehrere Empfänger
12.03.2020 10:59:29
Patrick
Gerne doch! =)
Kannst du mir vllt noch mal kurz aushelfen?
Habe deine Code genommen und nun hat sich bei mir der Laufzeitfehler 440 eingeschlichen. Ist halt ne andere Liste aber bekomme den nicht weg -.- Und hast du ne Funktion für eine jährliches Serienmuster?
Kannst du den dort evtl einbauen? Hab ansonsten oben einen Thread auf ...
Sub Excel_Control_Termine_nach_Outlook()
Dim objOL As Object, objKal As Object
Dim Wsh As Worksheet
'Hier beginnen die Termine
Dim Zeile As Long, iAnzMAil As Integer
Dim bIsKal As Boolean
bIsKal = True     'Mail oder Kalendereintrag
Set objOL = CreateObject("Outlook.Application")
Set Wsh = ThisWorkbook.Sheets("Geburtstagsliste")
For Zeile = 2 To Wsh.UsedRange.Rows.Count
If Wsh.Cells(Zeile, 10) > 0 Then    'Datum vorhanden?
If IsEmpty(Wsh.Cells(Zeile, "L").Value) Then   'Status ohne Wert
If bIsKal Then
'Kalendereintrag
Set objKal = objOL.CreateItem(1) 'olAppointmentItem
With objKal
'Datum wird die Termine aus der Zelle genommen
.Start = (Format(Wsh.Cells(Zeile, "J").Value, "dd.mm.yyyy") & " 08:00")
'Termininfo
.Subject = "Geburtstag: " & Wsh.Cells(Zeile, "C").Value
'Zusätzlicher Text
Nachricht = Wsh.Cells(Zeile, "H") & vbLf
'Nachricht = Nachricht & "weiterer Text möglich"
.Body = Nachricht
'Anzeige
.display
'ort
.Location = "Geburtstag " & Wsh.Cells(Zeile, "C").Value
'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen
.Duration = "5"
.ReminderMinutesBeforeStart = "20"  'Erinnerung
.ReminderPlaySound = True           'mit Sound :-)
.ReminderSet = True                 'Erinnerung wiederholen
.Importance = olImportanceHigh      'Wichtigkeit
.MeetingStatus = olMeeting          'Status
Application.DisplayAlerts = False
.Save                               'Termin speichern
'Schließen ohne senden
'Application.SendKeys "%DL"
Application.SendKeys "%S" '*** automatisch ohne überprüfung senden ***
Application.DisplayAlerts = True
'Erledigt setzen
Wsh.Cells(Zeile, "L").Value = "in Outlook übernommen"
End With
Set objKal = Nothing
End If
End If
End If
Next Zeile
Set objOL = Nothing
'MsgBox "Termine an Outlook übertragen!"
End Sub

VG
Patrick =)
Anzeige
AW: Email versenden an mehrere Empfänger
12.03.2020 11:43:07
volti
Hallo Patrick,
bei mir kommt kein Fehler und mit Serieneinstellung habe ich zunächst auch keine Erfahrung:
Hier mal ein etwas angepasster Code, da Du ja nicht mehr alles brauchst, was die Mail betraf mit dem Versuch einer Serie. (Ich bleib da ggf. auch dran, kann aber dann dauern)
Sub Excel_Control_Termine_nach_Outlook()
 Dim objOL As Outlook.Application, objKal As Object
 Dim Wsh As Worksheet
'Hier beginnen die Termine
 Dim Zeile As Long, Nachricht As String
 
 Set objOL = CreateObject("Outlook.Application")
 Set Wsh = ThisWorkbook.Sheets("Geburtstagsliste")
 
 For Zeile = 2 To Wsh.UsedRange.Rows.Count
  If Wsh.Cells(Zeile, 10) > 0 Then    'Datum vorhanden?
    If IsEmpty(Wsh.Cells(Zeile, "L").Value) Then   'Status ohne Wert
'Kalendereintrag
     Set objKal = objOL.CreateItem(1)  'olAppointmentItem=1
     With objKal
       'Datum wird die Termine aus der Zelle genommen
       .Start = Format(Wsh.Cells(Zeile, "J").Value, "dd.mm.yyyy") & " 08:00"
       'Termininfo
       .Subject = "Geburtstag: " & Wsh.Cells(Zeile, "C").Value
       'Zusätzlicher Text
       Nachricht = Wsh.Cells(Zeile, "H") & vbLf
       'Nachricht = Nachricht & "weiterer Text möglich"
       .Body = Nachricht
       'Anzeige
       .display
       'ort
       .Location = "Geburtstag " & Wsh.Cells(Zeile, "C").Value
       'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen
       .Duration = "5"
       .ReminderMinutesBeforeStart = "20"  'Erinnerung
       .ReminderPlaySound = True           'mit Sound :-)
       .ReminderSet = True                 'Erinnerung wiederholen
       .Importance = 2                     'Wichtigkeit  olImportanceHigh=2
       .MeetingStatus = 1                  'Status  olMeeting=1
        Application.DisplayAlerts = False
       With .GetRecurrencePattern
         .RecurrenceType = 6                'olRecursYearNth=6
       End With
       .Save                               'Termin speichern
        'Schließen ohne senden
        'Application.SendKeys "%DL"
        Application.SendKeys "%S" '*** automatisch ohne überprüfung senden ***
        Application.DisplayAlerts = True
        'Erledigt setzen
        Wsh.Cells(Zeile, "L").Value = "in Outlook übernommen"
      End With
      Set objKal = Nothing
    End If
  End If
 Next Zeile
 
 Set objOL = Nothing
 'MsgBox "Termine an Outlook übertragen!"
End Sub


viele Grüße
Karl-Heinz

Anzeige
AW: Email versenden an mehrere Empfänger
12.03.2020 13:06:47
Patrick
Danke dir, aber irgendwie klappt die Alte sogar besser ^^ Diese trägt den Termin nämlich trotzdem ein, bei der neuen Erscheint eine "Besprechung", nicht ganz das was ich wollte, aber Interessant ;-)
Ich weiß nicht wieso, aber der Termin trägt sich ein, und danach erfolgt der Laufzeitfehler. Schau dir die Datei mal bitte an …
https://www.herber.de/bbs/user/135803.xlsm
Habe den Code ".RecurrenceType = 5" auf "5" geändert. Die 6 sagt aus, wenn der Termin z.B. auf einen Freitag fällt, dieser fällt dann im nächsten Jahr auch wieder auf den Freitag, auch wenn dieser nicht das genaue Datum hat. Das ist bei Code "5" anders, da entsteht der Termin genau an dem Tag(20.12. bleibt 20.12.) =)
Mit dem Code ".Occurrences = 10" kann ich die Anzahl der Wiederholungen festlegen. Bekomme das irgendwie nicht hin mit "NoEndDate" :/
Anzeige
AW: Email versenden an mehrere Empfänger
12.03.2020 14:33:06
volti
Hallo Patrick,
folgendes ist mir aufgefallen:
1. Dein UsedRange ist das Maximum an Zeilen >1.000.000, den solltest Du durch Löschen von Zeilen mal verkleinern
Zur Sicherheit trotzdem mal diese Begrenzung hier einbauen:
For Zeile = 2 To Wsh.UsedRange.Rows.Count
  If Wsh.Cells(Zeile, 10) > 0 Then    'Datum vorhanden?
    If Zeile > 1000 Then Exit For
    If IsEmpty(Wsh.Cells(Zeile, "L").Value) Then   'Status ohne Wert

Dann würde ich immer Option Explicit am Anfang des Moduls setzen.
Da sieht man dann, dass z.B. die Variable "Nachricht" nicht deklariert ist usw..
Wichtiger ist allerdings, dass Deine verwendeten Outlookkonstanten wie olImportanceHigh nur immer den Wert 0 haben. Das ist so, weil Du die objOL nicht als Outlook.Application (Early Binding) sondern als Object (Late Binding) deklariert hast, da kann man diese nicht verwenden oder man muss Ihnen den richtigen Wert zuweisen.
Ich hatte in der Vorversion die korrekten Werte vorgeben, vielleicht deshalb dann der Besprechungstermin...
viele Grüße
Karl-Heinz
Anzeige
AW: Email versenden an mehrere Empfänger
12.03.2020 18:04:02
volti
Sorry, sehe grad, dass die Position für "Zeile > 1000" falsch war:
For Zeile = 2 To Wsh.UsedRange.Rows.Count
If Zeile > 1000 Then Exit For
If Wsh.Cells(Zeile, 10) > 0 Then 'Datum vorhanden?
If IsEmpty(Wsh.Cells(Zeile, "L").Value) Then 'Status ohne Wert
Gruß KH
AW: Email versenden an mehrere Empfänger
13.03.2020 08:03:09
Patrick
Morgen Karl-Heinz,
hab das jetzt alles mal so eingestellt wie du beschrieben hast und siehe da, funktioniert einwandfrei!! Auch mit dem Besprechungstermin, lag daran das eine "2" dort eingestellt gewesen ist ;-)
Vielen vielen Dank für deine Hilfe!! =)
VG
Patrick

140 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige