| | | Design Eines Nanosatelliten Für Ein Biologisches Experiment Mit Hilfe Maßgeschneiderter Herstellungsverfahren, ein Anwenderbericht
|
Autor
|
Thema: Serienmail aus Excel (1728 mal gelesen)
|
Darksidy Mitglied Controller
Beiträge: 16 Registriert: 29.05.2013
|
erstellt am: 23. Okt. 2013 14:21 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Ich möchte aus Excel eine Serienmail auslösen, denen ein spezifischer Anhang zugesandt wird. Bei den Mail-Empfängern habe ich aber ein Problem - es sendet lediglich die erste Email an den ersten Empfänger. Mein Code sieht wie folgt aus:
Code: Sub mail() Dim ol, mail As Object Dim i As Long Set ol = CreateObject("Outlook.Application") Set mail = ol.CreateItem(0) Set wksParameter = Worksheets("Parameter") Set wksDatenbank = Worksheets("Datenbank") For i = 1 To wksDatenbank.Cells(Rows.Count, 1).End(xlUp).Row If wksDatenbank.Cells(i, 1) <> "" Then With mail .To = wksDatenbank.Cells(i, 5).Value .Subject = "Serienmail des Monats " & wksParameter.Range("G3").Value & " " & wksParameter.Range("H3").Value 'aus den Parametern holt er bspw. ... des Monats September 2013, je nach Eingabe des Benutzers im Tabellenblatt Parameter End With End If If wksDatenbank.Cells(i, 2) = "Herr" = True Then mail.body = "Sehr geehrter " & wksDatenbank.Cells(i, 2).Value & " " & wksDatenbank.Cells(i, 4).Value & Chr(13) End If If wksDatenbank.Range("B3") = "Herr" = False Then mail.body = "Sehr geehrte " & wksDatenbank.Cells(i, 2).Value & " " & wksDatenbank.Cells(i, 4).Value & Chr(13) End If mail.Attachments.Add AngabeMeinesVerzeichnisses & "Anhang_" & wksDatenbank.Cells(i, 1).Value & ".pdf" mail.send Next i End Sub
Das Tabellenblatt "Datenbank" hat folgende Einträge: Spalte A: "Kürzel" Spalte B: "Geschlecht" Spalte C: "Vorname" Spalte D: "Name" Spalte E: "Email-Adresse" Ich habe als Test zwei Einträge erfasst von zwei Personen. Es sollte nun im Email beim jeweiligen Empfänger die PDF Datei "Anhang_KÜRZEL.pdf" gesendet werden. Mit einem Eintrag und einer Person geht das wunderbar, es entsteht bloss ein Fehler bei mehreren Einträgen bei ".To = wksDatenbank.Cells(i, 5).Value" im Code. Besten Dank für Eure Unterstützung! Liebe Grüsse Darksidy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 23. Okt. 2013 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für Darksidy
Drück' Strg+G, das zeigt Dir das Direktfenster an (oder rufe es anderweitig auf). Dann gib' ihm ein Debug.Print "i hat den Wert: " & i nach Deinem For i = 1 To...Füg' noch zwei weitere Datensätze hinzu und schau, bei welchem i es nun scheppert. Nebenbei: Deine Anforderung ist Datenbank-Anforderung; Outlook nutzt die Serienbrief-Funktion von Word. Und im Code an der Stelle If wksDatenbank.Range("B3") wäre IMHO ein .Cells eleganter. Sonst knallt es unten, sobald erstmalig in B3 (zufällig oder absichtlich, z. B. durch sortieren) eine Dame steht: Dann werden alle weiteren Empfänger mit "Sehr geehrte " (!) angesprochen. HTH ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 23. Okt. 2013 21:03 <-- editieren / zitieren --> Unities abgeben: Nur für Darksidy
Code: If wksDatenbank.Cells(i, 2) = "Herr" = True Then mail.body = "Sehr geehrter " & wksDatenbank.Cells(i, 2).Value & " " & wksDatenbank.Cells(i, 4).Value & Chr(13) End IfIf wksDatenbank.Range("B3") = "Herr" = False Then mail.body = "Sehr geehrte " & wksDatenbank.Cells(i, 2).Value & " " & wksDatenbank.Cells(i, 4).Value & Chr(13) End If
Da die Abfrage auf wksDatenbank.Cells(i, 2) = "Herr" nur 2 Aussagen zulässt WAHR/FALSCH kannst du auch schreiben Code:
If wksDatenbank.Cells(i, 2) = "Herr" = True Then mail.body = "Sehr geehrter " & wksDatenbank.Cells(i, 2).Value & " " & wksDatenbank.Cells(i, 4).Value & Chr(13) else mail.body = "Sehr geehrte " & wksDatenbank.Cells(i, 2).Value & " " & wksDatenbank.Cells(i, 4).Value & Chr(13) End If
habe hier kein Outlook, dann daher das Problem nicht nachtesten, könnte aber sein das Variablen zurückgesetzt werden müssen? Code: mail.send 'Variablen zurücksetzen
Set ol = Nothing 'CreateObject("Outlook.Application") Set mail = Nothing 'ol.CreateItem(0) Next i
BTW wird nicht schon beim End with die mail versand?
Code: With mail .To = wksDatenbank.Cells(i, 5).Value .Subject = "Serienmail des Monats " & wksParameter.Range("G3").Value & " " & wksParameter.Range("H3").Value 'aus den Parametern holt er bspw. ... des Monats September 2013, je nach Eingabe des Benutzers im Tabellenblatt Parameter End With
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 24. Okt. 2013 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für Darksidy
Guten Morgen, Zitat: BTW wird nicht schon beim End with die mail versand? Code:With mail .To = wksDatenbank.Cells(i, 5).Value .Subject = "Serienmail des Monats " & wksParameter.Range("G3").Value & " " & wksParameter.Range("H3").Value 'aus den Parametern holt er bspw. ... des Monats September 2013, je nach Eingabe des Benutzers im Tabellenblatt Parameter End With
Nein, hier wird nicht die Mail versendet, nur der Empfänger und der Betreff im Mailobjekt gesetzt. Zitat: Set ol = Nothing 'CreateObject("Outlook.Application")
Würde ich von abraten, sonst wird bei jedem neuen Empfänger im Hintergrund die alte Outlookinstanz geschlossen und eine neue geöffnet -> performance! Die Reihenfolge wäre eher:
Code: next i Set ol = Nothing
Wie ist denn der Eintrag in Zeile i, Spalte 5 (also der Mailadresse) formatiert und welches Format erwartet das Mail - Objekt? Vielleicht ist in deinem Eintrag in der Zelle ein Leerzeichen enthalten! Probier doch mal:
Code: .To = Strings.Trim(wksDatenbank.Cells(i, 5).Value)
Grüße und HTH Tobias ------------------ Besucht mich doch mal in meiner Tischlerei "...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder "...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 24. Okt. 2013 21:07 <-- editieren / zitieren --> Unities abgeben: Nur für Darksidy
oki ;-) das mit dem End with erklärt sich bei mir so - hab gerade nachgschaut ;-) Code: With MyMessage 'Empfänger .To = "toas.hrmnng@hugo.com" .Cc = "toas.hrmnng@hugo.com" .Bcc = "toas.hrmnng@hugo.com" 'Betreff .Subject = "Bestellung für " & Projektnr & " aus Excel " & Date & Time .Attachments.Add AWS '.Importance = 2 'Stufe der Wichtigkeit 'Hier wird ein normaler Text erstellt .Body = "Diese Mail wurde automatisch erstellt." 'Hier wird eine HTML Mail erstellt 'Dies kann zu Problemen führen, wenn der Empfänger 'nur TEXT Dateien empfangen darf. '.HTMLBody = "Das ist ein Test." & vbCrLf & "Bitte ignorieren." 'Hier wird die Mail nochmals angezeigt .Display 'Hier wird die Mail gleich in den Postausgang gelegt und gesendet .Send End With
so habe ich das bei mir drinnen stehen ;-) und das mit dem Set ol = Nothing streich ich mal in dem vorherigen Beitrag durch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bst Mitglied
Beiträge: 192 Registriert: 31.08.2004 .
|
erstellt am: 25. Okt. 2013 08:32 <-- editieren / zitieren --> Unities abgeben: Nur für Darksidy
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|