Hallo liebe Access-Gurus,
ich würde gerne mit meiner Datenbank ein Terminmanagement installieren und habe hierzu eine Tabelle mit Terminen (Datum, Uhrzeit, Thema etc.) und eine Tabelle mit Personen erstellt. Ein Feld in der Tabelle "Termine" (mehrwertiges Feld) bietet per Checkbox die Zuordnung mehrer Personen zu dem Termin an (Teilnehmer).
Diesen Teilnehmern möchte ich nun eine Besprechungseinladung per Outlook zukommen lassen. Die Anlage des Termins funktioniert schon, aber wie schaffe ich es die email-Adressen der Teilnehmer als recipient zu übergeben?
Mein bisheriger Versuch ist eine Abfrage, die erst mal die email-Adressen aller Teilnehmer beinhaltet.
Diese Abfrage wollte ich dann per vba durchlaufen und jeweils die e-mail-Adresse als recipient übergeben. Aber schon bei diesem Code funktioniert schon die einfache Ausgabe der email-Adresse nicht???
Private Sub btn_Besprechungseinladung_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("AbfEinladungsmail", dbOpenDynaset)
Do While Not rst.EOF
Debug.Print rst!email
rst.MoveNext
Loop
End Sub
Ich bin ratlos, bitte helft mir.
Danke!
Hier nochmal die ganze Version, ohne den Testlauf:
Private Sub btn_Kalendereintrag_Click()
Dim outApp As Outlook.Application
Dim outtest As Outlook.AppointmentItem
Dim Adressen As String
'Hier wird der Filialstandort ausgelesen
Standort = DLookup("[Bezeichnung]", "Standorte", "ID=" & Kombinationsfeld141)
'Ende des Auslesens
Set rst = db.OpenRecordset("AbfEinladungsmail", dbOpenDynaset)
Set outApp = New Outlook.Application
Set outtest = outApp.CreateItem(olAppointmentItem)
Do While Not rst.EOF
outtest.OptionalAttendees = email
rst.MoveNext
Loop
With outtest
.Body = Memo
.AllDayEvent = False
.ReminderMinutesBeforeStart = 60
.Start = CDate(BeginnDatum) + CDate(BeginnUhrzeit)
.End = CDate(EndeDatum) + CDate(EndeUhrzeit)
.Location = Standort
.Subject = Terminbezeichnung
.Display
.Save
End With
End Sub
Ergebnis: Laufzeitfehler 424
Der Debugger markiert mir diese Zeile:
Set rst = db.OpenRecordset("AbfEinladungsmail", dbOpenDynaset)
Zitat von: Mr. Ahnungslos am November 25, 2016, 14:49:13
Set rst = db.OpenRecordset("AbfEinladungsmail", dbOpenDynaset)
Dim db fehlt in zweiten Code. Hast das eh verwendet?
Ansonsten passt die Syntax.
Den Rest musst du wohl selber prüfen.
LG M
Hallo,
Danke für den Hinweis. Meinst Du so
Private Sub btn_Kalendereintrag_Click()
Dim outApp As Outlook.Application
Dim outtest As Outlook.AppointmentItem
Dim Adressen As String
Dim rst As Recordset
Dim db As DAO.Database
'Hier wird der Filialstandort ausgelesen
Standort = DLookup("[Bezeichnung]", "Standorte", "ID=" & Kombinationsfeld141)
'Ende des Auslesens
Empfänger = InputBox("Bitte Empfänger-Emailadresse(n) eingeben. Mehrere Empfänger bitte mit Semikolon trennen!", "Besprechungseinladung versenden")
Set db = CurrentDb
Set rst = db.OpenRecordset("AbfEinladungsmail", dbOpenDynaset)
Set outApp = New Outlook.Application
Set outtest = outApp.CreateItem(olAppointmentItem)
Set olAttendee = outtest.Recipients.Add(Empfänger)
' Do While Not rst.EOF
' outtest.OptionalAttendees = email
' rst.MoveNext
' Loop
Es klappt leider immernoch nicht
Sorry für die dummen Fragen, bei mir ist der Name Programm. Habe mir alle Codeschnipsel ohne jegliche Programmiererfahrung zusammengegoogelt.
Nochmals Danke
Hallo,
falls ich richtig verstehe: In einem Mehrwert-Feld steht eine Liste von Personen, von denen deren Email-Adresse benötigt wird.
Es müssen aus dem Mehrwertfeld zunächst die Personen(IDs) ausgelesen und anschließend die EMail-Adresse(n) aus der Personentabelle werden.
Das Auslesen der Email-Adresse kann über eine Abfrage erfolgen, in der die Personenid aus Personen-Tabelle mit dem Mehrwertfeld verknüpft ist.
Mit VBA kann dies durch Öffnen eines Recordsets vom Typ RECORDSET2 auf die Eigenschaft "Value" des Mehrwertfeldes erreicht werden:
Dim RS2 as Dao.Recordset2
Set RS2 = Me!Mehrwertfeld.Value
.
.
Hallo Franz,
ich glaube genau so wie Du es beschreibst ist es das was ich haben möchte, einzig die Umsetzung Deiner Anweisung gelingt mir mangels Programmierkenntnissen noch nicht.
Hier einmal der gesamte Text des Subs, welches den Versand der mail an die Teilnehmer starten soll:
Private Sub btn_Kalendereintrag_Click()
Dim outApp As Outlook.Application
Dim outtest As Outlook.AppointmentItem
Dim Adressen As String
Dim rst As Recordset
Dim RS2 As DAO.Recordset2
'Hier wird der Filialstandort ausgelesen
Standort = DLookup("[Bezeichnung]", "Standorte", "ID=" & Kombinationsfeld141)
'Ende des Auslesens
Empfänger = InputBox("Bitte Empfänger-Emailadresse(n) eingeben. Mehrere Empfänger bitte mit Semikolon trennen!", "Besprechungseinladung versenden")
' Set rst = db.OpenRecordset("AbfEinladungsmail", dbOpenDynaset)
Set outApp = New Outlook.Application
Set outtest = outApp.CreateItem(olAppointmentItem)
Set olAttendee = outtest.Recipients.Add(Empfänger)
Set RS2 = Me!Teilnehmer.Value
' Do While Not rst.EOF
' outtest.OptionalAttendees = email
' rst.MoveNext
' Loop
With outtest
.Body = Memo
.MeetingStatus = olMeeting
.AllDayEvent = False
.ReminderMinutesBeforeStart = 60
.Start = CDate(BeginnDatum) + CDate(BeginnUhrzeit)
.End = CDate(EndeDatum) + CDate(EndeUhrzeit)
.Location = Standort
.Subject = Terminbezeichnung
.Display
.Save
End With
End Sub
Hierin ist momentan noch einiges durch die Kommentarfunktion ausgeschaltet, weil es noch nicht funktioniert. Ich weiß nicht ob es wichtig ist, aber das Mehrwertfeld "Teilnehmer" befindet sich nicht direkt auf dem Formular von wo aus der Button die Prozedur startet, sondern auf dem Unterformular "Teilnehmerzuordnung".
Welche Zeilen müsste ich den nun noch ergänzen, damit mir die Prozedur aus der Tabelle "Personen" anhand der ID's aus "Teilnehmer.Value" die jeweilige e-mail-Adresse ausliest und diese dann allesamt als Empfänger in die mail übernommen werden?
Kannst Du mir hier für absolute Laien behilflich sein? Du bist mein Gott!
Danke aus Köln an den Bodensee
Michael
Hallo,
mach zunächst einen Screenshot der Eigenschaften des mehrwertigen Tabellenfeldes (in der Tabellen-Entwurfsansicht und unter Reiter "Nachschlagen") und zeige den hier....
siehe Anhang
Erst die Eingabe auf dem Formular zieht sich dann die Daten zu den Personen aus der Tabelle Personen.
Daher habe ich noch das entsprechende Unterformular sowie die Datensatzherkunft für das Listenfeld ebenfalls mit angehangen.
Hallo,
ich komme noch nicht ganz klar, wie die DB insgesamt aufgebaut ist.
Lade die DB komprimiert/repariert und gezippt hier hoch. Dann können konkrete Vorschläge gemacht werden.
Ich kann die Datei leider aufgrund der Sicherheitsrichtlinien nicht hochladen. Gibt's eine andere Möglichkeit?
habe Dir eine mail geschickt
Hallo,
ok, db auch wieder zurück.
Hier der Code der Prozedur bzgl. des Themas:
Private Sub btn_Kalendereintrag_Click()
Dim outApp As Outlook.Application
Dim outtest As Outlook.AppointmentItem
Dim Adressen As String
Dim rst As Recordset, db As DAO.Database
Dim RS2 As DAO.Recordset2, Standort As String, Empfänger As String
Standort = DLookup("[Bezeichnung]", "Standorte", "ID=" & Kombinationsfeld141)
Set db = CurrentDb
Set outApp = New Outlook.Application
Set outtest = outApp.CreateItem(olAppointmentItem)
Set RS2 = Me.Recordset!Teilnehmer.Value
Do Until RS2.EOF
Empfänger = Empfänger & ";" & db.OpenRecordset("select Email from Personen where ID = " & RS2(0))(0)
RS2.MoveNext
Loop
If Empfänger > "" Then
Empfänger = Mid(Empfänger, 2)
With outtest
.Body = Memo
.Recipients.Add (Empfänger)
.MeetingStatus = olMeeting
.AllDayEvent = False
.ReminderMinutesBeforeStart = 60
.Start = CDate(BeginnDatum) + CDate(BeginnUhrzeit)
.End = CDate(EndeDatum) + CDate(EndeUhrzeit)
.Location = Standort
.Subject = Terminbezeichnung
.Display
.Save
End With
End If
Set db = Nothing
RS2.Close
Set RS2 = Nothing
Set outtest = Nothing
Set outApp = Nothing
End Sub
Hallo Franz,
schon jetzt nochmal Danke für Deine Hilfe. Habe den Code implementiert. Ergebnis ist ein Laufzeitfehler 3265 "Element in Auflistung nicht gefunden. Debugger bleibt bei
Set RS2 = Me.Recordset!Teilnehmer.Value
stehen.
Du hast die Datenbank ja vorliegen. Kann es sein, dass es daran liegt, dass die Teilnehmer auf dem Unterformular ausgewählt werden?
Grüße aus Köln.
Michael
Hallo,
das verwundet mich etwas.. "Teilnehmer" ist ein Mehrwertfeld in demjenigen Form, in dem der Code steht/abläuft.
Die DB habe ich nicht mehr. Schick sie mir nochmal...
PS: vielleicht sollte ich noch anmerken, dass "Teilnehmer" in der Formabfrage aufgenommen werden muss...
Hallo Franz,
ja, das wird wahrscheinlich die Ursache sein. Das Feld "Teilnehmer" ist nicht auf dem Formular welches den Code ausführt, es ist auf dem Unterformular welches die Teilnehmerliste anzeigt. Dieses Unterformular ist über die Felder "ID" (Hauptformular) und "Termin" (Unterformular) mit dem Hauptformular verbunden.
Der Button, welches dazu genutzt wird um per Outlook die Besprechungseinladung an die Empfänger zu versenden befindet sich auf dem Hauptformular.
Ist es Dir mit diesen Angaben möglich den o.g. Code entsprechend anzupassen?
Beste Grüße
Michael
Hallo,
füg einfach in der Form-Abfrage das Feld Teilnehmer hinzu...
OK, wir nähern uns... ???
Jetzt sind wir mit Start des Subs bis zu einem Laufzeitfehler 3021 "Kein aktueller Datensatz" gekommen. Stop bei:
Empfänger = Empfänger & ";" & db.OpenRecordset("select Email from Personen where ID = " & RS2(0))(0)