Termine von Outlook zum Google Calendar exportieren

Möchtest Du den gesamten Artikel lesen? Und vielleicht sogar den Artikel im PDF-Format und die Beispieldateien herunterladen? Dann hole Dir den Artikel gleich hier - völlig kostenlos!

Wenn wir Outlook und Google Calendar nutzen, wollen wir vielleicht auch Termine von Outlook aus zum Google Calendar exportieren. In diesem Artikel zeigen wir, wie das für einfache Termine mit den grundlegenden Eigenschaften gelingen kann. Später schauen wir uns an, wie wir die hier geschaffenen Prozeduren von verschiedenen Stellen in Outlook aufrufen können – beispielsweise über das Ribbon oder das Kontextmenüs eines Termins.

Ziel dieses Artikels

Wenn Du diesen Artikel bis zum Ende gelesen hast, verfügst Du über Kenntnisse, um einen Termin aus Outlook per VBA in den Google Calendar zu übertragen (siehe Bild 1). Zusätzlich erfährst Du, wie Änderungen an diesem Termin in Outlook automatisch in den Termin im Google Calender übertragen werden.

Ein von Outlook in den Google Calender übertragener Termin

Bild 1: Ein von Outlook in den Google Calender übertragener Termin

Übertragen von Terminen mit Basisdaten

Termine von Outlook und von Google Calendar können sehr viele unterschiedliche Eigenschaften erfordern – gerade, wenn es um Serientermine geht. Deshalb wollen wir es in diesem Artikel erst einmal einfach halten und nur Termine mit Betreff, Inhalt und den wichtigsten Informationen wie Startdatum und -zeit sowie Enddatum und -zeit übermitteln. Auch um ganztägige Termine wollen wir uns kümmern.

Als Basis für die Prozeduren dieses Artikels können wir die im Artikel Google Calendar per Rest-API programmieren (www.vbentwickler.de/410) vorgestellten Techniken nurtzen, die wir im Artikel Google Calendar per Rest-API programmieren, Teil 2 (www.vbentwickler.de/415) noch erweitert haben. Die Grundlagen für die Authentifizierung für den Austausch von Daten mit dem Google Calendar haben wir in den Artikeln OAuth2-Token für Google per .NET-App holen (www.vbentwickler.de/413), Google Calendar per Rest-API programmieren (www.vbentwickler.de/410) und Google-Token per DLL holen (www.vbentwickler.de/409).

Grundlegende Techniken für den Zugriff auf Outlook-Termine findest Du im Artikel Outlook: Kalender und Termine programmieren (www.vbentwickler.de/415).

Ablauf beim Übertragen von Terminen

Grundsätzlich ist das Übertragen eines Termins von Outlook zum Google Calendar kein Hexenwerk, wenn wir die Techniken aus den oben vorgestellten Artikeln kennen. Wir brauchen nur den zu übertragenden Termin zu identifizieren, die relevanten Informationen wie Betreff, Inhalt, Startzeit und Endzeit in einer JSON-Datei zusammenzufassen und diese an Google zu senden.

Allerdings kann es sein, dass sich ein solcher Termin einmal ändert. Wie können wir sicherstellen, dass diese Änderung auch in den Google Calendar übertragen wird? Dazu müssen wir als Erstes ein eindeutiges Merkmal des Termins im Google Calendar ermitteln und dieses mit dem übertragenen Termin speichern. Wenn sich dieser dann ändert, können wir die ID nutzen, um den Google-Termin entsprechend anzupassen. An diese ID kommen wir problemlos heran. Speichern können wir diese in der Eigenschaft BillingInformation – das ist eine Eigenschaft, die von Outlook selbst nicht genutzt wird und die auch über die Benutzeroberfläche nicht verfügbar ist.

Außerdem benötigen wir noch Automatismen, die dafür sorgen, dass Aktionen wie das Ändern oder Löschen eines Termins in Outlook direkt in den Google Calendar übertragen werden.

Modul im VBA-Projekt von Outlook anlegen

Um die benötigten VBA-Prozeduren unterzubringen, legen wir ein neues Modul im VBA-Projekt von Outlook an:

  • Wechseln zum VBA-Editor mit der Tastenkombination Alt + F11
  • Erstellen eines neuen Moduls mit Einfügen|Modul
  • Aktivieren des Eigenschaftenfensters mit der Taste F4
  • Markieren des Moduls
  • Ändern des Namens in mdlGoogleCalendar

Dem neuen Modul fügen wir nun erst einmal die beiden Funktionen GetDefaultCalendar und GetSelectedAppointmentItem hinzu, die wir im Artikel Outlook: Kalender und Termine programmieren (www.vbentwickler.de/415) beschreiben. Diese nutzen wir, um den aktuell selektierten Termin in Outlook zu referenzieren. Genau diesen wollen wir nun in den Google Calendar übertragen.

Weitere Vorbereitungen

Wir haben alle Module, die wir für die Export-Funktion von Terminen zum Google Calendar benötigen, im Download bereitgestellt. Außerdem findest Du dort ein funktionsfähiges VBA-Projekt für Outlook. Wenn Du dieses ausprobieren möchtest, kannst Du dieses zeitweise statt Deines eigenen VBA-Projekts unter Outlook nutzen. Dazu öffnest Du im Windows Explorer das Verzeichnis C:\Users\[Benutzername]\AppData\Roaming\Microsoft\Outlook. Hier findest Du eine Datei namens VbaProject.OTM vor. Dieses benennst Du um und fügst die gleichnamige Datei aus dem Download zu diesem Artikel hinzu.

Du kannst auch die Module aus dem Download einzeln in das VBA-Projekt importieren. Dazu ziehst Du diese einfach aus dem Windows Explorer in den Projekt-Explorer des VBA-Editors von Outlook. Du musst dann allerdings noch einige Verweise zum VBA-Projekt hinzufügen – in diesem Fall die unteren drei aus Bild 2:

Notwendige Verweise für den Einsatz unserer Beispiellösung

Bild 2: Notwendige Verweise für den Einsatz unserer Beispiellösung

  • Microsoft Scripting Runtime
  • Microsoft XML, v6.0
  • amvGoogleOAuth2

Für den letzten Verweis musst Du außerdem noch die DLL amvGoogleOAuth2.dll installieren. Alle notwendigen Informationen dazu findest Du im Artikel Google-Token per DLL holen (www.vbentwickler.de/409).

Termin in den Google Calendar übertragen

Damit kommen wir zu der Funktion, mit der wir einen Termin zum Google Calendar übertragen wollen. Sie heißt AppointmentItemToGoogleCalendar und sieht wie in Listing 1 aus.

Public Function AppointmentItemToGoogleCalendar(objAppointmentItem As Outlook.AppointmentItem) As String
     Dim strToken As String
     Dim strCalendarID As String
     Dim strSummary As String
     Dim strDescription As String
     Dim datStart As Date
     Dim datEnd As Date
     Dim intColor As eColor
     Dim bolAllDayEvent As Boolean
     Dim strEventID As String
     strToken = GetAppSetting("AccessToken")
     strCalendarID = GetAppSetting("CalendarID")
     With objAppointmentItem
         strSummary = .Subject
         strDescription = .Body
         datStart = .Start
         datEnd = .End
         bolAllDayEvent = .AllDayEvent
         intColor = colBanane
     End With
     CheckToken
     If InsertEvent(strToken, strCalendarID, strSummary, strDescription, datStart, datEnd, bolAllDayEvent, , , _
             intColor, , strEventID) = True Then
         MsgBox "Anlegen erfolgreich." & vbCrLf & vbCrLf & "EventID: " & strEventID
         AppointmentItemToGoogleCalendar = strEventID
     Else
         MsgBox "Anlegen nicht erfolgreich."
     End If
End Function

Listing 1: Funktion zum Übertragen eines Termins von Outlook zum Google Calendar

Die Funktion erwartet nur einen Parameter – den Verweis auf den Termin, der in den Google Calendar geschrieben werden soll. Für den Rückgabewert der Funktion definieren wir den Datentyp String. Die Funktion soll im Erfolgsfall die EventID des neu hinzugefügten Kalendereintrags liefern.

Die Funktion liest das Token und die ID des Zielkalenders aus der Registry ein. Mehr zu diesem Thema liest Du im Artikel Anwendungsdaten in der Registry (www.vbentwickler.de/411). Im Artikel Anwendungsdaten in der Registry (www.vbentwickler.de/411) beschreiben wir, wie diese Werte zuvor in die Registry geschrieben werden.

Den Wert für den Kalender, den wir zuvor teilweise fest im Code verankert hatten, haben wir mit der folgenden Anweisung in der Registry gespeichert (bitte eigenen Kalendernamen einsetzen, der in der Regel der E-Mail-Adresse zum Anmelden entspricht):

SaveAppSetting "CalendarID", "andre.minhorst@googlemail.com"

Danach lesen wir einfach die relevanten Informationen in die dafür vorgesehenen Variablen ein, zum Beispiel Betreff, Inhalt, Startdatum und Enddatum.

Nach dem Aufruf der Funktion CheckToken, welche die Gültigkeit des Tokens prüft und dieses gegebenenfalls erneuert, rufen wir die Funktion InsertEvent auf.

Diese haben wir im Artikel Google Calendar per Rest-API programmieren, Teil 2 (www.vbentwickler.de/416) beschrieben.

Beim Aufruf von InsertEvent prüfen wir den Rückgabewert in einer If…Then-Bedingung.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar