Hallo,
Momentaner Stand meines kleinen Projekts:
- Serienmail läuft für sich über einen cmdButton in einem UF (1.Teil in dem nachfolgenden Code)
- Protokollierung läuft für sich über einen cmdButton in einem anderen UF (2.Teil in dem nachfolgenden Code)
Beides funktioniert
Jetzt möchte ich die beiden Dinge zusammenbringen und beim Ablauf der Serienmail automatisiert zusätzlich einen Protokollierungsdatensatz schreiben (2.Teil in dem nachfolgenden Code)
Dafür muss ich auf den Snapshot des rs aus Teil1 ,,SerienMailTeilnehmerAdressdatenCheckT" zugreifen, um den gleichen Loop durchzulaufen.
Das rs2 (geht das überhaupt???) im zweiten Teil nimmt Bezug auf die Protokollierungsdatei ,,ProtokollT" und schreibt den Datensatz dort hin.
Wie kann ich diese beiden Abläufe zusammenbringen?
Der Code sieht im Moment natürlich wild aus...und dient lediglich als erste Strukturbasis...
Über jede Hilfe freue ich mich sehr! Insbesondere über Code-Zeilen :)
Schöne Grüße aus Lüneburg
Private Sub cmdSenden_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim objOutlook As Outlook.Application
Dim objMailItem As Outlook.MailItem
Dim l As Long
Set objOutlook = New Outlook.Application
' Set objMailItem = objOutlook.CreateItem(olMailItem) !!!!!MUSS AN DEN ANFANG DES LOOPs!!!!!
Set db = CurrentDb
Dim AnzahlEmail As Integer
AnzahlEmail = 0
Dim strSQL As String
strSQL = "DELETE * FROM SerienMailTeilnehmerAdressdatenCheckT"
CurrentDb.Execute strSQL, dbFailOnError
DoCmd.SetWarnings False
DoCmd.OpenQuery "SerienMailTeilnehmerAdressdatenCheckQ" 'Mit diesem Query erstelle ich die nachfolgende Tabelle
DoCmd.SetWarnings True 'Um dem Problem mit einer ComboBox aus dem Weg zu gehen
Set rs = db.OpenRecordset("SerienMailTeilnehmerAdressdatenCheckT", dbOpenSnapshot)
Do Until rs.EOF
Set objMailItem = objOutlook.CreateItem(olMailItem) '!!!!!MUSS AN DEN ANFANG DES LOOPs!!!!
With objMailItem
.To = rs!Email
.Subject = Me!txtBetreff
.Body = Me!txtInhalt
For l = 0 To Me!lstAnlagen.ListCount - 1
.Attachments.Add Me!lstAnlagen.ItemData(l)
Next l
' .Display
.Send
End With
rs.MoveNext
AnzahlEmail = AnzahlEmail + 1
Loop
MsgBox " " & AnzahlEmail & " " & "Email(s) wurden versendet"
' rs.Close
' Set rs = Nothing
' Set db = Nothing
' Versenden der Serienmail läuft! Jetzt soll für jede versendete mail
' (rs = db.OpenRecordset("SerienMailTeilnehmerAdressdatenCheckT", dbOpenSnapshot))
'--------------------------------------------------------------------------------------------------------
'Schreiben der Datensätze in die Protokolldatei "ProtokollT"
'Hier müssten zusätzlich dieselben Datensätze als Loop durchlaufen werden wie oben im rs (snapshot)
'wie kann man das kombinieren? Kann man überhaupt mit zwei Recordsets arbeiten?
'Dim rs2 As DAO.Recordset ?????
Set rs2 = db.OpenRecordset("SELECT * FROM ProtokollT WHERE False", dbOpenDynaset)
' Für ein schlichtes Anfügen kann das Recordset leer geladen werden, geht schneller
With rs2
.AddNew
!ProtokollTypID = Me.txtProtokollTyp
!Subject = Me.txtSubject
!Body = Me.txtBody
!TeilnehmerID = Me.Parent.ID
!DateTime = Now ' Feldname DateTime kann kritisch sein, weil reserviertes Wort
.Update
.Close
End With
rs close
rs2 close
Set rs = Nothing
Set rs2 = Nothing
Set db = Nothing
End Sub
Hallo,
Was hindert dich daran, bei jedem Durchgang der Schleife des 1. Recordsets (rs) die Daten mit rs2 in die Protokoll-Tabelle zu schreiben ?
ZitatDoCmd.SetWarnings False
DoCmd.OpenQuery "SerienMailTeilnehmerAdressdatenCheckQ" 'Mit diesem Query erstelle ich die nachfolgende Tabelle
DoCmd.SetWarnings True
Wenn es sich um eine Tabellenerstellungsabfrage handelt, wäre
Currentdb.Execute "SerienMailTeilnehmerAdressdatenCheckQ", dbFailOnErrorbersser angebracht
dbDailonError = > dbFailOnError
Da hat mich nur die Tsatatur nihtc vestandn. ;D
Herzlichen Dank für die Hilfe :)
Ich bin im Moment ein bisschen geplättet...der Code läuft...
Ich hätte nicht gedacht, dass ich es hinbekomme das alles so zu integrieren...aber... :)
über den Schreibfehler bin ich natürlich auch gestolpert...
Was ich nicht hinbekomme ist: Currentdb.Execute SerienMailTeilnehmerAdressdatenCheckQ, dbDailonError
Fehlermeldung: Variable nicht definiert...muss ich da noch etwas einrichten?
Private Sub cmdSenden_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim objOutlook As Outlook.Application
Dim objMailItem As Outlook.MailItem
Dim l As Long
Dim vTeilnehmerID As Integer
vTeilnehmerID = Forms!frmMailsMitAttachment!cbxTeilnehmerSelect.Value
Set objOutlook = New Outlook.Application
' Set objMailItem = objOutlook.CreateItem(olMailItem) !!!!!MUSS AN DEN ANFANG DES LOOPs!!!!!
Set db = CurrentDb
Dim AnzahlEmail As Integer
AnzahlEmail = 0
Dim strSQL As String
strSQL = "DELETE * FROM SerienMailTeilnehmerAdressdatenCheckT"
CurrentDb.Execute strSQL, dbFailOnError
DoCmd.SetWarnings False
' CurrentDb.Execute SerienMailTeilnehmerAdressdatenCheckQ, dbFailOnError
DoCmd.OpenQuery "SerienMailTeilnehmerAdressdatenCheckQ" 'Mit diesem Query erstelle ich die nachfolgende Tabelle
DoCmd.SetWarnings True 'Um dem Problem mit einer ComboBox aus dem Weg zu gehen
'wird durch CurrentDb.Execute "SerienMailTeilnehmerAdressdatenCheckQ", dbFailOnError ersetzt
Set rs = db.OpenRecordset("SerienMailTeilnehmerAdressdatenCheckT", dbOpenSnapshot)
Do Until rs.EOF
Set objMailItem = objOutlook.CreateItem(olMailItem) '!!!!!MUSS AN DEN ANFANG DES LOOPs!!!!
With objMailItem
.To = rs!Email
.Subject = Me!txtBetreff
.Body = Me!txtInhalt
For l = 0 To Me!lstAnlagen.ListCount - 1
.Attachments.Add Me!lstAnlagen.ItemData(l)
Next l
' .Display
.Send
End With
Set rs2 = db.OpenRecordset("SELECT * FROM ProtokollT WHERE False", dbOpenDynaset)
With rs2
.AddNew
!ProtokollTypID = 1
!Subject = Me!txtBetreff
!Body = Me!txtInhalt
!TeilnehmerID = vTeilnehmerID
!DateTime = Now ' Feldname DateTime kann kritisch sein, weil reserviertes Wort
.Update
.Close
End With
rs.MoveNext
AnzahlEmail = AnzahlEmail + 1
Loop
MsgBox " " & AnzahlEmail & " " & "Email(s) wurden versendet und protokolliert"
Set rs = Nothing
Set rs2 = Nothing
Set db = Nothing
End Sub
Zitat von: Umbauwfb am Januar 22, 2022, 12:36:14Was ich nicht hinbekomme ist: Currentdb.Execute SerienMailTeilnehmerAdressdatenCheckQ, dbDailonError
Fehlermeldung: Variable nicht definiert...muss ich da noch etwas einrichten?
SerienMailTeilnehmerAdressdatenCheckQ ist der Name der Abfrage und somit Text. Text-Literale müssen im VBA-Code in Anführungszeichen gesetzt werden.