{"id":55000828,"date":"2012-04-01T00:00:00","date_gmt":"2020-05-22T21:53:49","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=828"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"OutlookTermine_importieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/","title":{"rendered":"Outlook-Termine importieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/a2b1debf809c44e896f1ede43a185e61\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Eine parallele Haltung von Terminen in Outlook und einer weiteren Anwendung wie etwa einer Access-Applikation sollte man eigentlich vermeiden. Wenn Sie sich jedoch entscheiden, Ihren Tagesablauf mit Access zu planen, kann eine Integration von Outlook dennoch lohnend sein: Immerhin k&ouml;nnen Sie mit Outlook Termine von Kunden oder Mitarbeitern empfangen, um diese dann in Ihr Access-System zur Tagesplanung einzulesen. Wie dies gelingt, erfahren Sie in diesem Beitrag.<\/b><\/p>\n<p>Wenn Sie Outlook-Termine in eine Access-Datenbank importieren, erfolgt dies normalerweise eins zu eins: Ein Termin entspricht dann einem Eintrag in einer entsprechenden Tabelle.<\/p>\n<p>Dabei spielen Anfangs- und Endzeit keine Rolle, sie werden einfach in die Tabelle eingetragen. Dies erschwert leider die Darstellung etwa in einer Tages&uuml;bersicht: Dies ist nicht so einfach tabellarisch m&ouml;glich, da ein Termin ja auch einmal von 11:05 bis 11:37 Uhr angesetzt sein kann.<\/p>\n<p>Um dies in einem Formular darzustellen, m&uuml;ssen Sie schon erheblich tricksen, da dieses ja nur eine zeilenweise Darstellung erlaubt. Eine Einteilung in ein bestimmtes Zeitraster etwa in 15-Minuten-Schritten w&auml;re hier also eine willkommene Erleichterung.<\/p>\n<p>Erfahrungsgem&auml;&szlig; reicht dies f&uuml;r die meisten in Outlook angelegten Termine auch aus &#8211; eine h&ouml;here Genauigkeit als eine Viertelstunde f&uuml;r einen Termin und seine Dauer ist wohl eher selten.<\/p>\n<p>Ausgehend davon &#8211; und unter Ber&uuml;cksichtigung der Tatsache, dass die Termine auch einmal nebeneinander in einer Wochen&uuml;bersicht dargestellt werden sollen &#8211; speichern wir jeden Termin in 15-Minuten-H&auml;ppchen. Dazu verwenden wir die Tabelle <b>tblTermine<\/b>, die wie in Bild 1 aufgebaut ist.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/OutlooktermineImportieren-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Tabelle zum Speichern von Terminen<\/span><\/b><\/p>\n<p>Der Import der Outlook-Termine soll also wie folgt verlaufen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Jeder Termin wird in 15-Minuten-H&auml;ppchen aufgeteilt.<\/li>\n<li class=\"aufz-hlung\">Jeder Teiltermin landet in einem neuen Datensatz der Tabelle <b>tblTermine<\/b>. Dabei werden die Bezeichnung und die Beschreibung &uuml;bernommen.<\/li>\n<\/ul>\n<p>Damit w&auml;ren die Felder <b>Termindatum<\/b>, <b>Terminzeit<\/b>, <b>Bezeichnung <\/b>und <b>Beschreibung <\/b>erl&auml;utert. <b>AngelegtAm <\/b>wird mit der aktuellen Zeit versehen. <b>AufgabeID <\/b>ist ein Feld, das wir f&uuml;r die Weiterverwendung der hier vorgestellten Teill&ouml;sung im Beitrag <b>Tagesabl&auml;ufe verwalten <\/b>ben&ouml;tigen. Bleibt noch das Feld <b>KategorieID<\/b>: Dieses soll die Zuordnung eines Termins zu einer Kategorie erm&ouml;glichen (beispielsweise <b>Kundengespr&auml;ch<\/b>, <b>Programmierung <\/b>oder <b>Ausw&auml;rtstermin<\/b>). Was hat das mit Outlook zu tun Nun: Auch mit Outlook k&ouml;nnen Sie Termine kategorisieren und diese beispielsweise mit einer Farbe versehen.<\/p>\n<p>Diese Kategorie soll beim Einlesen der Termine erkannt und durch einen entsprechenden Wert im Feld <b>KategorieID <\/b>gekennzeichnet werden. Dieses Feld ist wiederum ein Fremdschl&uuml;sselfeld, mit dem Sie Eintr&auml;ge der Tabelle <b>tblKategorien <\/b>ausw&auml;hlen k&ouml;nnen (diese enth&auml;lt die drei Felder <b>KategorieID<\/b>, <b>Kategorie <\/b>und <b>Outlookkategorie<\/b>).<\/p>\n<p><b>Vor und nach dem Import<\/b><\/p>\n<p>Ein typischer Outlook-Termin f&uuml;r den Import sieht wie in Bild 3 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/OutlooktermineImportieren-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Der Outlook-Termin nach dem Import<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/OutlooktermineImportieren-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Ausgangspunkt: Ein Outlook-Termin<\/span><\/b><\/p>\n<p><b>Termine und Terminserien<\/b><\/p>\n<p>In Outlook definieren Sie einzelne Termine oder auch Terminserien, die beispielsweise t&auml;glich oder w&ouml;chentlich zum angegebenen Zeitpunkt wiederholt werden. Die hier beschriebene L&ouml;sung importiert alle Termine so, als ob es einzelne Termine w&auml;ren, und nimmt dabei keine R&uuml;cksicht darauf, ob ein Termin ein Einzeltermin oder Teil einer Terminserie ist.<\/p>\n<p><b>Termin&auml;nderungen in Outlook<\/b><\/p>\n<p>Nun kommt es beizeiten vor, dass ein mit einem Kunden oder Mitarbeiter vereinbarter Termin verschoben oder anderweitig ge&auml;ndert wird.<\/p>\n<p>In diesem Falle soll nat&uuml;rlich beim n&auml;chsten Import der Outlook-Termine ein entsprechendes Update der Termine vorgenommen werden, die durch diesen Outlook-Termin in der Access-Anwendung angelegt wurden.<\/p>\n<p>Hier wird es nun ein wenig kniffelig: Wir m&uuml;ssen entweder in Access ein eindeutiges Merkmal des Outlook-Termins ablegen, um die aktuellen Daten des Termins mit den in Access gespeicherten Daten abzugleichen oder aber den Outlook-Termin mit einem entsprechenden Merkmal versehen.<\/p>\n<p>Outlook-Termine verf&uuml;gen mit der <b>EntryID<\/b> &uuml;ber eine eindeutige Eigenschaft, die normalerweise ihren Wert nicht &auml;ndern sollte.<\/p>\n<p>Also legen wir in der Tabelle <b>tblTermine <\/b>noch ein weiteres Feld namens <b>OutlookID <\/b>an, das die <b>EntryID <\/b>des Outlook-Termins speichert. Wenn ein Termin in Outlook ge&auml;ndert wurde, der bereits in der Datenbank gespeichert ist, soll Folgendes geschehen: Access liest die Daten des Termins ein, pr&uuml;ft, ob bereits Termine mit der <b>EntryID <\/b>vorliegen und ob sich die festgelegten Zeiten unterscheiden.<\/p>\n<p>Falls ja, soll der vorhandene Outlook-Termin gel&ouml;scht und die neue Version in die Datenbank geschrieben werden.<\/p>\n<p><b>Umgang mit vorhandenen Terminen<\/b><\/p>\n<p>Die hier vorgestellte Variante, Termine in einer Tabelle zu pflegen, unterscheidet sich in einem wichtigen Punkt von Outlook: Die Tabelle soll nur einen Termin f&uuml;r einen Zeitraum gleichzeitig aufnehmen k&ouml;nnen (sollten sp&auml;ter mehrere Mitarbeiter die Anwendung nutzen, kann nat&uuml;rlich jeder Termin einmal pro Mitarbeiter vergeben werden).<\/p>\n<p>Das bedeutet f&uuml;r den Import jedoch, dass wir eine Vorgehensweise f&uuml;r den Fall definieren m&uuml;ssen, dass ein Outlook-Termin zeitlich mit einem bereits vorhandenen Termin zusammenf&auml;llt.<\/p>\n<p>Also legen wir fest, dass Outlook-Termine hier Priorit&auml;t haben. Bereits vorhandene Termine sollen in eine tempor&auml;re Tabelle verschoben werden, von der aus der Benutzer diese Termine entweder an eine andere Stelle verschiebt oder diese l&ouml;scht. Die Tabelle, in die solche Termine verschoben werden, hei&szlig;t <b>tblTermine_Temp <\/b>und ist genau so aufgebaut wie die Tabelle <b>tblTermine<\/b>.<\/p>\n<p><b>Termine importieren<\/b><\/p>\n<p>Das Importieren der Termine wird durch einen einzigen Prozeduraufruf gestartet. Die Prozedur hei&szlig;t <b>OutlooktermineEinlesen<\/b> und erwartet zwei Parameter:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>datStart<\/b>: Erster Tag, dessen Termine eingelesen werden sollen<\/li>\n<li class=\"aufz-hlung\"><b>datEnde<\/b>: Letzter Tag, dessen Termine eingelesen werden sollen<\/li>\n<\/ul>\n<p>Wenn Sie die Prozedur beispielsweise nur f&uuml;r den aktuellen Tag aufrufen m&ouml;chten, gelingt dies mit folgender Anweisung:<\/p>\n<pre>OutlooktermineEinlesen Date, Date<\/pre>\n<p>Die Prozedur selbst finden Sie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-48-anchor\">Listing 1<\/a><\/span>. Im Folgenden beschreiben wir diese Prozedur, gehen jedoch immer wieder auch auf weitere Routinen ein, die von dieser Prozedur aus aufgerufen werden.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Prozedur zum Einlesen von Outlook-Terminen mit Abgleich bestehender Eintr&auml;ge<\/p>\n<pre>Public Sub OutlooktermineEinlesen(datStart As Date, datEnde As Date)\r\n    Dim db As dao.Database\r\n    Dim objOutlook As Outlook.Application\r\n    Dim objItems As Outlook.Items\r\n    Dim strFilter As String\r\n    Dim datDatum As Date\r\n    Dim objAppointment As Outlook.AppointmentItem\r\n    Dim objItem As Object\r\n    Dim datStartzeit As Date\r\n    Dim datEndzeit As Date\r\n    Dim strOutlookID As String\r\n    Set db = CurrentDb\r\n    strFilter = FilterZusammenstellen(datStart, datEnde)\r\n    Set objOutlook = New Outlook.Application\r\n    Set objItems = TermineHolen(objoutlook, strFilter)\r\n    db.Execute &quot;DELETE FROM tblTermine_Temp&quot;, dbFailOnError\r\n    For Each objItem In objItems\r\n         If TypeName(objItem) = &quot;AppointmentItem&quot; Then\r\n            Set objAppointment = objItem\r\n            With objAppointment\r\n                Select Case .MeetingStatus\r\n                    Case olMeeting, olMeetingReceived, olNonMeeting\r\n                        datDatum = CDate(Int(.Start))\r\n                        datStartzeit = ZeitpunktErmitteln(.Start, True)\r\n                        datEndzeit = ZeitpunktErmitteln(.End, False)\r\n                        strOutlookID = .EntryID\r\n                        If Not TerminVorhanden(db, strOutlookID, datDatum, datStartzeit, datEndzeit) Then\r\n                                TerminAnlegen db, objAppointment, datDatum, datStartzeit, datEndzeit, _\r\n                            strOutlookID\r\n                        End If\r\n                End Select\r\n            End With\r\n        End If\r\n    Next objItem\r\n    If Not IsNull(DLookup(&quot;TerminID&quot;, &quot;tblTermine_Temp&quot;)) Then\r\n         MsgBox &quot;Es wurden Termine verschoben.&quot;\r\n    End If\r\n    Set objoutlook = Nothing\r\nEnd Sub<\/pre>\n<p>Die Prozedur f&uuml;llt zun&auml;chst eine Variable namens <b>db <\/b>mit dem Typ <b>Database <\/b>mit einem Verweis auf die aktuelle Datenbank. Diese Variable wird sp&auml;ter an weitere Prozeduren &uuml;bergeben.<\/p>\n<p>Danach erzeugt sie eine neue Outlook-Instanz beziehungsweise referenziert eine gegebenenfalls bereits ge&ouml;ffnete Instanz und speichert einen Verweis darauf in der Variablen <b>objOutlook<\/b>.<\/p>\n<p>Damit Sie die Objekte der Outlook-Bibliothek &uuml;berhaupt verwenden k&ouml;nnen, f&uuml;gen Sie dem VBA-Projekt &uuml;ber den <b>Verweise<\/b>-Dialog (VBA-Editor, Men&uuml;punkt <b>Extras|Verweise<\/b>) einen Verweis auf die Bibliothek <b>Microsoft Outlook x.0 Object Library <\/b>hinzu.<\/p>\n<p><b>Filter zusammenstellen<\/b><\/p>\n<p>Die beiden Parameter <b>datStart <\/b>und <b>datEnde <\/b>der Prozedur legen den Zeitraum der zu importierenden Outlook-Termine fest. Wenn Sie auf Outlook-Termine zugreifen, k&ouml;nnen Sie entweder direkt alle Termine durchlaufen oder aber die Termine vorher nach bestimmten Kriterien filtern.<\/p>\n<p>Dies erledigen wir in der Funktion <b>FilterZusammenstellen<\/b>, die einen Filterausdruck auf Basis der &uuml;bermittelten Daten zusammenstellt (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-59-anchor\">Listing 2<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 2: Zusammenstellen des Outlook-Filters<\/p>\n<pre>Public Function FilterZusammenstellen(datStart As Date, datEnde As Date) As String\r\n    Dim strStart As String\r\n    Dim strEnde As String\r\n    Dim strFilterTemp As String\r\n    strStart = Format(datStart, &quot;ddddd&quot;)\r\n    strEnde = Format(datEnde, &quot;ddddd&quot;)\r\n    strFilterTemp = &quot;[Start] &lt;= &quot; &amp; Chr(34) &amp; strEnde &amp; &quot; 23:59&quot; &amp; Chr(34)\r\n    strFilterTemp = strFilterTemp &amp; &quot; AND [End] &gt; &quot; &amp; Chr(34) &amp; strStart &amp; &quot; 00:00&quot; &amp; Chr(34)\r\n    FilterZusammenstellen = strFilterTemp\r\nEnd Function<\/pre>\n<p>Der Filter liefert in der aktuellen Version alle Termine, deren Start oder Ende in den angegebenen Zeitraum f&auml;llt. F&uuml;r den aktuellen Tag k&ouml;nnen Sie den Filter wie folgt im Direktfenster ausgeben:<\/p>\n<pre> Filterzusammenstellen(Date,Date)\r\n[Start] &lt;= &quot;02.03.2012 23:59&quot; AND [End] &gt; &quot;02.03.2012 00:00&quot;<\/pre>\n<p>Wenn Sie die Termine anders filtern m&ouml;chten, also etwa so, dass nur Termine verwendet werden, deren Beginn nicht vor dem ersten Tag und deren Ende nicht hinter dem letzten Tag liegt, m&uuml;ssen Sie die Funktion <b>FilterZusammenstellen <\/b>entsprechend umformulieren.<\/p>\n<p><!--30percent--><\/p>\n<p><b>Termine holen<\/b><\/p>\n<p>Wenn die Filterbedingung zusammengestellt ist, k&ouml;nnen Sie damit gleich die entsprechenden Termine ermitteln. Dies erledigt die Funktion <b>TermineHolen<\/b> (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-49-anchor\">Listing 3<\/a><\/span>). Die Funktion erwartet zwei Parameter:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>objOutlook<\/b>: Verweis auf die Outlook-Instanz<\/li>\n<li class=\"aufz-hlung\"><b>strFilter<\/b>: Filterausdruck<\/li>\n<\/ul>\n<p class=\"listingueberschrift\">Listing 3: Terminaufz&auml;hlung holen<\/p>\n<pre>Public Function TermineHolen(objOutlook As Outlook.Application, strFilter As String) As Outlook.Items\r\n    Dim objMAPI As Outlook.NameSpace\r\n    Dim objCalendar As Outlook.Folder\r\n    Dim objItems As Outlook.Items\r\n    Set objMAPI = objOutlook.GetNamespace(&quot;MAPI&quot;)\r\n    Set objCalendar = objMAPI.GetDefaultFolder(olFolderCalendar)\r\n    Set objItems = objCalendar.Items\r\n    objItems.Sort &quot;[Start]&quot;, False\r\n    objItems.IncludeRecurrences = True\r\n    Set TermineHolen = objItems.Restrict(strFilter)\r\nEnd Function<\/pre>\n<p>Die Funktion erstellt ein MAPI-Namespace-Objekt und ermittelt &uuml;ber dessen Funktion <b>GetDefaultFolder <\/b>den Ordner, der alle Termine enth&auml;lt (<b>olFolderCalendar<\/b>).<\/p>\n<p>Mit <b>GetDefaultFolder <\/b>wird der Standardkalender zur&uuml;ckgegeben! Sollten Sie Termine von anderen Kalendern einlesen wollen, schalten Sie eine Funktion dazwischen, mit der Sie den gew&uuml;nschten Ordner ausw&auml;hlen k&ouml;nnen. Diese sieht beispielsweise wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-58-anchor\">Listing 4<\/a><\/span> aus.<\/p>\n<p class=\"listingueberschrift\">Listing 4: Kalender-Ordner ausw&auml;hlen<\/p>\n<pre>Public Function GetAppointmentFolder(objMAPI As Outlook.NameSpace) As Outlook.Folder\r\n    Dim objFolder As Outlook.Folder\r\n    Set objFolder = objMAPI.PickFolder\r\n    If Not objFolder.DefaultItemType = olAppointmentItem Then\r\n        MsgBox &quot;Dies ist kein Kalender-Ordner.&quot;\r\n    Else\r\n        Set GetAppointmentFolder = objFolder\r\n    End If\r\nEnd Function<\/pre>\n<p>Der Aufruf dieser Funktion mit dem MAPI-Namespace-Objekt &ouml;ffnet den Dialog aus Bild 4. Wenn der Benutzer einen Ordner ausw&auml;hlt, der nicht standardm&auml;&szlig;ig <b>AppointmentItem<\/b>-Objekte enth&auml;lt, erscheint eine entsprechende Meldung.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/OutlooktermineImportieren-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Dialog zum Ausw&auml;hlen von Outlook-Ordnern<\/span><\/b><\/p>\n<p>Ein Verweis auf das entsprechende <b>Folder<\/b>-Objekt wird nur zur&uuml;ckgegeben, wenn es sich um einen Kalender-Ordner handelt. Ber&uuml;cksichtigen Sie dies durch eine entsprechende Pr&uuml;fung in der aufrufenden Prozedur.<\/p>\n<p>Sobald die <b>GetDefaultFolder<\/b>-Funktion (oder Ihre eigene Funktion zur Auswahl des Ordners) ein <b>Folder<\/b>-Objekt zur&uuml;ckgeliefert hat, erstellt die Funktion <b>TermineHolen <\/b>ein <b>Items<\/b>-Objekt, das die <b>Items<\/b>-Auflistung des <b>Folder<\/b>-Objekts referenziert. Die darin enthaltenen Termine werden zun&auml;chst mit der <b>Sort<\/b>-Methode nach dem Wert der Eigenschaft <b>Start <\/b>des jeweiligen <b>Item<\/b>-Objekts sortiert, also nach der Startzeit. Die Eigenschaft <b>IncludeRecurrences <\/b>gibt an, ob Terminserien ber&uuml;cksichtigt werden sollen &#8211; dies ist hier der Fall.<\/p>\n<p>Schlie&szlig;lich verwendet die <b>Restrict<\/b>-Methode den in <b>strFilter <\/b>gespeicherten Filterausdruck, um die Termine nach dem angegebenen Zeitraum zu filtern. Das Ergebnis ist eine neue <b>Items<\/b>-Auflistung, die schlie&szlig;lich als R&uuml;ckgabewert der Funktion dient.<\/p>\n<p><b>Tempor&auml;re Termine l&ouml;schen<\/b><\/p>\n<p>Die Tabelle <b>tblTermine_Temp <\/b>speichert verschobene Termine, also Termine, die bereits vorhanden sind und von neu importierten Outlook-Terminen &uuml;berschrieben werden.<\/p>\n<p>Diese Tabelle sollte gleich nach dem Einlesen der Outlook-Termine vom Benutzer bearbeitet werden, um verschobene Termine an anderer Stelle beziehungsweise mit anderer Zeitangabe in die Tabelle <b>tblTermine <\/b>einzuf&uuml;gen beziehungsweise zu l&ouml;schen. Ist dies nicht geschehen, erledigt die Prozedur <b>OutlooktermineEinlesen <\/b>dies mit einer entsprechenden <b>DELETE<\/b>-Anweisung.<\/p>\n<p><b>Termine durchlaufen und speichern<\/b><\/p>\n<p>Danach durchl&auml;uft die Prozedur <b>OutlooktermineEinlesen <\/b>alle Elemente der mit <b>objItems <\/b>referenzierten <b>Items<\/b>-Auflistung und referenziert das jeweils aktuelle Element mit der Objektvariablen <b>objItem<\/b>. Sie pr&uuml;ft zun&auml;chst, ob es sich bei dem Element &uuml;berhaupt um ein Element des Typs <b>Appointment <\/b>handelt. Falls ja, wird der Verweis auf dieses Objekt der Variablen <b>objAppointmentItem <\/b>zugewiesen, das den daf&uuml;r vorgesehenen Datentyp aufweist.<\/p>\n<p>Es folgt noch die Pr&uuml;fung, ob es sich nicht um ein abgesagtes Terminelement handelt. Falls nicht, beginnt das Einlesen des Termins. Dies geschieht zun&auml;chst durch das Speichern wichtiger Informationen wie dem Datum, der Startzeit, der Endzeit und des eindeutigen Merkmals <b>EntryID <\/b>in den Variablen <b>datDatum<\/b>, <b>datStartzeit<\/b>, <b>datEndzeit <\/b>und <b>strOutlookID<\/b>.<\/p>\n<p>Die <b>EntryID <\/b>wird in einer <b>String<\/b>-Variablen gespeichert, weil es sich dabei um eine GUID wie beispielsweise <b>00000000809CC08917748749AC450D4276BE7B0C0410A001<\/b> handelt. Start- und Endzeit werden nicht direkt aus den jeweiligen Eigenschaften ermittelt, sondern mithilfe der Funktion <b>ZeitpunktErmitteln<\/b>.<\/p>\n<p>Die Funktion aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-53-anchor\">Listing 5<\/a><\/span> hat folgende Aufgabe: Die 15 Minuten langen Bestandteile der importierten Outlook-Termine werden jeweils unter Angabe der Startzeit gespeichert. <b>datStartzeit <\/b>und <b>datEndzeit <\/b>sollen nun die Zeiten enthalten, an denen das erste und das letzte 15-Minuten-Element beginnt. Wenn der Termin von 12:00 bis 13:00 Uhr dauert, sind das also vier Elemente, die um 12:00, 12:15, 12:30 und 12:45 Uhr beginnen. &Uuml;ber diese in der Tabelle <b>tblTimeplanZeiten <\/b>gespeicherten Eintr&auml;ge soll dann sp&auml;ter eine Schleife laufen, um die einzelnen Elemente anzulegen.<\/p>\n<p class=\"listingueberschrift\">Listing 5: Ermitteln der Startzeit von Teilterminen<\/p>\n<pre>Public Function ZeitpunktErmitteln(dat As Date, bolVorher As Boolean) As Date\r\n    Dim datTemp As Date\r\n    datTemp = CDate(dat) - Int(dat)\r\n    If bolVorher Then\r\n        ZeitpunktErmitteln = DMax(&quot;TimeplanZeit&quot;, &quot;tblTimeplanZeiten&quot;, &quot;TimeplanZeit &lt;= &quot; &amp; ISODatum(datTemp))\r\n    Else\r\n        ZeitpunktErmitteln = DMin(&quot;TimeplanZeit&quot;, &quot;tblTimeplanZeiten&quot;, &quot;TimeplanZeit &gt;= &quot; &amp; ISODatum(datTemp)) - 1 \/ 96\r\n    End If\r\nEnd Function<\/pre>\n<p>Was geschieht, wenn der Termin mal nicht zur vollen Viertelstunde beginnt oder endet Dann soll die Funktion <b>ZeitpunktErmitteln <\/b>dies ausgleichen, indem sie den Startzeitpunkt auf die vorherige Viertelstunde und den Endzeitpunkt auf die folgende Viertelstunde verlegt.<\/p>\n<p>Aus einem Termin, der von 12:37 bis 13:05 Uhr dauert, wird also ein Termin von 12:30 bis 13:15 Uhr. Dabei werden die genauen Zeitpunkte per Dom&auml;nenfunktion aus der Tabelle <b>tblTimeplanZeiten <\/b>ermittelt.<\/p>\n<p>Die erste Zeit wird dabei mit <b>DMax <\/b>ermittelt, um den gr&ouml;&szlig;ten Eintrag zu erwischen, der kleiner oder gleich der Startzeit ist (bei 12:07 also etwa 12:00 Uhr). Die Ermittlung der letzten Zeit erfolgt mit der <b>DMin<\/b>-Funktion, um die erste volle Viertelstunde zu erhalten, die gr&ouml;&szlig;er oder gleich der Endzeit ist. Damit erhalten wir aber auch nur die Viertelstunde, die den Zeitraum beendet, aber wir ben&ouml;tigen die letzte Viertelstunde, bevor der Zeitraum endet. Also ziehen wir noch den Wert 1\/96 von diesem Wert ab.<\/p>\n<p><b>Pr&uuml;fen, ob Termin schon vorhanden ist<\/b><\/p>\n<p>Bevor ein Outlook-Termin in die Tabelle <b>tblTermine<\/b> &uuml;bernommen werden kann, fehlt noch die Pr&uuml;fung, ob dieser nicht bereits vorhanden ist.<\/p>\n<p>Davon abh&auml;ngig k&ouml;nnen zwei Dinge geschehen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Der Outlook-Termin wurde bereits importiert, stimmt aber noch mit den importierten Daten &uuml;berein. In diesem Fall muss der Termin nicht erneut importiert werden.<\/li>\n<li class=\"aufz-hlung\">Der Outlook-Termin wurde seit dem Import in Outlook ge&auml;ndert. Dann soll der Termin neu eingelesen werden, die alte Version wird zuvor gel&ouml;scht.<\/li>\n<\/ul>\n<p>Die Pr&uuml;ffunktion hei&szlig;t <b>TerminVorhanden <\/b>und erwartet folgende Parameter (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-57-anchor\">Listing 6<\/a><\/span>):<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>db<\/b>: Verweis auf die aktuelle Datenbank<\/li>\n<li class=\"aufz-hlung\"><b>strOutlookID<\/b>: <b>EntryID <\/b>des zu untersuchenden Outlook-Termins<\/li>\n<li class=\"aufz-hlung\"><b>datDatum<\/b>: Datum des Termins<\/li>\n<li class=\"aufz-hlung\"><b>datStartzeit<\/b>: Uhrzeit, zu welcher der Termin beginnt<\/li>\n<li class=\"aufz-hlung\"><b>datEndzeit<\/b>: Uhrzeit, zu welcher der Termin endet<\/li>\n<\/ul>\n<p class=\"listingueberschrift\">Listing 6: Pr&uuml;fen, ob ein Termin bereits vorhanden ist<\/p>\n<pre>Public Function TerminVorhanden(db As dao.Database, strOutlookID As String, datDatum As Date, _\r\n        datStartzeit As Date, datEndzeit As Date) As Boolean\r\n    Dim bolVorhanden As Boolean\r\n    Dim datOutlookStartzeit As Date\r\n    Dim datOutlookEndzeit As Date\r\n    bolVorhanden = False\r\n    If Not IsNull(DLookup(&quot;TerminID&quot;, &quot;tblTermine&quot;, &quot;OutlookID = ''&quot; &amp; strOutlookID &amp; &quot;''&quot;)) Then\r\n        datOutlookStartzeit = DMin(&quot;Termindatum &amp; '' '' &amp; Terminzeit&quot;, &quot;tblTermine&quot;, &quot;OutlookID = ''&quot; &amp; strOutlookID &amp; &quot;''&quot;)\r\n        datOutlookEndzeit = DMax(&quot;Termindatum &amp; '' '' &amp; Terminzeit&quot;, &quot;tblTermine&quot;, &quot;OutlookID = ''&quot; &amp; strOutlookID &amp; &quot;''&quot;)\r\n        If datOutlookStartzeit = CDbl(datDatum + datStartzeit) And datOutlookEndzeit = CDbl(datDatum + datEndzeit) Then\r\n        bolVorhanden = True\r\n    Else\r\n        db.Execute &quot;DELETE FROM tblTermine WHERE OutlookID = ''&quot; &amp; strOutlookID &amp; &quot;''&quot;, dbFailOnError\r\n    End If\r\nEnd If\r\nTerminVorhanden = bolVorhanden\r\nEnd Function<\/pre>\n<p>Im ersten Schritt pr&uuml;ft die Funktion grunds&auml;tzlich, ob der Termin bereits einmal in der Datenbank angelegt wurde. Dazu reicht es, das Feld <b>OutlookID <\/b>aller Datens&auml;tze der Tabelle <b>tblTermine <\/b>auf den Wert der Eigenschaft <b>EntryID <\/b>des zu untersuchenden Outlook-Termins zu pr&uuml;fen. Wenn kein entsprechender Eintrag gefunden wird, wurde der Termin noch nicht importiert und kann einfach angelegt werden. Konnte jedoch mindestens ein Datensatz gefunden werden, liest die Funktion die Startzeiten des ersten und letzten Elements dieses Termins in die beiden Variablen <b>datOutlookStartzeit <\/b>und <b>datOutlookEndzeit <\/b>ein.<\/p>\n<p>Beide werden mit den per Parameter &uuml;bergebenen Werten des anzulegenden Termins verglichen. Ist das Ergebnis gleich, ist der Termin vorhanden und wurde seit dem Anlegen in der Tabelle <b>tblTermine <\/b>nicht mehr in Outlook ver&auml;ndert &#8211; es ist keine weitere Aktion n&ouml;tig.<\/p>\n<p>Anderenfalls sollen die entsprechenden Terminelemente entsprechend der neuen Start- und Endzeit erneut angelegt werden. Dazu l&ouml;scht die Funktion <b>TerminVorhanden <\/b>zun&auml;chst die vorhandenen Eintr&auml;ge in der Tabelle <b>tblTermine<\/b>.<\/p>\n<p><b>Anlegen des Termins<\/b><\/p>\n<p>Damit gelangen wir zur&uuml;ck zur Hauptprozedur <b>OutlooktermineEinlesen<\/b>. Hat die Funktion <b>TerminVorhanden <\/b>den Wert <b>False <\/b>zur&uuml;ckgeliefert, gab es den Termin zuvor noch nicht oder er wurde soeben gel&ouml;scht &#8211; in jedem Fall kann nun die Prozedur <b>TerminAnlegen <\/b>aufgerufen werden, um den Outlook-Termin in entsprechende Eintr&auml;ge der Tabelle <b>tblTermine <\/b>umzuwandeln (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-60-anchor\">Listing 7<\/a><\/span>). Die Parameter entsprechen denen der Funktion <b>TerminVorhanden<\/b>, es kommt lediglich noch ein Parameter namens <b>objAppointment <\/b>hinzu, der einen Verweis auf den zu importierenden Termin erwartet.<\/p>\n<p class=\"listingueberschrift\">Listing 7: Eintragen eines Termins in die Tabelle tblTermine und verschieben vorhandener Termine<\/p>\n<pre>Public Sub TerminAnlegen(db As dao.Database, objAppointment As Outlook.AppointmentItem, _\r\n        datDatum As Date, datStartzeit As Date, datEndzeit As Date, strOutlookID As String)\r\n    Dim rstTerminzeiten As dao.Recordset\r\n    Dim strBezeichnung As String\r\n    Dim strKategorie As String\r\n    Dim lngKategorieID As Long\r\n    Dim datTerminzeit As Date\r\n    Dim strBeschreibung As String\r\n    Dim lngTerminID As Long\r\n    Set rstTerminzeiten = db.OpenRecordset(&quot;SELECT * FROM tblTimeplanZeiten WHERE TimeplanZeit &gt;= &quot; _\r\n        &amp; ISODatum(datStartzeit) &amp; &quot; AND TimeplanZeit &lt;= &quot; &amp; ISODatum(datEndzeit), dbOpenDynaset)\r\n    With objAppointment\r\n        strBezeichnung = .Subject\r\n        strKategorie = .Categories\r\n        strBeschreibung = .Body\r\n    End With\r\n    If InStr(1, strKategorie, &quot;;&quot;) &gt; 0 Then\r\n         strKategorie = Left(strKategorie, InStr(1, strKategorie, &quot;;&quot;) - 1)\r\n    End If\r\n    lngKategorieID = Nz(DLookup(&quot;KategorieID&quot;, &quot;tblKategorien&quot;, &quot;Outlookkategorie = ''&quot;&amp; strKategorie &amp; &quot;''&quot;), 0)\r\n    Do While Not rstTerminzeiten.EOF\r\n         datTerminzeit = rstTerminzeiten!TimeplanZeit\r\n        lngTerminID = Nz(DLookup(&quot;TerminID&quot;, &quot;tblTermine&quot;, &quot;Termindatum = &quot; &amp; ISODatum(datDatum) _\r\n            &amp; &quot; AND Terminzeit = &quot; &amp; ISODatum(datTerminzeit)), 0)\r\n        If Not lngTerminID = 0 Then\r\n            db.Execute &quot;INSERT INTO tblTermine_Temp SELECT * FROM tblTermine WHERE TerminID = &quot; _\r\n                &amp; lngTerminID, dbFailOnError\r\n            db.Execute &quot;DELETE FROM tblTermine WHERE TerminID = &quot; &amp; lngTerminID, dbFailOnError\r\n        End If\r\n        db.Execute &quot;INSERT INTO tblTermine(Termindatum, Terminzeit, Bezeichnung, Beschreibung, &quot; _\r\n            &amp; &quot;KategorieID, OutlookID) VALUES(&quot; &amp; ISODatum(datDatum) &amp; &quot;, &quot; &amp; ISODatum(datTerminzeit) _\r\n            &amp; &quot;, ''&quot; &amp; strBezeichnung &amp; &quot;'', ''&quot; &amp; strBeschreibung &amp; &quot;'', &quot; &amp; lngKategorieID &amp; &quot;, ''&quot; _\r\n            &amp; strOutlookID &amp; &quot;'')&quot;, dbFailOnError\r\n        rstTerminzeiten.MoveNext\r\n    Loop\r\nEnd Sub<\/pre>\n<p>Die Prozedur &ouml;ffnet zun&auml;chst ein Recordset auf Basis der Tabelle <b>tblTimeplanZeiten<\/b>, wobei nur diejenigen Eintr&auml;ge ber&uuml;cksichtigt werden, deren Startzeiten denen der in der Tabelle <b>tblTermine <\/b>anzulegenden Eintr&auml;ge entsprechen. Die notwendigen Vergleichswerte f&uuml;r die Kriterien liefern die beiden Parameter <b>datStartzeit <\/b>und <b>datEndzeit<\/b>.<\/p>\n<p>Danach schreibt die Prozedur den Betreff und den Inhalt des Termins in die beiden String-Variablen <b>strBezeichnung <\/b>und <b>strBeschreibung<\/b>. Eine weitere Variable namens <b>strKategorie <\/b>nimmt den Wert der Eigenschaft <b>Categories <\/b>des <b>AppointmentItem<\/b>-Elements auf. Diese enth&auml;lt die Bezeichnung einer via Outlook festgelegten Kategorie f&uuml;r diesen Termin. Die Kategorie weisen Sie beispielsweise in Outlook 2010 wie in Bild 5 zu. Wie Sie die Kategorien in die Tabelle <b>tblKategorien <\/b>einlesen, damit die Outlook-Kategorien gemappt und den Terminen zugewiesen werden k&ouml;nnen, erfahren Sie weiter unten.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/OutlooktermineImportieren-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Festlegen einer Kategorie f&uuml;r einen Termin<\/span><\/b><\/p>\n<p>Das Mapping erledigt die folgende Anweisung, die in der Tabelle <b>tblKategorien <\/b>nach einem Eintrag sucht, dessen Feld <b>Outlookkategorie <\/b>den Wert der Eigenschaft <b>Categories <\/b>des aktuellen Termins enth&auml;lt. Wird dort kein Eintrag gefunden, &uuml;bernimmt die Prozedur den Wert <b>0<\/b> f&uuml;r das Feld <b>KategorieID <\/b>des Termins.<\/p>\n<p>Schlie&szlig;lich teilt die Prozedur den Termin in seine 15-min&uuml;tigen Bestandteile auf. Dies geschieht mithilfe der Datensatzgruppe auf Basis der Tabelle <b>tblTimeplanZeiten<\/b>, die alle Startzeiten enth&auml;lt, f&uuml;r einen Outlook-Termin von 10:00 bis 10:30 Uhr also beispielsweise 10:00 und 10:15 Uhr.<\/p>\n<p>F&uuml;r jeden Datensatz dieses Recordsets tr&auml;gt die Prozedur innerhalb einer <b>Do While<\/b>-Schleife einen neuen Eintrag in die Tabelle <b>tblTermine <\/b>ein. Dabei pr&uuml;ft sie, ob f&uuml;r diese Zeit bereits ein Termin vorhanden ist. Falls ja, wird dieser Termin in die Tabelle <b>tblTermine_Temp <\/b>kopiert und anschlie&szlig;end aus der Tabelle <b>tblTermine <\/b>gel&ouml;scht. Danach tr&auml;gt die Prozedur den neuen Termin in die Tabelle <b>tblTermine <\/b>ein.<\/p>\n<p>Damit sind die Aufgaben der Prozedur <b>TerminAnlegen <\/b>erledigt. Die Hauptroutine <b>OutlooktermineEinlesen <\/b>pr&uuml;ft nun noch, ob die Tabelle <b>tblTermine_Temp <\/b>Datens&auml;tze enth&auml;lt, und zeigt gegebenenfalls eine entsprechende Meldung an. Dies w&uuml;rde bedeuten, dass Termine aus der Tabelle <b>tblTermine <\/b>verschoben wurden. Der Benutzer m&uuml;sste dann pr&uuml;fen, ob diese Termine mit anderen Zeiten in den Terminkalender eingearbeitet werden sollen. Tut er dies nicht, werden die verschobenen Termine beim n&auml;chsten Einlesen der Outlook-Termine aus der Tabelle <b>tblTermine_Temp <\/b>gel&ouml;scht.<\/p>\n<p><b>Kategorien einlesen und mappen<\/b><\/p>\n<p>Wer seine Outlook-Termine sorgsam mit Kategorien versehen hat &#8211; und sei es nur, um diese farbig zu gestalten -, m&ouml;chte diese Kategorien beim Import in eine Access-Datenbank m&ouml;glicherweise weiterverwenden.<\/p>\n<p>Die Kategorien definieren Sie in Outlook mit einem Dialog, den Sie mit dem Men&uuml;eintrag <b>Kategorisieren|Alle Kategorien &#8230; <\/b>des Kontextmen&uuml;s eines Termins &ouml;ffnen (s. Bild 6).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/OutlooktermineImportieren-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Definieren von Kategorien in Outlook<\/span><\/b><\/p>\n<p>Die Eigenschaft <b>Categories <\/b>eines Termins unter VBA kann nun nicht nur eine, sondern auch mehrere Kategorien enthalten, zum Beispiel <b>Blaue Kategorie; Lila Kategorie<\/b>. Die L&ouml;sung dieses Beitrags geht davon aus, dass jeder Termin nur einer Kategorie zugeordnet ist und ber&uuml;cksichtigt nur die erste Kategorie.<\/p>\n<p>W&auml;hrend der Rest dieses Beitrags sich haupts&auml;chlich um den VBA-Code zum Importieren von Outlook-Terminen k&uuml;mmert, wollen wir zumindest dem Anlegen von Kategorien f&uuml;r die Termine eine kleine Benutzeroberfl&auml;che widmen. Die Elemente zum Verwalten der eingelesenen Termine finden Sie im Beitrag <b>Tagesablauf verwalten <\/b>(<b>www.access-im-unternehmen.de\/830<\/b>).<\/p>\n<p>Die Benutzeroberfl&auml;che besteht aus zwei Formularen. <b>frmKategorienUebersicht <\/b>enth&auml;lt eine Liste aller bereits angelegten Kategorien sowie zwei Schaltfl&auml;chen zum L&ouml;schen und Anlegen von Kategorien. Ein Doppelklick auf einen vorhandenen Kategorie-Eintrag &ouml;ffnet ebenso wie ein Klick auf die Neu-Schaltfl&auml;che das Formular <b>frmKategorieDetails<\/b>, mit dem Sie neue Kategorien anlegen oder bestehende bearbeiten. Beide Formulare zeigt Bild 7.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/OutlooktermineImportieren-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Anlegen von Kategorien<\/span><\/b><\/p>\n<p>Der im Rahmen dieses Beitrags interessante Teil ist das Kombinationsfeld <b>cboOutlookkategorie<\/b>. Dieses Kombinationsfeld bietet alle aktuell in Outlook angelegten Kategorien zur Auswahl an. Gef&uuml;llt wird dieses Kombinationsfeld, dessen Eigenschaft <b>Herkunftsart <\/b>&uuml;brigens auf den Wert <b>Wertliste <\/b>eingestellt ist, &uuml;ber die Funktion <b>KategorienEinlesen<\/b>.<\/p>\n<p>Diese Funktion durchl&auml;uft alle Elemente der Auflistung <b>Categories <\/b>des MAPI-Namespace-Objekts und erfasst die Bezeichnungen in einer Liste, deren Eintr&auml;ge durch Semikola voneinander getrennt sind:<\/p>\n<pre>Public Function KategorienEinlesen() As String\r\n    Dim objOutlook As Outlook.Application\r\n    Dim objCategory As Outlook.Category\r\n    Dim objCategories As Outlook.Categories\r\n    Dim strKategorien As String\r\n    Set objOutlook = New Outlook.Application\r\n    Set objCategories = objOutlook.GetNamespace(&quot;MAPI&quot;).Categories\r\n    For Each objCategory In objCategories\r\n        strKategorien = strKategorien &amp; objCategory.Name &amp; &quot;;&quot;\r\n    Next objCategory\r\n    KategorienEinlesen = strKategorien\r\nEnd Function<\/pre>\n<p>Das Formular <b>frmKategorieDetails <\/b>enth&auml;lt neben dem Eingabefeld f&uuml;r den Kategorienamen auch noch die M&ouml;glichkeit, eine Farbe festzulegen &#8211; hierauf gehen wir aus Platzgr&uuml;nden nicht im Detail ein.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Diese beiden Formulare nutzen Sie nun, um die Tabelle <b>tblKategorien <\/b>mit den in Outlook vorgesehenen Kategorien zu f&uuml;llen. Dies ist eine vorbereitende Aufgabe f&uuml;r den Import von Outlook-Terminen in die Tabelle <b>tblTermine<\/b>: Hier werden die Termine in H&auml;ppchen &Atilde;  15 Minuten aufgeteilt, damit diese in der im Beitrag <b>Tagesablauf verwalten <\/b>(<b>www.access-im-unternehmen.de\/830<\/b>) einfach gehandhabt werden k&ouml;nnen.<\/p>\n<p>Beim Importieren dieser Daten wird die f&uuml;r den jeweiligen Termin festgelegte Kategorie eingelesen (beispielsweise <b>Gelbe Kategorie<\/b>). Dieser Kategoriename wird dann in der Tabelle <b>tblKategorien <\/b>gesucht. Liegt dort ein passender Datensatz vor, wird dessen Prim&auml;rschl&uuml;sselwert in das Fremdschl&uuml;sselfeld <b>KategorieID <\/b>der Datens&auml;tze der Tabelle <b>tblTermine <\/b>eingetragen.<\/p>\n<p>Die hier vorgestellte Methode zum Importieren von Outlook-Terminen in 15-Minuten-Elementen ist Teil der oben erw&auml;hnten L&ouml;sung <b>Tagesablauf verwalten<\/b>. In dieser L&ouml;sung finden Sie ein Formular vor, das die importierten Termine in einer &uuml;bersichtlichen Tagesansicht darstellt. Sie k&ouml;nnen dort weitere Termine hinzuf&uuml;gen oder auch vorhandene Termine anpassen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>TagesablaufVerwalten.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{2CA8C4A6-0FE8-48B1-93CF-41C94C261A26}\/aiu_828.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine parallele Haltung von Terminen in Outlook und einer weiteren Anwendung wie etwa einer Access-Applikation sollte man eigentlich vermeiden. Wenn Sie sich jedoch entscheiden, Ihren Tagesablauf mit Access zu planen, kann eine Integration von Outlook dennoch lohnend sein: Immerhin k&ouml;nnen Sie mit Outlook Termine von Kunden oder Mitarbeitern empfangen, um diese dann in Ihr Access-System zur Tagesplanung einzulesen. Wie dies gelingt, erfahren Sie in diesem Beitrag.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022012,662012,44000026],"tags":[],"class_list":["post-55000828","post","type-post","status-publish","format-standard","hentry","category-66022012","category-662012","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Outlook-Termine importieren - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Outlook-Termine importieren\" \/>\n<meta property=\"og:description\" content=\"Eine parallele Haltung von Terminen in Outlook und einer weiteren Anwendung wie etwa einer Access-Applikation sollte man eigentlich vermeiden. Wenn Sie sich jedoch entscheiden, Ihren Tagesablauf mit Access zu planen, kann eine Integration von Outlook dennoch lohnend sein: Immerhin k&ouml;nnen Sie mit Outlook Termine von Kunden oder Mitarbeitern empfangen, um diese dann in Ihr Access-System zur Tagesplanung einzulesen. Wie dies gelingt, erfahren Sie in diesem Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:53:49+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/a2b1debf809c44e896f1ede43a185e61\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Outlook-Termine importieren\",\"datePublished\":\"2020-05-22T21:53:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/\"},\"wordCount\":3359,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/a2b1debf809c44e896f1ede43a185e61\",\"articleSection\":[\"2\\\/2012\",\"2012\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/\",\"name\":\"Outlook-Termine importieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/a2b1debf809c44e896f1ede43a185e61\",\"datePublished\":\"2020-05-22T21:53:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/a2b1debf809c44e896f1ede43a185e61\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/a2b1debf809c44e896f1ede43a185e61\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/OutlookTermine_importieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Outlook-Termine importieren\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Outlook-Termine importieren - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/","og_locale":"de_DE","og_type":"article","og_title":"Outlook-Termine importieren","og_description":"Eine parallele Haltung von Terminen in Outlook und einer weiteren Anwendung wie etwa einer Access-Applikation sollte man eigentlich vermeiden. Wenn Sie sich jedoch entscheiden, Ihren Tagesablauf mit Access zu planen, kann eine Integration von Outlook dennoch lohnend sein: Immerhin k&ouml;nnen Sie mit Outlook Termine von Kunden oder Mitarbeitern empfangen, um diese dann in Ihr Access-System zur Tagesplanung einzulesen. Wie dies gelingt, erfahren Sie in diesem Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:53:49+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/a2b1debf809c44e896f1ede43a185e61","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Outlook-Termine importieren","datePublished":"2020-05-22T21:53:49+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/"},"wordCount":3359,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/a2b1debf809c44e896f1ede43a185e61","articleSection":["2\/2012","2012","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/","url":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/","name":"Outlook-Termine importieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/a2b1debf809c44e896f1ede43a185e61","datePublished":"2020-05-22T21:53:49+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/a2b1debf809c44e896f1ede43a185e61","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/a2b1debf809c44e896f1ede43a185e61"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/OutlookTermine_importieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Outlook-Termine importieren"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000828"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000828\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}