collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 56
  • Punkt Versteckte: 2
  • Punkt Mitglieder: 8
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13804
  • stats Beiträge insgesamt: 63513
  • stats Themen insgesamt: 8607
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Update senden Outlook  (Gelesen 196 mal)

Offline Daniel92

  • Newbie
  • Beiträge: 40
Update senden Outlook
« am: November 30, 2017, 11:46:37 »
Hallo zusammen,

ich arbeite immer noch am Schulungstool. Ich weiß das meine Beziehungen nicht korrekt sind, aber so lange ich bei dem anderen Post auf eine Fortsetzung warte, versuche ich schon mal andere Probleme zu lösen.
ich hab schon im Forum gestöbert und auch versucht zu googlen, aber ich komm nicht auf den Trichter. Ich möchte Access so mit Outlook verbinden, dass jede Änderung in Access auch in Outlook übernommen wird. Ich hab die Funktionen Namespace und Mapi gefunden, denke damit sollte ich arbeiten?!

Mein Problem:

Falls Änderungen an Terminen, Uhrzeiten, Teilnehemrgruppen..... vorkommen, möchte ich per Button eine Aktualisierung verschicken. Also auf den schon verschickten Termin zugreifen und diesen ändern. Bei Outlook ist das die Funktion "Update senden". Falls ich einen Schulungsblock lösche, also einen Datensatz lösche, sollte eine Absage an alle bereits eingeladenen Teilnehmer verschickt werden.
Wie bekomme ich das hin?

Mein Code bis jetzt ohne Namespace und MAPI:
Option Compare Database
Option Explicit


Public Function fncOutlook_Termin_Eintragen(parSubject As String, SFN As Boolean, SFH As Boolean, Praktikanten As Boolean, _
                                            dStart1 As Date, dEnd1 As Date, dStart2 As Date, dEnd2 As Date, dStart3 As Date, dEnd3 As Date, _
                                            dStart4 As Date, dEnd4 As Date, dStart5 As Date, dEnd5 As Date)
 
 
Dim counter1 As Integer
Dim Start(5) As Date
Dim Ende(5) As Date
Dim db As Database
Dim rs As Recordset


Start(0) = dStart1                              'Array für 5 Termine
Ende(0) = dEnd1
Start(1) = dStart2
Ende(1) = dEnd2
Start(2) = dStart3
Ende(2) = dEnd3
Start(3) = dStart4
Ende(3) = dEnd4
Start(4) = dStart5
Ende(4) = dEnd5

For counter1 = 0 To 4
    If Start(counter1) > "01.01.1900" Then

    Dim outApp As Outlook.Application
    Dim outtest As Outlook.AppointmentItem
    Dim myRequiredAttendee As Outlook.Recipient
    Set outApp = New Outlook.Application
    Set outtest = outApp.CreateItem(olAppointmentItem)
   
   
    With outtest
        .MeetingStatus = olMeeting                                  'Termin wird zu Besprechung
        .Start = Start(counter1)
        .End = Ende(counter1)
        .Body = Forms![frm_Schulungsblock_erstellen].Form![frm_Thema].Controls("Thema") _
         And Forms![frm_Schulungsblock_erstellen].Form![frm_Thema].Controls("Beschreibung")                 'noch schauen wie ich Body mit mehreren Felder füllen kann
        .AllDayEvent = False
        .ReminderMinutesBeforeStart = 15
        .Subject = parSubject

       
      If Forms![frm_Schulungsblock_erstellen].Controls("TeilnehmergruppeSFN") = True Then                            'SFN Mitarbeiter einladen
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM qry_MitarbeiterSFN")
                               
    Do Until rs.EOF
 
       .Recipients.Add rs!EmailAdresse
       rs.MoveNext
    Loop
   
        .Save
        .Send
    End If
   
       If Forms![frm_Schulungsblock_erstellen].Controls("TeilnehmergruppeSFH") = True Then                               'SFH Mitarbeiter einladen
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM qry_MitarbeiterSFH")
                               
    Do Until rs.EOF
 
       .Recipients.Add rs!EmailAdresse
       rs.MoveNext
    Loop
   
        .Save
        .Send
    End If
   
   
       If Forms![frm_Schulungsblock_erstellen].Controls("TeilnehmergruppePraktikanten") = True Then                        'Praktikanten einladen
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT Vorname, Nachname, EmailAdresse FROM qry_MitarbeiterPraktikanten")


    Do Until rs.EOF

       .Recipients.Add rs!EmailAdresse
       rs.MoveNext
    Loop

        .Save
        .Send
    End If
    End With
   
    End If
    Next counter1
     
     
