Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
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.
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:
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.