Ziel: Termine aus Access im Kalender – und umgekehrt

Access kennt Projekttermine, Ressourcen oder Fristen.
Dein Kalender kennt Erinnerungen, Benachrichtigungen, mobile VerfĂŒgbarkeit.
Du willst: synchron. Automatisch oder per Knopfdruck.

Funktioniert mit:

  • Outlook (lokal)
  • Microsoft 365 (Exchange Online)
  • Google Calendar (per API)
  • ICS-Export (iCal-Dateien)

Variante 1: Outlook-Kalender lokal steuern

Termin aus Access erstellen

Public Sub TerminErstellen()
    Dim olApp As Object, olTermin As Object
    Set olApp = CreateObject("Outlook.Application")
    Set olTermin = olApp.CreateItem(1) ' olAppointmentItem

    With olTermin
        .Start = #5/30/2025 10:00#
        .End = #5/30/2025 11:00#
        .Subject = "Besprechung Projekt X"
        .Location = "Konferenzraum"
        .Body = "Details siehe Access."
        .ReminderMinutesBeforeStart = 15
        .BusyStatus = 2 ' olBusy
        .Save
    End With
End Sub

Serienereignis? Geht auch. Ist aber fummelig – besser vermeiden.

Variante 2: Outlook-Kalender auslesen

Public Sub TermineHolen()
    Dim olApp As Object, olNS As Object, olKal As Object, olTermin As Object
    Set olApp = CreateObject("Outlook.Application")
    Set olNS = olApp.GetNamespace("MAPI")
    Set olKal = olNS.GetDefaultFolder(9) ' olFolderCalendar

    For Each olTermin In olKal.Items
        If olTermin.Start >= Date And olTermin.Start < Date + 7 Then
            Debug.Print olTermin.Subject & " - " & olTermin.Start
        End If
    Next
End Sub

So kannst Du Termine in Access importieren, z. B. fĂŒr Berichte oder Auslastung.

Variante 3: Microsoft 365-Kalender via Graph API

Nur fĂŒr Online-Konten (Azure, M365).
Du brauchst:

  • Zugriffstoken (OAuth2)
  • https://graph.microsoft.com/v1.0/me/events

Empfohlen: REST-Call aus Power Automate oder Node.js → Access ruft per HTTP zu.

Alternativ: JSON POST aus Access an eigene Middleware.

Public Sub M365TerminErstellen()
    ' Nur sinnvoll mit zwischengeschaltetem Dienst – Tokenhandling in VBA unpraktisch
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    Dim json As String
    json = "{""subject"":""Projekt-Call"",""start"":{""dateTime"":""2025-06-01T09:00:00"",""timeZone"":""Europe/Berlin""},""end"":{""dateTime"":""2025-06-01T10:00:00"",""timeZone"":""Europe/Berlin""}}"

    http.Open "POST", "https://api.meinmiddleware.de/createEvent", False
    http.setRequestHeader "Authorization", "Bearer abc123"
    http.setRequestHeader "Content-Type", "application/json"
    http.Send json
End Sub

Variante 4: Google Calendar ĂŒber API

Erfordert OAuth2 + Zugriff auf Google Calendar API.
Empfehlung: Access → JSON → Webhook → z. B. n8n, Make, Apps Script

Access hat keine eingebaute Google-Integration.
Aber via:

' POST an eigenen Webhook
' z. B. Make.com → Create Google Calendar Event

Variante 5: iCal-Datei exportieren (ICS)

Access erstellt eine .ics-Datei, die in jeden Kalender importiert werden kann.

Public Sub ExportiereICS()
    Dim f As Integer
    f = FreeFile

    Open "C:\Kalender\termin.ics" For Output As #f
    Print #f, "BEGIN:VCALENDAR"
    Print #f, "VERSION:2.0"
    Print #f, "BEGIN:VEVENT"
    Print #f, "SUMMARY:Projektbesprechung"
    Print #f, "DTSTART:20250601T090000"
    Print #f, "DTEND:20250601T100000"
    Print #f, "LOCATION:BĂŒro"
    Print #f, "DESCRIPTION:Besprechung mit Projektteam"
    Print #f, "END:VEVENT"
    Print #f, "END:VCALENDAR"
    Close #f
End Sub

Per E-Mail versenden oder manuell in Outlook/Google Calendar importieren.

Best Practices

  • PrimĂ€rschlĂŒssel immer mitgeben (z. B. extern_id)
  • Outlook-Termine nie doppelt anlegen – vorher prĂŒfen
  • Synchronisierter Kalender = eigener Sync-Status pro Datensatz
  • Änderungen im Kalender (z. B. per Drag & Drop) nur synchronisieren, wenn unbedingt nötig
  • Logging mitfĂŒhren (tblKalenderSyncLog)

Synchronisationslogik in Access

If Me.SyncStatus <> "Erstellt" Then
    Call TerminErstellenInOutlook(Me.ID)
    Me.SyncStatus = "Erstellt"
    Me.SyncAm = Now()
End If

Oder fĂŒr Löschungen:

Call OutlookTerminLöschen(Me.extern_id)
Me.SyncStatus = "Gelöscht"

Einsatzszenarien

  • Ressourcenplanung
  • Außendiensttermine
  • Wartungsintervalle
  • Personal- oder Raumbelegung
  • Projektzeitleisten mit Kalenderbezug

Fazit fĂŒr Entwickler

Access und Kalender sind keine GegensÀtze.
Du brauchst saubere Schnittstellen, eindeutige IDs und klare Regeln.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert