Hallo liebe Accessgemeinde,
ich habe ein Problem mit meiner Mailverteilung aus meiner Abfrage. Ich erstelle eine Abfrage (Tabellenerstellung) aus meinen Aufgaben mit überfälligen Terminen. In der erstellten Tabelle ist das Projekt, die Aufgabe, der Termin und die Mail an die gesendet werden soll.
Mails werden an alle in der Tabelle stehenden versendet. Allerdings stimmt die Zuordnung der Aufgaben nicht obwohl der Datensatz in der Tabelle richtig ist. Wenn nur ein Datensatz in der Tabelle ist klappt es, bei mehreren sind die Aufgaben vermischt. Der Mitarbeiter bekommt die falsche Aufgabe. Ich finde den Fehler leider nicht.
Kann mir hier bitte jemand helfen wo der Fehler liegt?
Hier der Code (Access 2012) dazu:
Function Mail_Projekt()
DoCmd.SetWarnings False
DoCmd.OpenQuery "abf_Termine"
DoCmd.SetWarnings True
'startet Mailverteilung
Dim db_Pro As DAO.Database
Dim rst_Pro As DAO.Recordset
Set db_Pro = CurrentDb
Set rst_Pro = db_Pro.OpenRecordset("tmp_Termine", _
dbOpenDynaset)
Do While Not rst_Pro.EOF
'Inhalt der Mail
SendMail "Fälliger Termin zu Projekt Nr: " & (Nz(rst_Pro!AN_Nr)) & ". Kunde: " & (Nz(rst_Pro!Kunde)) & ". Artikel Nr.: " & (Nz(rst_Pro!Artikel_Nr)) & ". Zu Bearbeitender Punkt: " & (Nz(rst_Pro!Titel)) & ". Fällig am: " & (rst_Pro!Fälligkeitsdatum) & ". Bitte bearbeiten !"
varmail = rst_Pro!Mail
'varmail_CC = rst_Pro!Mail_CC
rst_Pro.MoveNext
Loop
rst_Pro.Close
Set rst_Pro = Nothing
Set db_Pro = Nothing
End Function
Private Sub SendMail(AN_Nr As String)
'Mail Verantwortliche senden
On Error GoTo Err_SendMail
Dim Empfaenger As String, Betreff As String
Betreff = "Anmahnung Projekttermin"
Empfaenger = varmail
mdlTools.prcSendMail SMTPFrom, Empfaenger, "", "", Betreff, AN_Nr
Exit_SendMail:
Exit Sub
Err_SendMail:
MsgBox Err.Description
Resume Exit_SendMail
End Sub
Hi,
1. Code bitte immer in Code-Tags einfügen
2. Access 2012 - ??? - diese Version gab es IMHO nicht - oder wo hast du die her?
Hallo,
Ist die Access Version von 2014.
warum mischt mir die Routine die Daten? Die stehen doch alle in einem Datensatz. Mit move next müsste er doch zum nächsten Datensatz springen und neue Daten ziehen. Oder ist die Verarbeitung zu schnell um diese vollständig auszuführen. Z.b. Beim senden von Outlook?
Hallo,
ZitatIst die Access Version von 2014.
??
Schau mal unter Datei/Info(bzw. Hilfe) nach welche Access-Version dort angegeben ist...
ZitatDie stehen doch alle in einem Datensatz
Bist du sicher?
wirf
DoCmd.SetWarnings False
DoCmd.OpenQuery "abf_Termine"
DoCmd.SetWarnings True
heraus. Ändere die TB_Erst.-Abfrage in eine normale Auswahlabfrage.
Benutze die Abfrage bei Openrecordset:
Set rst_Pro = db_Pro.OpenRecordset("Abf_Termine", dbopenSnapshot)
Bei "SendMail ......":
Sollte da nicht schon vorher geprüft werden (z. B. in der Abfrage) , ob Felder leer sind und damit vermieden, dass sinnlose (inhaltslose) Mails versendet werden?
ZitatmdlTools.prcSendMail SMTPFrom, Empfaenger, "", "", Betreff, AN_Nr
Was macht diese Prozedur? Werden Events erzeugt?
Wo sind "varmail" und "SMTPFrom" deklariert?
Hi,
Zitatwarum mischt mir die Routine die Daten?
weil du den Empfänger erst
nach dem Aufruf von
SendMail zuweist, die Variable aber in der Prozedur bereits verwendest.
Lösung:
Erweitere die Parameterliste der Prozedur um den Empfänger und übergib ihn direkt beim Aufruf.
Hallo zusammen,
also zur Version: es ist Office 365 (Jahresabo)
Ich stehe mit den genannten Tipps leider etwas auf dem Schlauch? Ob Tabelle oder Abfrage ist doch kein Unterschied oder ? In der Abfrage würden die gleichen Daten stehen.
AN_Nr; Aufgabe;Termin; Mail ......... aber die Aufgabe bei manchen Mails passen nicht zur tatsächlichen Aufgabe.
Der Konstrukteur bekommt plötzlich die Aufgabe des Einkaufs obwohl in der Tabelle alle zugeordneten Aufgaben zu den Mails stimmen.
Hier die andere Routine:
Attribute VB_Name = "mdlTools"
Option Compare Database
Option Explicit
'Mails versenden
Public Const ProgName As String = "BTE Projektverwaltung"
Public Const ProgVersion As String = "1.0.0"
Public varmail As String
Public varmail_CC As String
Public varaltan As String
Public Const SMTPServer As String = "000.00.0.0" 'geändert um hier nicht gezeigt zu werden
Public Const SMTPFrom As String = "Auslöseremail@firma.de" 'geändert um hier nicht gezeigt zu werden
Public Function prcSendMail(ByVal strFrom As String, ByVal strTo As String, ByVal strCC As String, ByVal strBCC As String, ByVal strSubject As String, ByVal strBody As String) As Boolean
' SEND EMAIL VIA SMTP USING CDOEX/CDOSYS
On Error GoTo Err_prcSendMail
Const intCDOSendUsingPort = 2
Dim objConfig, objMsg
prcSendMail = False
If (Len(strFrom & "") > 0) And (Len(strTo & "") > 0) And (Len(strSubject & "") > 0) And (Len(strBody & "") > 0) Then
Set objConfig = CreateObject("CDO.Configuration")
objConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = intCDOSendUsingPort
objConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
objConfig.Fields.Update
Set objMsg = CreateObject("CDO.Message")
Set objMsg.Configuration = objConfig
objMsg.FROM = strFrom
objMsg.To = strTo
If Len(strCC & "") > 0 Then objMsg.CC = strCC
If Len(strBCC & "") > 0 Then objMsg.BCC = strBCC
objMsg.Subject = strSubject
objMsg.HTMLBody = strBody
objMsg.Send
Set objMsg = Nothing
Set objConfig = Nothing
prcSendMail = True
End If
Exit_Err_prcSendMail:
Exit Function
Err_prcSendMail:
MsgBox Err.Description
Resume Exit_Err_prcSendMail
End Function
Wenn ich es richtig verstehe soll ich hier -
Set rst_Pro = db_Pro.OpenRecordset("tmp_Termine", _
dbOpenDynaset)
- eine Abfrage verwenden
und aus der Sendmail die Variablen -
Dim Empfaenger As String, Betreff As String
Betreff = "Anmahnung Projekttermin"
Empfaenger = varmail
hier einfügen
Dim db_Pro As DAO.Database
Dim rst_Pro As DAO.Recordset
Ist das richtig so? und was bringt es??? Sorry, ich verstehe das nicht so.
Hallo,
mir scheint, du hast nicht nur diesen Kommentar
Zitat von: MaggieMay am August 29, 2015, 01:00:141. Code bitte immer in Code-Tags einfügen
nicht zur Kenntnis genommen.
Und wie sieht es hiermit aus:
ZitatLösung:
Erweitere die Parameterliste der Prozedur um den Empfänger und übergib ihn direkt beim Aufruf.
Auch darauf findet man keine Reaktion deinerseits - lediglich beliebig oder auch konfus abgeänderten VBA-Code.
Wenn man absolut keine Ahnung von (und keine Neigung zur) Programmierung hat, sollte man besser die Finger davon lassen und sich einen anderen Job suchen.
Das ist meine ganz ehrliche Meinung.
Hallo MaggieMay,
Schade das du nur an Profis Tipps geben möchtest. Ich bin halt nur Anfänger und wollte Hilfe und keine Belehrungen. Das meine Kenntnisse nicht perfekt sind weiß ich selber. Schade.
Trotzdem Danke für die Unterstützung. Ich versuche einen anderen Weg.
Hallo,
ZitatSchade das du nur an Profis Tipps geben möchtest.
das ist keineswegs zutreffend, aber stelle doch bitte konkrete Fragen zur nicht verstandenen Hilfestellung, dann kann man dir die einzelnen Schritte gern ausführlicher erklären.