Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Mr. Ahnungslos am November 25, 2016, 14:13:07

Titel: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am November 25, 2016, 14:13:07
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!
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am November 25, 2016, 14:49:13
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)
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: markusxy am November 25, 2016, 15:11:58
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
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am November 25, 2016, 19:13:59
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

Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: DF6GL am November 25, 2016, 21:00:31
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
.
.
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am November 30, 2016, 11:49:48
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
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: DF6GL am November 30, 2016, 12:59:52
Hallo,
mach zunächst einen Screenshot der Eigenschaften des mehrwertigen Tabellenfeldes (in der Tabellen-Entwurfsansicht und unter Reiter "Nachschlagen") und zeige den hier....
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am November 30, 2016, 14:00:44
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.
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: DF6GL am November 30, 2016, 17:04:20
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.


Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am Dezember 01, 2016, 12:56:38
Ich kann die Datei leider aufgrund der Sicherheitsrichtlinien nicht hochladen. Gibt's eine andere Möglichkeit?
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am Dezember 01, 2016, 14:18:57
habe Dir eine mail geschickt
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: DF6GL am Dezember 01, 2016, 17:42:45
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

Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am Dezember 02, 2016, 09:44:01
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
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: DF6GL am Dezember 03, 2016, 09:10:56
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...
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am Dezember 05, 2016, 09:50:50
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
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: DF6GL am Dezember 05, 2016, 10:41:42
Hallo,

füg einfach in der Form-Abfrage das Feld Teilnehmer hinzu...
Titel: Re: Empfängerliste für Besprechungseinladung nach Outlook übergeben
Beitrag von: Mr. Ahnungslos am Dezember 06, 2016, 09:57:11
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)