Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Empfängerliste für Besprechungseinladung nach Outlook übergeben

Begonnen von Mr. Ahnungslos, November 25, 2016, 14:13:07

⏪ vorheriges - nächstes ⏩

Mr. Ahnungslos

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!

Mr. Ahnungslos

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)

markusxy

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

Mr. Ahnungslos

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


DF6GL

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
.
.

Mr. Ahnungslos

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

DF6GL

Hallo,
mach zunächst einen Screenshot der Eigenschaften des mehrwertigen Tabellenfeldes (in der Tabellen-Entwurfsansicht und unter Reiter "Nachschlagen") und zeige den hier....

Mr. Ahnungslos

#7
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.

DF6GL

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.



Mr. Ahnungslos

Ich kann die Datei leider aufgrund der Sicherheitsrichtlinien nicht hochladen. Gibt's eine andere Möglichkeit?

Mr. Ahnungslos


DF6GL

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


Mr. Ahnungslos

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

DF6GL

#13
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...

Mr. Ahnungslos

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