'Alle Object-Variablen hier zerstören
    rs.Close
    Set db = Nothing
    Set rs = Nothing
   
End Function


Function Blocker_senden_Click()

Const frmNSchulBlock = "frm_Schulungsblock_erstellen"
Const frmNThema = "frm_Thema_Tutor"
Const t1b = "Termin1Beginn"
Const t1e = "Termin1Ende"
Const t2b = "Termin2Beginn"
Const t2e = "Termin2Ende"
Const t3b = "Termin3Beginn"
Const t3e = "Termin3Ende"
Const t4b = "Termin4Beginn"
Const t4e = "Termin4Ende"
Const t5b = "Termin5Beginn"
Const t5e = "Termin5Ende"


Dim t1beginn As Date
Dim t1ende As Date
Dim t2beginn As Date
Dim t2ende As Date
Dim t3beginn As Date
Dim t3ende As Date
Dim t4beginn As Date
Dim t4ende As Date
Dim t5beginn As Date
Dim t5ende As Date


If IsNull(Forms(frmNSchulBlock).Controls(t1b)) And IsNull(Forms(frmNSchulBlock).Controls(t1e)) _
And IsNull(Forms(frmNSchulBlock).Controls(t2b)) And IsNull(Forms(frmNSchulBlock).Controls(t2e)) _
And IsNull(Forms(frmNSchulBlock).Controls(t3b)) And IsNull(Forms(frmNSchulBlock).Controls(t3e)) _
And IsNull(Forms(frmNSchulBlock).Controls(t4b)) And IsNull(Forms(frmNSchulBlock).Controls(t4e)) _
And IsNull(Forms(frmNSchulBlock).Controls(t5b)) And IsNull(Forms(frmNSchulBlock).Controls(t5e)) Then
MsgBox "Bitte Termin eingeben", vbInformation
Exit Function
End If


If Forms(frmNSchulBlock).Controls(t1b) > Forms(frmNSchulBlock).Controls(t1e) _
Or Forms(frmNSchulBlock).Controls(t2b) > Forms(frmNSchulBlock).Controls(t2e) _
Or Forms(frmNSchulBlock).Controls(t3b) > Forms(frmNSchulBlock).Controls(t3e) _
Or Forms(frmNSchulBlock).Controls(t4b) > Forms(frmNSchulBlock).Controls(t4e) _
Or Forms(frmNSchulBlock).Controls(t5b) > Forms(frmNSchulBlock).Controls(t5e) Then
MsgBox "Das von Ihnen angegebene Ende liegt vor dem Beginn", vbInformation
Exit Function
End If


If IsNull(Forms(frmNSchulBlock).Controls(t1b)) Xor IsNull(Forms(frmNSchulBlock).Controls(t1e)) _
Xor IsNull(Forms(frmNSchulBlock).Controls(t2b)) Xor IsNull(Forms(frmNSchulBlock).Controls(t2e)) _
Xor IsNull(Forms(frmNSchulBlock).Controls(t3b)) Xor IsNull(Forms(frmNSchulBlock).Controls(t3e)) _
Xor IsNull(Forms(frmNSchulBlock).Controls(t4b)) Xor IsNull(Forms(frmNSchulBlock).Controls(t4e)) _
Xor IsNull(Forms(frmNSchulBlock).Controls(t5b)) Xor IsNull(Forms(frmNSchulBlock).Controls(t5e)) Then
MsgBox "Termin Beginn und Ende wählen", vbCritical
Exit Function
End If


If Forms(frmNSchulBlock).Controls("TeilnehmergruppeSFN") = False And Forms(frmNSchulBlock).Controls("TeilnehmergruppeSFH") = False _
And Forms(frmNSchulBlock).Controls("TeilnehmergruppePraktikanten") = False Then
MsgBox "Bitte wählen Sie eine Teilnehmergruppe aus", vbInformation
Exit Function
End If


If IsNull(Forms(frmNSchulBlock).Controls(t1b)) Or IsNull(Forms(frmNSchulBlock).Controls(t1e)) Then
t1beginn = "01.01.1900"
t1ende = "01.01.1900"
Else
t1beginn = Forms(frmNSchulBlock).Controls(t1b)
t1ende = Forms(frmNSchulBlock).Controls(t1e)
End If

If IsNull(Forms(frmNSchulBlock).Controls(t2b)) Or IsNull(Forms(frmNSchulBlock).Controls(t2e)) Then
t2beginn = "01.01.1900"
t2ende = "01.01.1900"
Else
t2beginn = Forms(frmNSchulBlock).Controls(t2b)
t2ende = Forms(frmNSchulBlock).Controls(t2e)
End If

If IsNull(Forms(frmNSchulBlock).Controls(t3b)) Or IsNull(Forms(frmNSchulBlock).Controls(t3e)) Then
t3beginn = "01.01.1900"
t3ende = "01.01.1900"
Else
t3beginn = Forms(frmNSchulBlock).Controls(t3b)
t3ende = Forms(frmNSchulBlock).Controls(t3e)
End If

If IsNull(Forms(frmNSchulBlock).Controls(t4b)) Or IsNull(Forms(frmNSchulBlock).Controls(t4e)) Then
t4beginn = "01.01.1900"
t4ende = "01.01.1900"
Else
t4beginn = Forms(frmNSchulBlock).Controls(t4b)
t4ende = Forms(frmNSchulBlock).Controls(t4e)
End If

If IsNull(Forms(frmNSchulBlock).Controls(t5b)) Or IsNull(Forms(frmNSchulBlock).Controls(t5e)) Then
t5beginn = "01.01.1900"
t5ende = "01.01.1900"
Else
t5beginn = Forms(frmNSchulBlock).Controls(t5b)
t5ende = Forms(frmNSchulBlock).Controls(t5e)
End If

If IsNull(Forms(frmNSchulBlock).Controls("SchulungsblockTitel")) Then
MsgBox "Bitte richtigen Schulungsblock Titel eingeben"
Forms(frmNSchulBlock).Controls("SchulungsblockTitel") = "???"
Exit Function
Else
Forms(frmNSchulBlock).Controls("SchulungsblockTitel") = Forms(frmNSchulBlock).Controls("SchulungsblockTitel")
End If

If MsgBox("Blocker jetzt versenden?", vbYesNo + vbQuestion, "Frage") = vbNo Then Exit Function


Call fncOutlook_Termin_Eintragen(Forms(frmNSchulBlock).Controls("SchulungsblockTitel"), Forms(frmNSchulBlock).Controls("TeilnehmergruppeSFN"), _
Forms(frmNSchulBlock).Controls("TeilnehmergruppeSFH"), Forms(frmNSchulBlock).Controls("TeilnehmergruppePraktikanten"), _
t1beginn, t1ende, t2beginn, t2ende, t3beginn, t3ende, t4beginn, t4ende, t5beginn, t5ende)

End Function


Im Anhang auch noch das Formular zum veranschaulichen.

Ich hoffe auf eure Hilfe.
Beste Grüße
Daniel
 

Online markus888

  • Access-Profi
  • **
  • Beiträge: 172
Re: Update senden Outlook
« Antwort #1 am: November 30, 2017, 21:14:58 »
ich hab schon im Forum gestöbert und auch versucht zu googlen

Hier gehts ja nicht nur um eine Kleinigkeit, sondern um eine umfassende Automatisierung von Outlook.
Ein bisschen Googeln ist da zu wenig. Du wirst dich nicht um eine Auseinandersetzung mit den Grundlagen drücken können. Versuchen kann man es natürlich  ;D

Es gibt eh einige Seiten die Outlook VBA Code zeigen:
http://www.vboffice.net/de/developers.
http://dbwiki.net/index.php?search=outlook&title=Spezial%3ASuche&go=Seite
https://www.howto-outlook.com/

LG Markus
10 Jahre Access
 

Offline Daniel92

  • Newbie
  • Beiträge: 40
Re: Update senden Outlook
« Antwort #2 am: Dezember 06, 2017, 10:06:05 »
Hallo zusammen,

ich kämpfe immer noch mit der Umsetzung und wäre für jeden Vorschlag dankbar!

mein Lösungsansatz ist dieser:

Beim klicken auf den Button "löschen" oder "aktualisieren" erstellt sich eine temporäre Tabelle in Access, die mit dem Ordner "Gesendete Elemente" aus Outlook befüllt wird. Anschließend wird diese nach dem Betreff gefiltert, z.B. Schulungsblock 2.
Als nächstes soll jede Mail, also jeder Datensatz in der Tabelle, nacheinander geöffnet werden und z.B. gelöscht werden, oder die Uhrzeit aktualisiert und eine Update gesendet werden.
Bis zum erstellen und filtern der temporären Tabelle bekomme ich es hin, ab da läufts nicht mehr.

Was haltet ihr von dem Ansatz und wie würdet ihr das umsetzen?

@markus: mir ist schon klar, dass das kein Kleinigkeit ist, aber irgendwie lösen muss ich es ja trotzdem!  ;) Profi in VBA bin ich nicht, aber denke die Grundlagen beherrsche ich!

Beste Grüße
Daniel
 

Online markus888

  • Access-Profi
  • **
  • Beiträge: 172
Re: Update senden Outlook
« Antwort #3 am: Dezember 06, 2017, 15:13:38 »
erstellt sich eine temporäre Tabelle in Access, die mit dem Ordner "Gesendete Elemente" aus Outlook befüllt wird.
Man kann in Access direkt Outlook Tabellen verknüpfen.
Dann kannst du die Daten in ein Form/Recordset einbinden und filtern.
Mit der Outlook Methode GetItemFromID kann man dann ein konkretes Objekt öffnen.
Ich bin jetzt auch nicht der Outlook Profi, wenn man aber mit Objekten und VBA grundsätzlich umgehen kann, findet man in der Hilfe und im Web alles was man braucht.

LG Markus
10 Jahre Access
 
Folgende Mitglieder bedankten sich: Daniel92

Offline Daniel92

  • Newbie
  • Beiträge: 40
Re: Update senden Outlook
« Antwort #4 am: Dezember 07, 2017, 11:31:09 »
Zitat
Man kann in Access direkt Outlook Tabellen verknüpfen.

Danke für den Tipp, ist auf jeden Fall ne feine Sache!
Ich versuch mich mal mit der GetItemFromID Methode.

Beste Grüße
Daniel
 

Offline Daniel92

  • Newbie
  • Beiträge: 40
Re: Update senden Outlook
« Antwort #5 am: Dezember 08, 2017, 11:32:25 »
Hallo zusammen,

gibt es die Möglichkeit die EntryID von einer Mail rauszufinden, bei einer verknüpften Tabelle mit dem Outlook Ordner?
Wenn ich eine Tabelle per Code erstelle, kann ich mir die EntryID mit importieren lassen, dann ist die Tabelle aber nicht verknüpft....

Bitte um eure Hilfe.

Beste Grüße
Daniel
 

Online markus888

  • Access-Profi
  • **
  • Beiträge: 172
Re: Update senden Outlook
« Antwort #6 am: Dezember 08, 2017, 17:59:34 »
gibt es die Möglichkeit die EntryID von einer Mail rauszufinden, bei einer verknüpften Tabelle mit dem Outlook Ordner?

Hallo Daniel,
da staune ich jetzt aber nicht schlecht, dass das nicht geht - absolut unlogisch.
Persönlich verwende ich nie Verknüpfungen zu Outlook.
Ich greife immer per ADO auf das MapiTable zu. Dafür nutze ich Redemption Klassen.
Siehe: http://www.dimastr.com/redemption/mapitable.htm
Vielleicht findest du aber im Web, einen Weg direkt per DAO.Recordsets auf die Daten zuzugreifen.
Mit den Redemption ist das alles ja ganz einfach, aber du musst die Redemption Library installieren und dich etwas einlesen. Redemption ermöglicht in Bezug auf Outlook sehr viel, was mit Outlook direkt nicht möglich ist.

LG Markus
10 Jahre Access
 

Offline Daniel92

  • Newbie
  • Beiträge: 40
Re: Update senden Outlook
« Antwort #7 am: Dezember 12, 2017, 14:50:52 »
Hallo Markus,

danke für deinen Tipp! Hab es gelöst bekommen, indem ich den Outlook Kalender in eine Tabelle importiere und immer wieder aktualisiere. Dort arbeite ich dann mit dem DAO.Recordset....
War mein 4. Ansatz und endlich klappts!

Beste Grüße
 

Online markus888

  • Access-Profi
  • **
  • Beiträge: 172
Re: Update senden Outlook
« Antwort #8 am: Dezember 12, 2017, 15:18:17 »
irgendwie gehts ja immer.
10 Jahre Access