Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Serienmail aus Excel

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Serienmail aus Excel (1624 mal gelesen)
Darksidy
Mitglied
Controller


Sehen Sie sich das Profil von Darksidy an!   Senden Sie eine Private Message an Darksidy  Schreiben Sie einen Gästebucheintrag für Darksidy

Beiträge: 16
Registriert: 29.05.2013

erstellt am: 23. Okt. 2013 14:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Darksidy 10 Unities + Antwort hilfreich

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 ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 23. Okt. 2013 21:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Darksidy 10 Unities + Antwort hilfreich

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 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



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.


Sehen Sie sich das Profil von MWN an!   Senden Sie eine Private Message an MWN  Schreiben Sie einen Gästebucheintrag für MWN

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 24. Okt. 2013 08:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Darksidy 10 Unities + Antwort hilfreich

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 ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 24. Okt. 2013 21:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Darksidy 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von bst an!   Senden Sie eine Private Message an bst  Schreiben Sie einen Gästebucheintrag für bst

Beiträge: 192
Registriert: 31.08.2004

.

erstellt am: 25. Okt. 2013 08:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Darksidy 10 Unities + Antwort hilfreich

Morgen,

M.E. musst Du für jede Mail ein eigenes MailItem erstellen. D.h.

Set mail = ol.CreateItem(0)

gehört in die For-Schleife.

lg, Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz