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.
No responses yet