Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1904to1908
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

Mail VBA - Mailadressen gruppieren

Mail VBA - Mailadressen gruppieren
03.11.2022 20:39:25
Bernd
Hallo zusammen,
ich verwende u.g. Coding zum Versand von Mails aus Excel.
Nun möchte ich das Mails welche in der Spalte 9 den gleichen Inhalt haben zusammengefasst als eine Mail versendet werden und nicht einzel.
Beispiel:
Spalte 5 / Spalte 9
Mailadresse 1 / 508433
Mailadresse 2 / 508441
Mailadresse 3 / 508442
Mailadresse 4 / 508442
Mailadresse 5 / 508442
Mailadresse 6 / 508441
Mailadresse 7 / 508433
Mailadresse 1 + Mailadresse 7 soll in einer Mail versendet werden.
Mailadresse 2 + Mailadresse 6 soll in einer Mail versendet werden.
Mailadresse 3 + Mailadresse 4 + Mailadresse 5 soll in einer Mail versendet werden.

Sub Mailversand()
Dim i As Integer
Dim oApp As Object
Dim lbody As String
Dim strVorlage As String
Range("A1").Select
For i = 8 To Cells(9999, 1).End(xlUp).Row
Set oApp = CreateObject("Outlook.Application")
'Wechseln der Mailvorlage
If Cells(i, 21) = "XX" Then strVorlage = "XX.oft" Else strVorlage = "XY.oft"
Set myitem = oApp.CreateItemFromTemplate(strVorlage)
With myitem
Set .SendUsingAccount = oApp.Session.Accounts.Item("absender@xy.com")
'mail an
lto = Cells(i, 5).Value
'Betreffzeile
lsubject = Cells(i, 2).Value
lsubject = lsubject + " - " & Cells(i, 14).Value
lsubject = lsubject + " - " & Cells(i, 15).Value
'Bodytext
lbody = myitem.HTMLBody
lbody = Replace(lbody, "#2#", Cells(i, 2).Value)
lbody = Replace(lbody, "#14#", Cells(i, 14).Value)
lbody = Replace(lbody, "#15#", Cells(i, 15).Value)
lbody = Replace(lbody, "#17#", Cells(i, 17).Value)
lbody = Replace(lbody, "#18#", Cells(i, 18).Value)
lbody = Replace(lbody, "#19#", Cells(i, 19).Value)
lbody = Replace(lbody, "#20#", Replace(Cells(i, 20).Value, Chr(10), "
")) myitem.To = lto myitem.cc = lcc myitem.bcc = lbcc myitem.Subject = lsubject myitem.HTMLBody = lbody myitem.Display myitem.send End With Next i End Sub
Danke im voraus
Bernd

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mail VBA - Mailadressen gruppieren
03.11.2022 22:58:50
Uduuh
Hallo,
teste mal:

Sub Mailversand()
Dim i As Integer
Dim oApp As Object
Dim lbody As String
Dim strVorlage As String
Dim objTO As Object, oOBJ
Set objTO = CreateObject("scripting.dictionary")
Range("A1").Select
For i = 8 To Cells(9999, 1).End(xlUp).Row
objTO(Cells(i, 9).Value) = objTO(Cells(i, 9).Value) & ";" & Cells(i, 5)
Next i
For Each oOBJ In objTO
i = Application.Match(oOBJ, Columns(9), 0)
Set oApp = CreateObject("Outlook.Application")
'Wechseln der Mailvorlage
If Cells(i, 21) = "XX" Then strVorlage = "XX.oft" Else strVorlage = "XY.oft"
Set myitem = oApp.CreateItemFromTemplate(strVorlage)
With myitem
Set .SendUsingAccount = oApp.Session.Accounts.Item("absender@xy.com")
'mail an
lto = Mid(objTO(oOBJ), 2) ' Cells(i, 5).Value
'Betreffzeile
lsubject = Cells(i, 2).Value
lsubject = lsubject + " - " & Cells(i, 14).Value
lsubject = lsubject + " - " & Cells(i, 15).Value
'Bodytext
lbody = myitem.HTMLBody
lbody = Replace(lbody, "#2#", Cells(i, 2).Value)
lbody = Replace(lbody, "#14#", Cells(i, 14).Value)
lbody = Replace(lbody, "#15#", Cells(i, 15).Value)
lbody = Replace(lbody, "#17#", Cells(i, 17).Value)
lbody = Replace(lbody, "#18#", Cells(i, 18).Value)
lbody = Replace(lbody, "#19#", Cells(i, 19).Value)
lbody = Replace(lbody, "#20#", Replace(Cells(i, 20).Value, Chr(10), ""))
myitem.To = lto
myitem.cc = lcc
myitem.bcc = lbcc
myitem.Subject = lsubject
myitem.HTMLBody = lbody
myitem.Display
myitem.send
End With
Next oOBJ
End Sub
Gruß aus'm Pott
Udo
Anzeige
AW: Mail VBA - Mailadressen gruppieren
04.11.2022 07:21:43
Bernd
Hallo Udo,
Besten Dank für deine Hilfe.
Leider wird nur ein Empfänger in der Mail eingefügt.
Viele Grüße
Bernd
AW: Mail VBA - Mailadressen gruppieren
04.11.2022 09:19:50
Rudi
Hallo,
bei mir funktioniert das nach Anpassung an meine Umgebung.
3 Mails mit mehreren Empfängern.
Gruß
Rudi
AW: Mail VBA - Mailadressen gruppieren
04.11.2022 19:09:20
Bernd
Hallo Rudi,
welche Anpassungen hast du vorgenommen?
Viele Grüße
Bernd
AW: Mail VBA - Mailadressen gruppieren
04.11.2022 19:47:10
Yal
Hallo Bernd,
"Anpassung an meine Umgebung" betrifft deine Vorlagen, die Rudi nicht hat, und der Session.Account, der natürlich ein anderen als "absender@xy.com" sein muss.
Vielleicht wäre eine vorigen Prüfung, also mit abgespeckten Code, sinnvoll:

Sub Mailversand()
Dim i
Dim objTO As Object
Dim oOBJ As Object
Set objTO = CreateObject("scripting.dictionary")
Range("A1").Select
For i = 8 To Cells(9999, 1).End(xlUp).Row
objTO(Cells(i, 9).Value) = objTO(Cells(i, 9).Value) & ";" & Cells(i, 5)
Next i
For Each oOBJ In objTO
MsgBox "Empfängerliste: " & Mid(objTO(oOBJ), 2) _
& vbCr & "Zeile: " & Application.Match(oOBJ, Columns(9), 0)
Next oOBJ
End Sub
VG
Yal
Anzeige
richtig erklärt, Yal ....
04.11.2022 23:14:55
Rudi
...aber weiter kommt man nur mit der Datei.
Gruß
Rudi
AW: richtig erklärt, Yal ....
06.11.2022 08:52:32
Bernd
@Rudi
Welche Datei meinst du?
die, aus der gesendet werden soll. owT
06.11.2022 21:32:38
Rudi
AW: die, aus der gesendet werden soll. owT
07.11.2022 13:16:03
Bernd
Danke für deine Hilfe.
Hat sich aber mittlerweile erledigt.
dann nicht mehr offen (owT)
07.11.2022 13:52:42
Pierre
AW: Mail VBA - Mailadressen gruppieren
06.11.2022 08:50:46
Bernd
@Yal
meinst du die mit Vorlage die Oft-Datei.
Zum Testen kann auch jede x-beliebige verwendet werden.
Es passt ja alles außer das nur eine Mailadresse eingefügt.
VG
Bernd
AW: Mail VBA - Mailadressen gruppieren
06.11.2022 09:08:42
Bernd
Hallo zusammen,
das Coding von Udo funktioniert.
Ich habe vergessen die Zeile

lto = Mid(objTO(oOBJ), 2) ' Cells(i, 5).Value
einzufügen.
Vielen dank nochmal an alle für Eure Lösungsvorschläge
VG
Bernd
Anzeige
AW: Mail VBA - Mailadressen gruppieren
04.11.2022 23:43:47
Daniel
Hi
ich gehe mal davon aus, dass wenn die Nummer in Spalte 9 gleich ist, auch der Rest der Zeile, mit dem das Mail erstellt wird, gleich ist.
probiere mal folgenden Ansatz:
füge der Tabelle eine weitere Spalte hinzu, in dieser aggregierst du die Empfänger beim ersten vorkommen einer Mail (Formel nicht getestet, da ich nicht deine Excelversion habe).
Formel für Zeile 8,

=Wenn(Vergleich(I8;I:I;0)Zeile();"";Textverketten(";";WAHR;Filter(E$8:E$9999;I$8:I$9999=I8;"")) 
den Code änderst du dann wiefolgt ab:
1. das lto = Cells(i, 5).Value verschiebst du direkt unter die For-Schleife und änderst die Spaltennummer 5 auf die neue Spalte ab
2. danach baust du eine IF-Abfrage ein, ob lto eine Mailadresse enthält und führst dann das erstellen der Mail aus:

      For i = 8 To Cells(9999, 1).End(xlUp).Row
'mail an
lto = Cells(i, ?).Value
If lto  "" Then
Set oApp = CreateObject("Outlook.Application")
'Wechseln der Mailvorlage
If Cells(i, 21) = "XX" Then strVorlage = "XX.oft" Else strVorlage = "XY.oft"
Set myitem = oApp.CreateItemFromTemplate(strVorlage)
With myitem
Set .SendUsingAccount = oApp.Session.Accounts.Item("absender@xy.com")
und der weitere Code
end if
next

und nur so als Tip:
weil If Cells(i, 21) = "XX" Then strVorlage = "XX.oft" Else strVorlage = "XY.oft" schon der komplette IF-Block ist und der Code danach nicht mehr zum IF gehört, macht man nach so einen IF keine Einrückung.
Gruß Daniel

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige