ein leidiges Thema, ich weiss Hoffe aber trotzdem das ich hier geholfen werde.
Ich habe unter Access 2003 eine Tabelle in der Emailadressen hinterlegt sind. Nun möchte ich per Makro und Schaltfläche, jeder eingetragenen Emailadresse eine Mail senden, mit den jeweiligen Daten welche zu der Email gehören. Dies soll im Hintergrund geschehen.
– Per VBA und Klick-Ereignisprozedur des Buttons öffnest Du einen Recordset auf die Tabelle, durchläufst den bis zum Ende und schickst für jeden Datensatz eine Mail ab. Das könnte im einfachsten Fall mit z. B. Docmd.Sendobject passieren.
Ich habe fast befürchtet das es darauf hinausläuft
Die docmd.sendobject ist mir geläufig, nur das mit dem Recordset durchlaufen verstehe ich nicht ganz, bzw verstehen schon nur die Umsetzung hapert etwas…
Hast du da vllt ein Beispiel parat, insbesondere auf das Einfügen der Werte Email und Betrag? Denn docmd.sendobjekt sendet doch nur komplette Objekte wie Tabellen oder Berichte etc… Oder verstehe ich da was falsch?
Gruss
– Per VBA und Klick-Ereignisprozedur des Buttons öffnest Du
einen Recordset auf die Tabelle, durchläufst den bis zum Ende
und schickst für jeden Datensatz eine Mail ab. Das könnte im
einfachsten Fall mit z. B. Docmd.Sendobject passieren.
Hast du da vllt ein Beispiel parat, insbesondere auf das
Einfügen der Werte Email und Betrag? Denn docmd.sendobjekt
sendet doch nur komplette Objekte wie Tabellen oder Berichte
etc… Oder verstehe ich da was falsch?
Ja,
Private Sub btnMailSenden_Click()
On Error GoTo Err_btnMailSenden_Click
Dim rs As DAO.Recordset
Dim strBetreff As String, strText As String
strBetreff = "Ihre Abrechnung " & Me!Quartal 'besser Quartal aus einem Textfeld im Form entnehmen.
Set rs = CurrentDb.OpenRecordset(„select * from tbl_Emailadressen“, dbOpenSnapshot)
Do Until rs.EOF
strText = "Wir berechnen Ihnen " & Format(nz(rs!Betrag,0), „#,##0.00“) & " EUR für " & Me!Quartal
DoCmd.SendObject acSendNoObject, , , rs!Email, , , strBetreff, strText, False 'hier erst mal True setzen!
erstmal vielen Dank. Es hat bis auf einige Ungereimtheiten sehr gut funktioniert.
Meine Prozedur sieht folgendermassen aus:
Private Sub Befehl0_Click()
Dim rs As DAO.Recordset
Dim strBetreff As String, strText As String
strBetreff = „Ihre Abrechnung Multifunktionsgerät“ & Me!Gerätenummer
Set rs = CurrentDb.OpenRecordset(„select * from tbl_Emailadressen“, dbOpenSnapshot)
Do Until rs.EOF
strText = „Wir berechnen Ihnen " & Me!Euro & " EUR für das abgelaufene Quartal“
Er sendet immer nur den ersten Datensatz und dies wiederholt (aufgrund von Loop denke ich mal)
Er öffnet Outlook, und ich muss die Nachricht einzeln absenden
Fragen:
Wie kann ich umgehen das er nur den ersten Datensatz sendet?
Wie kann ich dafür sorgen das die Email ohne öffnen im Outlook
versendet wird, und ohne die Sicherheitsabfrage ob es ein Virus ist. Bei einem Makro frägt er mich normalerweise auch nicht
+Ist es möglich bei dem Emailtext Leerzeilen einzufügen?
Dim rs As DAO.Recordset
Dim strBetreff As String, strText As String
strBetreff = „Ihre Abrechnung Multifunktionsgerät“ &
Me!Gerätenummer
Set rs = CurrentDb.OpenRecordset(„select * from
tbl_Emailadressen“, dbOpenSnapshot)
Do Until rs.EOF
strText = „Wir berechnen Ihnen " & Me!Euro & " EUR für das
abgelaufene Quartal“
Wie kann ich umgehen das er nur den ersten Datensatz sendet?
siehe o. st. Code
Wie kann ich dafür sorgen das die Email ohne öffnen im
Outlook
versendet wird, und ohne die Sicherheitsabfrage ob es ein
Virus ist. Bei einem Makro frägt er mich normalerweise auch
nicht
Dafür müßte man entweder ein Hilfsprogrämmchen („ClickYes“–> gogglen) verwenden, oder Outlook fernsteuern (per Automation bedienen) oder MAPI benutzen oder ein anderes Mailprogramm oder ein anderes Mail-Objekt-Modell (z. B. CDO) verwenden.
+Ist es möglich bei dem Emailtext Leerzeilen einzufügen?
Doch das Vorrücken auf den nächsten Datensatz klappt leider
immer noch nicht…
hast Du
rs.Movenext
an der richtigen Stelle eingebaut ?
Setz mal einen Haltepunkt bei Do until rs.EOF und fahre im Einzelschritt (F8) durch die Schleife.
Also ich habe den Haltepunkt gesetzt und bin durch mit F8. Es passiert nichts anderes, als das er mir wieder nur den ersten datensatz füllt in der neuen Email.
rs.movenext habe ich genau da gesetzt, wo du es im code eingetragen hast.
Zur veranschaulichung stelle ich dir ma ne Beispieltabelle hier rein:
Somit sollte nun eine Mail erstellt werden, welche an Empfänger test geht mit seinen zugehörigen Daten und die nächste Mail sollte somit an Empfänger test1 gehen mit seinen daten…
Vllt hilft das weiter wenn du das mal so siehst
Somit ergibt sich bei mir folgender Code:
Dim rs As DAO.Recordset
Dim strBetreff As String, strText As String
strBetreff = "Ihre Abrechnung " & Me!Gerät
Set rs = CurrentDb.OpenRecordset(„select * from tbl_Emailadressen“, dbOpenSnapshot)
Do Until rs.EOF
strText = "Wir berechnen Ihnen " & Me!Betrag