folgende Problemstellung:
Ich habe in MS Access 2007 eine Datenbank erstellt in der verschiedene Hintergrundinformationen über Personen eingesehen werden können. Einige dieser Informationen sind z.B. die Anzahl und Art von Schulungen. Wenn es eine ist, die in regelmäßigen Abständen wiederholt werden muss, ist das Datum angegeben an dem die nächste Schulung/Unterweisung durchgeführt werden muss.
Nun möchte ich gerne wissen, ob es möglich ist eine Art Erinnerungsfunktion über VBA-Programmierung einzufügen. Das heißt ich habe ein Formular in dem in einem Feld ein zukünftiges Datum aus einem Datenblatt zu sehen ist und auch geändert werden kann. Kann man hier nun evtl. eine Aktion auslösen, wenn das erwähnte Zieldatum z.B. nur noch genau 2 Wochen entfernt ist. Vielleicht einen Farbumschlag im Formular oder ist es gar möglich eine Mail automatisch zu versenden, mit einem benutzerdefinierten Text?
schreib „if Datum1 > Datum2 + 14 then …“ oder irgendetwas in der Art, mehr braucht’s nicht. Fragt sich nur noch, wohin das zu schreiben wäre - also in welchem Ereignis der Code unterzubringen wäre. Kann aus der Ferne aber niemand sagen.
Normalerweise bringt man solche Prüfungen beim Start der Datenbank unter. Such Dir die fraglichen Teilnehmer raus, indem Du ihr Schulungsdatum mit dem Tagesdatum vergleichst und rufe bei passender Differenz die geeignete Aktion auf.
Diese oder aehnliche Problemstellungen habe ich wie folgt geloest:
Eine VBA Funktion in der die entsprechenden Dateneintraege selektiert werden.
Fuer die gefunden Daten dann mittels Outlook-Objekt (oder MAPI) entsprechende EMail geniereren ,ewt, zusaetzlich in Outlook ein Aufgabe anlegen mit Zieldatum.
Diese Funktion beim Anwendungstart oder auf Knopfdruck aufrufen.
Brauchbare Code-Beispiele fuer die Verwendung des Outlook-Objekts gibt es im Netz zu hauf, aber darauf achten das sie fuer deine Office-Version passt. Die MAPI-Beispiel funktionieren unter Office 2007/2010 nicht mehr wirklich.
Hallo,
ich verwende diesen Code um Emails aus Access heraus zuversenden.
Problem war bei mir das ich es betrieblich einsetzten wollte und unsere IT abteilung vieles geblockt hat, aber mit dem unterstehenden Code kommen die Mails durch. evtl hilts dir ja weiter:smiley: wenn nicht dann nicht
Code:
Public Sub SendeEmail()
Dim strSQL As String
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim intStufe As Integer
Dim lngNr As Long
Dim booSend As Boolean
Dim i As Integer
Dim olApp As Outlook.Application
Dim olNamespace As Namespace
Dim objMailItem As MailItem
Dim objFolder As MAPIFolder
Set db = CurrentDb
db.Execute „qry_anfuegen“, 128 'Neue Rückmeldungen in die Email-Liste aufnehmen
Set rs = db.OpenRecordset(„qry_email_senden“, dbOpenDynaset) 'alle anstehenden Emails
If Not rs.BOF Then
rs.MoveLast
rs.MoveFirst
For i = 1 To rs.RecordCount
intStufe = rs!Stufe
'Erste Email nach 14 Tagen der Erfassung
If IsNull(rs!SendeDatum) Then
rs.Edit
rs!SendeDatum = Date
rs.Update
booSend = False
Else
lngNr = rs!enr
rs.AddNew
rs!Stufe = intStufe + 1
rs!SendeDatum = Date
rs!enr = lngNr
rs.Update
booSend = True
End If
If booSend Then
Set olApp = CreateObject(„Outlook.Application“)
Set olNamespace = olApp.GetNamespace(„MAPI“)
Set objFolder = olNamespace.GetDefaultFolder(olFolderInbox)
Set objMailItem = objFolder.Items.Add(olMailItem)
With objMailItem
.To = „Empfänger@ oder über Recordset“ 'den holen wir uns später noch ins Recordset
.Subject = „Test-Mail“ & intStufe + 1 & vbCrLf & rs!pname & " " & rs!vorname
.Body = „Mail-Routine“ & intStufe + 1 & „!!! Erinnerung an den Kompetenznachweis von Herrn " & _
" vielen Dank- Testmail“
'.Display
'.Send
End With
olApp.ActiveWindow
SendKeys „%s“
Set objMailItem = Nothing
End If
rs.MoveNext
Next i
Else
rs.Close
Set rs = Nothing