{"id":55001017,"date":"2016-02-01T00:00:00","date_gmt":"2020-05-22T19:03:56","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1017"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Kanban_mit_Outlook_und_Access","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/","title":{"rendered":"Kanban mit Outlook und Access"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/b3be90f93f4f474eae00d76cea9e48b3\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Haben Sie auch manchmal den Eindruck, dass Sie zu viele Projekte gleichzeitig beackern und den &uuml;berblick verlieren k&ouml;nnten Mir passierte das regelm&auml;&szlig;ig. Bis ich &uuml;ber Kanban gestolpert bin und Teile des Konzepts in meine eigenen Abl&auml;ufe eingebaut habe. Kanban soll durch eine Visualisierung der aktuellen Projekte und ihres Fortschritts eine bessere &uuml;bersicht bieten und vor allem die Anzahl der gleichzeitig begonnenen Projekte begrenzen. Dies baue ich in meine langj&auml;hrige Praxis zur Zeiterfassung mit Outlook und Access ein. Wie das gelingt, zeigt der vorliegende Beitrag.<\/b><\/p>\n<p>Eines der Probleme der heutigen Zeit ist, dass wir immer mehr unter zeitlichem Druck stehen und scheinbar immer mehr Aufgaben zu bew&auml;ltigen haben. In der Tat sieht man in vielen Bereichen des Lebens, dass Aufgaben viel lieber aufgeschoben als erledigt werden. Ich muss selbst gestehen, dass ich manche unklare Leseranfrage lieber mit einer Gegenfrage beantworte, um diese erstmal vom Tisch zu haben. Tatsache ist: Die Frage kommt wieder zur&uuml;ck, und irgendwann muss ich mich ohnehin darum k&uuml;mmern.<\/p>\n<p>Die Anzahl der Aufgaben steigt allerdings kontinuierlich, solange man diese immer wieder in eine Warteschlange schiebt, statt sich abschlie&szlig;end um die Bearbeitung zu k&uuml;mmern und die Aufgabe endlich von der Liste verschwinden l&auml;sst.<\/p>\n<p>Die L&ouml;sung aus Outlook, Access und Kanban, die dieser Beitrag pr&auml;sentiert, zeigt, wie ich zuletzt meine Projekte bearbeitet habe. Sie setzt auf einer Projektzeiterfassung auf, die ich bereits seit einigen Jahren nutze, um meine Arbeitszeiten zu protokollieren (die Basis dazu finden Sie im Beitrag <b>Projektzeiterfassung mit Outlook und Access<\/b>, <b>www.access-im-unternehmen.de\/1016<\/b>). Dabei verwende ich Outlook, um Aufgabenordner synonym zu Projekten, Aufgaben zu Aufgaben und Termine zu T&auml;tigkeiten einzutragen. Die Daten werden im Hintergrund in einer Access-Datenbank gespeichert. Was hat das mit Kanban zu tun, beziehungsweise mit der hier verwendeten Interpretation dieser Vorgehensweise<\/p>\n<p>Wir wollen den Kanban-Ansatz insoweit nutzen, als dass wir f&uuml;r unsere Aufgaben verschiedenen Status definieren, die diese dann durchlaufen (ja, Status ist der Plural von Status &#8211; ich war selbst anfangs &uuml;berrascht &#8230;). <\/p>\n<h2>Kanban-Kategorien<\/h2>\n<p>Die bisherige Vorgehensweise bei der einfachen Variante der Projektzeiterfassung sieht wie in Bild 1 aus. Hier haben Sie unter dem Ordner <b>Projekte <\/b>neue Projekte angelegt (zum Beispiel <b>Beispielprojekt 1<\/b>), darin Aufgaben erstellt (<b>Beispielaufgabe 1<\/b>) und diese als T&auml;tigkeiten in den Kalender gezogen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_001.png\" alt=\"Bisherige Darstellung der Projekte und Aufgaben und T&auml;tigkeiten in der Projektzeiterfassung\" width=\"600\" height=\"506,372\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Bisherige Darstellung der Projekte und Aufgaben und T&auml;tigkeiten in der Projektzeiterfassung<\/span><\/b><\/p>\n<p>Nun wollen wir in die Liste mit den Aufgaben auf der rechten Seite noch Kategorien einf&uuml;gen. Das gelingt &uuml;ber die Benutzeroberfl&auml;che ganz einfach, indem Sie den Aufgaben jeweils eine neue Kategorie hinzuf&uuml;gen. Dazu w&auml;hlen Sie aus dem Kontextmen&uuml; einer der Aufgaben den Eintrag <b>Kategorisieren <\/b>und die jeweilige Kategorie aus (s. Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_002.png\" alt=\"Hinzuf&uuml;gen einer Kategorie von Hand\" width=\"500\" height=\"472,1707\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Hinzuf&uuml;gen einer Kategorie von Hand<\/span><\/b><\/p>\n<p>Mit einem Klick auf den Eintrag <b>Alle Kategorien <\/b>&ouml;ffnen Sie den Dialog aus Bild 3. Hier legen Sie mit einem Mausklick auf die Schaltfl&auml;che <b>Neu <\/b>weitere, benutzerdefinierte Kategorien an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_003.png\" alt=\"Anlegen einer neuen Kategorie\" width=\"425\" height=\"318,1335\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Anlegen einer neuen Kategorie<\/span><\/b><\/p>\n<p>Nachdem Sie die gew&uuml;nschten Kategorien angelegt und diese den Aufgaben zugewiesen haben, erhalten Sie das Bild aus Bild 4. Dies reicht uns allerdings noch nicht: Die Aufgaben sollen ja auch noch nach Kategorien gruppiert und m&ouml;glichst mit der Kategorie als Gruppen&uuml;berschrift dargestellt werden. Um dies zu erreichen, ist allerdings nur noch ein kleiner Schritt n&ouml;tig.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_004.png\" alt=\"Aufgaben mit zugeordneten Kategorien\" width=\"425\" height=\"325,9203\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Aufgaben mit zugeordneten Kategorien<\/span><\/b><\/p>\n<p>Dazu klicken Sie im Ribbon einfach auf den Eintrag <b>Auf-gaben-liste|Anordnung|Kategorien<\/b>. Dies blendet die Kategorien als &uuml;berschriften ein (s. Bild 5). Nun wollen wir die Kategorien nat&uuml;rlich nicht von Hand anlegen, sondern in einer Tabelle unserer Datenbank zur Projektzeiterfassung speichern und diese beim Start von Outlook dynamisch einlesen und anzeigen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_005.png\" alt=\"Einblenden der Kategorie&uuml;berschriften\" width=\"425\" height=\"361,2975\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Einblenden der Kategorie&uuml;berschriften<\/span><\/b><\/p>\n<h2>Speichern der Kategorien<\/h2>\n<p>Dazu wollen wir zun&auml;chst eine entsprechende Tabelle anlegen. Diese hei&szlig;t <b>tblKategorien <\/b>und sieht im Entwurf wie in Bild 6 aus. Das Feld <b>Kategorie <\/b>ist mit einem eindeutigen Index versehen, damit jeder Kategoriename nur einmal eingegeben werden kann. Die Kategorienummer soll gegebenenfalls dem Kategorienamen vorangestellt werden k&ouml;nnen, damit die gew&uuml;nschte Sortierung der Kategorien in der Aufgabenliste m&ouml;glich ist.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_006.png\" alt=\"Tabelle zum Speichern der Kategorien\" width=\"550\" height=\"369,6857\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Tabelle zum Speichern der Kategorien<\/span><\/b><\/p>\n<p>Das Feld <b>MaximaleElementzahl <\/b>nimmt die Anzahl der maximal in einer Kategorie enthaltenen Elemente aus. Dies ist einer der Kanban-Grunds&auml;tze: F&uuml;r bestimmte Bearbeitungsschritte soll man nur eine begrenzte Anzahl von Elementen vorsehen k&ouml;nnen. Damit verhindere ich beispielsweise, dass ich mehr als zwei Artikel gleichzeitig schreibe &#8211; oder an der Programmierung der Beispieldatenbanken von mehr als zwei Artikeln arbeite. Wenn man in Outlook mehr als die vorgebenene Anzahl Elemente zu einer Kategorie hinzuf&uuml;gt, soll dies eine entsprechende Meldung ausl&ouml;sen.<\/p>\n<p>Das Feld <b>Farbe <\/b>legt den Index der Farbe f&uuml;r die Kategorie fest. Das Feld <b>Standard <\/b>legt fest, welche Kategorie einer neu erstellten Aufgabe zugeordnet werden soll. Das gleich vorgestellte Formular zur Bearbeitung der Kategorien soll sicherstellen, dass nur eine Kategorie gleichzeitig als Standard einstellt werden kann.<\/p>\n<h2>Verwalten der Kategorien<\/h2>\n<p>F&uuml;r die Verwaltung der Kategorien erstellen wir ein kleines Access-Formular in der Datenbank zur Projektzeiterfassung. Dieses verwendet die Tabelle <b>tblKategorien <\/b>als Datenherkunft. Mit einem Listenfeld namens <b>lstKategorien <\/b>sollen die vorhandenen Eintr&auml;ge ausgew&auml;hlt werden k&ouml;nnen (s. Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_008.png\" alt=\"Dialog zum Verwalten der Kategorien in der Entwurfsansicht\" width=\"425\" height=\"438,6218\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Dialog zum Verwalten der Kategorien in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Das Listenfeld verwendet die Abfrage aus Bild 7 als Datensatzherkunft. Diese liefert in eckigen Klammern die Nummer der Kategorie plus den Kategorienamen, also etwa so: <b>[00] ToDo<\/b>. Zus&auml;tzlich sortiert sie die Datens&auml;tze nach dem Wert des Feldes <b>Kategorienummer<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_007.png\" alt=\"Abfrage f&uuml;r die Datensatzherkunft des Listenfeldes lstKategorien\" width=\"550\" height=\"278,1519\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Abfrage f&uuml;r die Datensatzherkunft des Listenfeldes lstKategorien<\/span><\/b><\/p>\n<p>Damit das Listenfeld nicht die gebundene Spalte mit dem Feld <b>KategorieID<\/b>, sondern nur das Feld <b>Kategoriename <\/b>der Abfrage anzeigt, stellen wir die Eigenschaft <b>Spaltenanzahl <\/b>auf den Wert <b>2 <\/b>und <b>Spaltenbreiten <\/b>auf <b>0 <\/b>ein.<\/p>\n<p>Das Formular zeigt, wie &uuml;blich, standardm&auml;&szlig;ig den ersten Datensatz der Datenherkunft an. Damit das Listenfeld den gleichen Eintrag markiert, legen Sie f&uuml;r das Ereignis <b>Beim Laden <\/b>des Formulars die folgende Ereignisprozedur an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     Me!lstKategorien = Me!KategorieID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Andersherum soll das Formular immer den aktuell im Listenfeld ausgew&auml;hlten Eintrag anzeigen. Dazu verwenden wir eine weitere Ereignisprozedur, die durch das Ereignis <b>Nach Aktualisierung <\/b>des Listenfeldes ausgel&ouml;st wird. Diese enth&auml;lt nur einen einzigen Befehl, der das Recordset des Formulars auf den Datensatz mit dem Wert im Feld <b>KategorieID <\/b>sucht, der gerade im Listenfeld markiert ist:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstKategorien_AfterUpdate()\r\n     Me.Recordset.FindFirst \"KategorieID = \" _\r\n         & Me!lstKategorien\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Nun soll der Benutzer nat&uuml;rlich auch neue Kategorien anlegen k&ouml;nnen. Dies erledigen wir &uuml;ber eine Schaltfl&auml;che namens <b>cmdNeu<\/b>, die folgende Ereignisprozedur ausl&ouml;st und so den Datensatzzeiger des Formulars auf einen neuen, leeren Datensatz verschiebt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNeu_Click()\r\n     DoCmd.GoToRecord Record:=acNewRec\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit der Benutzer nicht &uuml;ber das Formular von Datensatz zu Datensatz wechseln kann, sondern nur &uuml;ber die Auswahl eines Eintrags im Listenfeld, stellen Sie die Eigenschaft <b>Zyklus <\/b>des Formulars auf <b>Aktueller Datensatz <\/b>ein. Deshalb ben&ouml;tigen wir auch eine eigene Schaltfl&auml;che, damit der Benutzer einen neu hinzugef&uuml;gten Datensatz speichern kann, ohne anderweitig zu einem anderen Datensatz zu wechseln. Diese l&ouml;st die folgende Prozedur aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdSpeichern_Click()\r\n     RunCommand acCmdSaveRecord\r\n<span style=\"color:blue;\">End Sub<\/span> <\/pre>\n<p>Nun kann der Speichervorgang nat&uuml;rlich auch durch andere Aktionen ausgel&ouml;st werden, beispielsweise durch das Wechseln des Datensatzes &uuml;ber die Auswahl eines anderen Eintrags im Listenfeld oder auch durch das Schlie&szlig;en des Formulars. Dies fangen wir mit dem Ereignis <b>Nach Aktualisierung <\/b>ab, das wir wie folgt implementieren:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     Me!lstKategorien.Requery\r\n     Me!lstKategorien = Me!KategorieID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur aktualisiert die Datensatzherkunft des Listenfeldes und stellt dieses auf den aktuell im Formular ausgew&auml;hlten Datensatz ein. Schlie&szlig;lich wollen wir auch noch Datens&auml;tze l&ouml;schen k&ouml;nnen, was wir mit der Schaltfl&auml;che <b>cmdLoeschen<\/b> realisieren. Diese l&ouml;st folgende Prozedur aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdLoeschen_Click()\r\n     If IsNull(DLookup(\"AufgabeID\", \"tblAufgaben\", _\r\n             \"KategorieID = \" & Me!KategorieID)) Then\r\n         RunCommand acCmdDeleteRecord\r\n         Me!lstKategorien.Requery\r\n         Me!lstKategorien = Me!KategorieID\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Die Kategorie kann nicht gel&ouml;scht werden, da sie bereits Eintr&auml;ge enth&auml;lt.\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur pr&uuml;ft, ob die zu l&ouml;schende Kategorie bereits einer Aufgabe zugewiesen ist. Ist dies der Fall, wird der L&ouml;schvorgang nicht durchgef&uuml;hrt, sondern es erscheint eine entsprechende Meldung. Anderenfalls l&ouml;scht die Prozedur den aktuellen Datensatz, aktualisiert die Datensatzherkunft des Listenfeldes und markiert dort den aktuell im Formular angezeigten Datensatz. Das Formular sieht schlie&szlig;lich wie in Bild 9 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_009.png\" alt=\"Verwalten der Kategorien per Formular\" width=\"425\" height=\"413,0562\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Verwalten der Kategorien per Formular<\/span><\/b><\/p>\n<h2>Initialisieren der Kategorieansicht<\/h2>\n<p>Nun wollen wir daf&uuml;r sorgen, dass alle in der Tabelle gespeicherten Tabellen in Outlook vorhanden sind und mit den entsprechenden Farben angezeigt werden. Dazu ben&ouml;tigen wir eine Prozedur, die beim Starten von Outlook aufgerufen wird. Im Beitrag <b>Projektzeiterfassung mit Outlook und Access <\/b>haben Sie ja bereits die Ereignisprozedur <b>Application_Startup <\/b>kennen gelernt, die beim Start von Outlook automatisch ausgel&ouml;st wird. Dieser f&uuml;gen wir den Aufruf unserer kleinen Routine zum Kontrollieren und Hinzuf&uuml;gen der Kategorien hinzu:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Application_Startup()\r\n     ...\r\n     KategorienKontrollieren\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur <b>KategorienKontrollieren <\/b>selbst finden Sie im Modul <b>mdlKanban <\/b>(s. Listing 1). Die Prozedur verwendet ein <b>Recordset<\/b>-Objekt namens <b>rst<\/b>, um alle Datens&auml;tze der Tabelle <b>tblKategorien <\/b>zu durchlaufen. Die <b>Property Get<\/b>-Prozedur <b>CurrentDBC <\/b>aus dem Modul <b>mdlGlobal <\/b>liefert einen Verweis auf das <b>Database<\/b>-Objekt der Datenbank <b>Projektzeiterfassung.accdb<\/b>, deren Name in einer Konstanten im gleichen Modul verankert ist. Weiterhin f&uuml;llt die Prozedur das Objekt <b>objCategories <\/b>mit einer Liste der Kategorien des aktuellen <b>Namespace<\/b>-Objekts von Outlook, das die Funktion <b>GetMAPINamespace <\/b>liefert. Jede Kategorie wird in Outlook n&auml;mlich in einem eigenen <b>Category<\/b>-Objekt vorgehalten. Nun durchl&auml;uft die Prozedur in einer &auml;u&szlig;eren <b>Do While<\/b>-Schleife alle Datens&auml;tze der Tabelle <b>tblKategorien<\/b>, also alle Kategorien, die eigentlich in Outlook sichtbar sein sollten. Dabei stellt sie die Variablen <b>bolKategorie <\/b>und <b>lngFarbe <\/b>auf die Werte <b>False <\/b>und <b>0 <\/b>ein, um diese f&uuml;r den aktuellen Schleifendurchlauf zu initialisieren. Innerhalb der Schleife durchl&auml;uft sie dann alle <b>Category<\/b>-Objekte der Auflistung in <b>objCategories <\/b>und referenziert das aktuelle Objekt in der Variablen <b>objCategory<\/b>. Sollte der Name der Kategorie aus <b>objCategory.Name <\/b>mit dem aus den Feldern <b>Kategorienummer <\/b>und <b>Kategorie <\/b>zusammengesetzten Kategorienamen (etwa <b>01_Todo<\/b>) des aktuellen Datensatzes &uuml;bereinstimmen, ist die Kategorie bereits vorhanden. Die Prozedur stellt dann <b>bolKategorie <\/b>auf <b>True <\/b>ein und verl&auml;sst die <b>For<\/b>-Schleife.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>KategorienKontrollieren()\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>objCategory<span style=\"color:blue;\"> As <\/span>Outlook.Category\r\n     <span style=\"color:blue;\">Dim <\/span>objCategories<span style=\"color:blue;\"> As <\/span>Outlook.Categories\r\n     <span style=\"color:blue;\">Dim <\/span>bolKategorie<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngFarbe<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> rst = CurrentDBC.OpenRecordset(\"SELECT * FROM tblKategorien\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Set<\/span> objCategories = GetMAPINamespace.Categories\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         bolKategorie = <span style=\"color:blue;\">False<\/span>\r\n         lngFarbe = 0\r\n         For Each objCategory In objCategories\r\n             <span style=\"color:blue;\">If <\/span>objCategory.Name = rst!Kategorienummer & \"_\" & rst!Kategorie<span style=\"color:blue;\"> Then<\/span>\r\n                 bolKategorie = <span style=\"color:blue;\">True<\/span>\r\n                 <span style=\"color:blue;\">Exit For<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Next<\/span> objCategory\r\n         <span style=\"color:blue;\">If <\/span>bolKategorie = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">If <\/span>IsNull(rst!Farbe)<span style=\"color:blue;\"> Then<\/span>\r\n             rst.Edit\r\n             rst!Farbe = objCategory.Color\r\n             rst.Update\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(rst!Farbe)<span style=\"color:blue;\"> Then<\/span>\r\n                 lngFarbe = rst!Farbe\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objCategory = objCategories.Add(rst!Kategorienummer & \"_\" & rst!Kategorie, lngFarbe)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Pr&uuml;fen und Aktualisieren der Kategorien in Outlook<\/span><\/b><\/p>\n<p>Sollte der Name der Kategorie aus dem aktuellen Datensatz nicht in den Kategorien von Outlook gefunden werden, beh&auml;lt <b>bolKategorie <\/b>den Wert <b>False <\/b>bei.<\/p>\n<p>Im Falle des Wertes <b>True <\/b>pr&uuml;ft die Prozedur, ob das Feld <b>Farbe <\/b>des aktuellen Datensatzes gef&uuml;llt ist. Anderenfalls tr&auml;gt sie den Farbwert der Kategorie aus Outlook in das Feld ein und speichert die &auml;nderung. Das hei&szlig;t, dass Sie die Farben f&uuml;r die verschiedenen Kategorien nach dem Erstellen in Outlook einstellen k&ouml;nnen, diese werden dann beim n&auml;chsten Start von Outlook in die Tabelle <b>tblKategorien <\/b>&uuml;bertragen.<\/p>\n<p>Hat <b>bolKategorie <\/b>den Wert <b>False<\/b>, muss die Kategorie entsprechend der in der Tabelle gespeicherten Daten in Outlook angelegt werden. Dazu tr&auml;gt die Prozedur zun&auml;chst den Farbwert aus dem Feld <b>Farbe <\/b>in die Variable <b>lngFarbe <\/b>ein. Danach legt sie die Kategorie mit der <b>Add<\/b>-Methode der Auflistung <b>objCategories <\/b>in Outlook an. Wenn Sie nun den Dialog <b>Farbkategorien <\/b>&ouml;ffnen, erscheinen dort auch prompt die Eintr&auml;ge der Tabelle <b>tblKategorien<\/b> (s. Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_010.png\" alt=\"Die automatisch hinzugef&uuml;gten Kategorien\" width=\"425\" height=\"318,1335\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Die automatisch hinzugef&uuml;gten Kategorien<\/span><\/b><\/p>\n<h2>Kategorien in der Aufgabenliste anzeigen<\/h2>\n<p>Nun k&ouml;nnen Sie die hinzugef&uuml;gten Kategorien auch direkt f&uuml;r die Aufgaben in der Aufgabenliste ausw&auml;hlen. Die gew&auml;hlten Eintr&auml;ge werden dann auch direkt als &uuml;berschrift der vorhandenen Aufgaben angezeigt. Nun m&ouml;chten wir aber sp&auml;ter alle Kategorien sehen und die Aufgaben auch von einer Kategorie zur n&auml;chsten verschieben &#8211; in meinem Fall also beispielsweise einen Artikel von <b>01_L&ouml;sung programmieren <\/b>zu <b>02_Artikel schreiben<\/b>. Dies gelingt dann aber nur, indem man die Kategorie f&uuml;r die jeweilige Aufgabe einzeln einstellt. Viel sch&ouml;ner w&auml;re es doch, wenn man gleich alle Kategorien sehen und die Aufgaben von Kategorie zu Kategorie ziehen k&ouml;nnte! Dies s&auml;he dann etwa wie in Bild 11 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_011.png\" alt=\"Alle Kategorien erscheinen in der Aufgabenliste\" width=\"350\" height=\"509,4535\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Alle Kategorien erscheinen in der Aufgabenliste<\/span><\/b><\/p>\n<p>Hierf&uuml;r ist allerdings ein gewisser Mehraufwand n&ouml;tig, den wir nachfolgend beschreiben. Dabei gibt es zwei wichtige Elemente:<\/p>\n<ul>\n<li>Wir m&uuml;ssen f&uuml;r jede Kategorie, die keine Aufgaben enth&auml;lt, einen Platzhalter mit dem Text <b>.\/. <\/b>anlegen, damit die Kategorie dennoch erscheint.<\/li>\n<li>Wir ben&ouml;tigen f&uuml;r jede Kategorie eine Wrapperklasse, die ein Ereignis implementiert, das auf das Verschieben einer Aufgabe reagiert und die Platzhalter aktualisiert. Wenn also beispielsweise eine Aufgabe zu einer Kategorie hinzugef&uuml;gt wird, die zuvor nur einen Platzhalter enthielt, muss der Platzhalter entfernt werden. Wird die letzte Aufgabe aus einer Kategorie entfernt, muss ein Platzhalter angelegt werden, damit die Kategorie dennoch sichtbar bleibt.<\/li>\n<\/ul>\n<p>Die wichtigste Prozedur hei&szlig;t <b>KategoriePlatzhalter<\/b> und sieht wie in Listing 2 aus. Sie wird einmal beim Starten von Outlook ausgel&ouml;st und dann immer beim Verschieben einer Aufgabe von einer Kategorie zur n&auml;chsten oder auch beim Hinzuf&uuml;gen einer neuen Aufgabe &#8211; dazu sp&auml;ter mehr.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>KategoriePlatzhalter()\r\n     <span style=\"color:blue;\">Dim <\/span>objCategory<span style=\"color:blue;\"> As <\/span>Outlook.Category\r\n     <span style=\"color:blue;\">Dim <\/span>objTaskItem<span style=\"color:blue;\"> As <\/span>Outlook.TaskItem\r\n     <span style=\"color:blue;\">Dim <\/span>objMAPI<span style=\"color:blue;\"> As <\/span>Outlook.NameSpace\r\n     <span style=\"color:blue;\">Dim <\/span>objTaskfolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     <span style=\"color:blue;\">Dim <\/span>colCategoryWrappers<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objCategoryWrapper<span style=\"color:blue;\"> As <\/span>clsCategoryWrapper\r\n     <span style=\"color:blue;\">Set<\/span> colCategoryWrappers = <span style=\"color:blue;\">New<\/span> Collection\r\n     <span style=\"color:blue;\">Set<\/span> objMAPI = Application.GetNamespace(\"MAPI\")\r\n     <span style=\"color:blue;\">Set<\/span> objTaskfolder = objMAPI.GetDefaultFolder(olFolderTasks)\r\n     For Each objCategory In Application.GetNamespace(\"MAPI\").Categories\r\n         <span style=\"color:blue;\">If <\/span>IsNumeric(<span style=\"color:blue;\">Left<\/span>(objCategory.Name, 2))<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objCategoryWrapper = <span style=\"color:blue;\">New<\/span> clsCategoryWrapper\r\n             <span style=\"color:blue;\">With<\/span> objCategoryWrapper\r\n                 .CategoryName = objCategory.Name\r\n             End <span style=\"color:blue;\">With<\/span>\r\n             colCategoryWrappers.Add objCategoryWrapper, objCategory.Name\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objCategory\r\n     AufgabenDurchlaufenRek objTaskfolder, colCategoryWrappers\r\n     For Each objCategoryWrapper In colCategoryWrappers\r\n         <span style=\"color:blue;\">If <\/span>objCategoryWrapper.ElementCount = 0<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">If <\/span>objCategoryWrapper.PlaceholderCount = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">Set<\/span> objTaskItem = Application.CreateItem(olTaskItem)\r\n                 <span style=\"color:blue;\">With<\/span> objTaskItem\r\n                     .Subject = \".\/.\"\r\n                     .Categories = objCategoryWrapper.CategoryName\r\n                     .Save\r\n                 End <span style=\"color:blue;\">With<\/span>\r\n             <span style=\"color:blue;\">Else<\/span>If objCategoryWrapper.PlaceholderCount &gt; 1 Then\r\n                 For i = objCategoryWrapper.Items.Count To 1 Step -1\r\n                     <span style=\"color:blue;\">If <\/span>objCategoryWrapper.Items(i).Subject = \".\/.\"<span style=\"color:blue;\"> Then<\/span>\r\n                         <span style=\"color:blue;\">Set<\/span> objTaskItem = objMAPI.GetItemFromID(objCategoryWrapper.Items(i).EntryID)\r\n                         objTaskItem.Delete\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">Next<\/span> i\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             For i = objCategoryWrapper.Items.Count To 1 Step -1\r\n                 <span style=\"color:blue;\">If <\/span>objCategoryWrapper.Items(i).Subject = \".\/.\"<span style=\"color:blue;\"> Then<\/span>\r\n                     <span style=\"color:blue;\">Set<\/span> objTaskItem = objMAPI.GetItemFromID(objCategoryWrapper.Items(i).EntryID)\r\n                     objTaskItem.Delete\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Next<\/span> i\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> objCategoryWrapper\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Sichtbarmachen aller Kategorien in Outlook durch Hinzuf&uuml;gen einer Platzhalter-Aufgabe f&uuml;r die leeren Kategorien<\/span><\/b><\/p>\n<p>Die Prozedur <b>KategoriePlatzhalter <\/b>legt dabei nicht nur die Platzhalter an oder entfernt diese, sondern sie erstellt auch f&uuml;r jede Kategorie ein Objekt des Typs <b>clsCategoryWrapper<\/b> und speichert dieses in einer Collection.<\/p>\n<p>Die Prozedur initialisiert zun&auml;chst die Collection namens <b>colCategoryWrappers<\/b>, welche die noch zu erstellenden <b>clsCategoryWrapper<\/b>-Objekte aufnehmen soll. Dann f&uuml;llt sie die Objektvariable <b>objMAPI <\/b>mit einem Verweis auf den MAPI-Namespace und ermittelt den Aufgabenordner, den sie mit der Variablen <b>objTaskfolder <\/b>referenziert. Dann durchl&auml;uft sie in einer <b>For Each<\/b>-Schleife alle <b>Category<\/b>-Objekte der <b>Categories<\/b>-Auflistung.<\/p>\n<p>Aufgrund der ersten beiden Zeichen des Namens der Kategorie pr&uuml;ft die Prozedur, ob es sich um eine der aus der Tabelle <b>tblKategorien <\/b>hinzugef&uuml;gten Kategorien handelt &#8211; diese hei&szlig;en ja beispielsweise <b>01_ToDo<\/b>. F&uuml;r jede dieser Kategorien erstellt die Prozedur ein neues Objekt auf Basis der Klasse <b>clsCategoryWrapper <\/b>und weist der Eigenschaft <b>CategoryName <\/b>dieser Klasse den Namen der Kategorie zu, also wiederum beispielsweise <b>01_ToDo<\/b>. Danach f&uuml;gt sie dieses Objekt der Collection <b>colCategoryWrappers <\/b>zu und gibt den Namen der Kategorie als <b>Key <\/b>an.<\/p>\n<p>Nun kommt ein wichtiger Schritt: Die rekursiv definierte Funktion <b>AufgabenDurchlaufenRek <\/b>durchl&auml;uft alle Aufgaben innerhalb des Aufgabenordners und seiner Unterordner und pr&uuml;ft, ob die enthaltenen Aufgaben einer der Kategorien der Collection <b>colCategoryWrapper <\/b>zugeordnet sind. Falls ja, werden weitere Objekte auf Basis der Klasse <b>clsCategoryItem <\/b>erstellt und dem aktuellen Objekt <b>objCategoryWrapper <\/b>in einer Auflistung hinzugef&uuml;gt. Au&szlig;erdem aktualisiert sie dabei die &uuml;ber zwei Eigenschaften namens <b>ElementCount <\/b>und <b>PlaceholderCount <\/b>verf&uuml;gbaren Anzahlen der enthaltenen tats&auml;chlichen Aufgaben-Elemente und der Platzhalter-Elemente &#8211; mehr dazu weiter unten.<\/p>\n<p>Das Ergebnis des Aufrufs der Funktion <b>AufgabenDurchlaufenRek <\/b>ist jedenfalls, dass jedes Objekt <b>objCategoryWrapper <\/b>der Collection <b>colCategoryWrappers <\/b>nun &uuml;ber entsprechende Eigenschaften die Anzahl der enthaltenen Aufgaben und der enthaltenen Platzhalter liefern kann. Dies macht sich die Prozedur in einer <b>For Each<\/b>-Schleife &uuml;ber alle <b>objCategoryWrapper<\/b>-Objekt zunutze. Hier pr&uuml;ft sie zun&auml;chst, ob die Eigenschaft <b>ElementCount <\/b>des aktuellen Objekts <b>0 <\/b>ist. Dies bedeutet, dass die Kategorie keine Aufgabe enth&auml;lt. Also pr&uuml;ft die Prozedur danach, ob die Kategorie auch keinen Platzhalter enth&auml;lt &#8211; daf&uuml;r muss  die Eigenschaft <b>PlaceholderCount <\/b>ebenfalls den Wert <b>0 <\/b>liefern. Enth&auml;lt die Kategorie keine Aufgaben und auch keine Platzhalter-Aufgabe mit dem Text <b>.\/.<\/b>, dann wird sie nicht in der Aufgabenliste angezeigt. Das soll sie aber, damit wir dieser Kategorie Aufgaben per Drag and Drop zuweisen k&ouml;nnen. Also f&uuml;gt die Prozedur nun eine Platzhalter-Aufgabe mit dem Wert <b>.\/. <\/b>f&uuml;r die Eigenschaft <b>Subject <\/b>hinzu. Die Eigenschaft <b>Categories<\/b>, welche die Namen der zugeh&ouml;rigen Kategorien als Text aufnimmt, f&uuml;llt die Prozedur mit dem Namen der aktuell untersuchten Kategorie und speichert die Aufgabe.<\/p>\n<p>Der <b>ElseIf<\/b>-Teil der <b>If<\/b>-Bedingung mit der Pr&uuml;fung auf den Wert <b>PlaceholderCount <\/b>pr&uuml;ft, ob die Kategorie mehr als eine Platzhalteraufgabe mit dem Text <b>.\/. <\/b>enth&auml;lt. Ist dies der Fall, durchl&auml;uft sie alle Aufgaben, die per Wrapper in der Auflistung <b>Items <\/b>des Objekts <b>objCategoryWrapper <\/b>gespeichert sind, r&uuml;ckw&auml;rts und l&ouml;scht die entsprechenden Elemente aus der Aufgabenliste.<\/p>\n<p>Wir haben noch nicht den <b>Else<\/b>-Teil der <b>If<\/b>-Abfrage f&uuml;r die Anzahl der enthaltenen Aufgaben-Elemente betrachtet. Dieser durchl&auml;uft ebenfalls alle Elemente, die in der Auflistung <b>Items <\/b>des Objekts <b>objCategoryWrapper <\/b>gespeichert sind, und l&ouml;scht solche Aufgaben, deren Eigenschaft <b>Subject <\/b>den Wert <b>.\/.<\/b> enth&auml;lt &#8211; also die Platzhalter, die ja aufgrund des Vorhandenseins echter Aufgaben nicht mehr ben&ouml;tigt werden.<\/p>\n<h2>Aufgaben und Platzhalter einer Kategorie ermitteln<\/h2>\n<p>Leider liefern die <b>Category<\/b>-Objekte von Outlook keine Auflistung der enthaltenen Elemente, in diesem Fall also der Aufgaben, die wir einer Kategorie zugeordnet haben. Daher r&uuml;hrt auch die etwas kompliziert anmutende Vorgehensweise zum Ermitteln der Anzahl der Aufgaben einer Kategorie (und der Aufgaben mit dem Betreff <b>.\/.<\/b>). Dies erledigt die Funktion <b>AufgabenDurchlaufenRek <\/b>aus Listing 3. Sie erwartet einen Verweis auf den zu untersuchenden Outlook-Folder sowie die Collection <b>colCategoryWrappers<\/b>. Diese enth&auml;lt ja f&uuml;r jede Kategorie ein Element des Typs <b>clsCategoryWrapper<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AufgabenDurchlaufenRek(objParent<span style=\"color:blue;\"> As <\/span>Outlook.Folder, colCategoryWrappers<span style=\"color:blue;\"> As <\/span>Collection)\r\n     <span style=\"color:blue;\">Dim <\/span>objTaskItem<span style=\"color:blue;\"> As <\/span>Outlook.TaskItem\r\n     <span style=\"color:blue;\">Dim <\/span>objTaskfolder<span style=\"color:blue;\"> As <\/span>Outlook.Folder\r\n     <span style=\"color:blue;\">Dim <\/span>objCategoryWrapper<span style=\"color:blue;\"> As <\/span>clsCategoryWrapper\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     For i = objParent.Items.Count To 1 Step -1\r\n         <span style=\"color:blue;\">Set<\/span> objTaskItem = objParent.Items(i)\r\n         <span style=\"color:blue;\">If <\/span>objTaskItem.Complete = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">If <\/span>IsNumeric(<span style=\"color:blue;\">Left<\/span>(objTaskItem.Categories, 2))<span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">Set<\/span> objCategoryWrapper = colCategoryWrappers.Item(objTaskItem.Categories)\r\n                 <span style=\"color:blue;\">With<\/span> objCategoryWrapper\r\n                     .AddItem objTaskItem\r\n                     <span style=\"color:blue;\">If <\/span>objTaskItem.Subject = \".\/.\"<span style=\"color:blue;\"> Then<\/span>\r\n                         .PlaceholderCount = .PlaceholderCount + 1\r\n                     <span style=\"color:blue;\">Else<\/span>\r\n                         .ElementCount = .ElementCount + 1\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 End <span style=\"color:blue;\">With<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n     For Each objTaskfolder In objParent.Folders\r\n         AufgabenDurchlaufenRek objTaskfolder, colCategoryWrappers\r\n     <span style=\"color:blue;\">Next<\/span> objTaskfolder\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Aufgaben durchlaufen und pr&uuml;fen, in welcher Kategorie diese sich befinden<\/span><\/b><\/p>\n<p>Die Funktion durchl&auml;uft alle Elemente der <b>Items<\/b>-Auflistung des Aufgabenordners aus <b>objParent<\/b> in umgekehrter Reihenfolge und referenziert das aktuelle Objekt mit der Variablen <b>objTaskItem<\/b>. Sofern dieses nicht als erledigt gekennzeichnet ist (<b>Complete = True<\/b>), pr&uuml;ft die Funktion, ob es sich bei der in der Eigenschaft <b>Categories<\/b> gespeicherten Kategorie um eine der aus der Datenbank eingelesene Kategorie handelt (diese beginnen ja, wie schon beschrieben, mit zwei Ziffern). In diesem Fall f&uuml;gt die Funktion der Auflistung <b>Items <\/b>des aktuellen <b>clsCategoryWrapper<\/b>-Objekts einen Verweis auf die Aufgabe aus <b>objTaskItem <\/b>hinzu.<\/p>\n<p>Wenn der Betreff der Aufgabe den Wert <b>.\/.<\/b> enth&auml;lt, erh&ouml;ht die Funktion den Wert der Eigenschaft <b>PlaceholderCount <\/b>um <b>1<\/b>, anderenfalls den Wert der Eigenschaft <b>ElementCount<\/b>.<\/p>\n<p>Wenn auf diese Weise alle Aufgaben-Elemente des aktuellen Ordners durchlaufen wurden, ruft sich die Funktion f&uuml;r jeden enthaltenen Unterordner erneut auf. Dadurch werden alle Aufgaben, die einer der Kategorien zugeordnet sein k&ouml;nnten, erfasst und wir erhalten f&uuml;r jede Kategorie die genaue Anzahl der tats&auml;chlichen Aufgaben und der Platzhalter-Aufgaben.<\/p>\n<h2>Die Klasse clsCategoryWrapper<\/h2>\n<p>Die Klasse, in der wir die Informationen &uuml;ber jede der aus der Tabelle <b>tblKategorien <\/b>hinzugef&uuml;gten Kategorie speichern, enth&auml;lt eine Collection namens <b>colItems<\/b>, um die Aufgaben-Elemente zu speichern.<\/p>\n<p>Au&szlig;erdem speichert sie in der Variablen <b>m_Name <\/b>den Namen der Kategorie, in <b>m_ElementCount <\/b>die Anzahl der Aufgaben und in <b>m_PlaceholderCount <\/b>die Anzahl der Platzhalter:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>m_Name<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Private <\/span>m_ElementCount<span style=\"color:blue;\"> As Integer<\/span>\r\n<span style=\"color:blue;\">Private <\/span>m_PlaceholderCount<span style=\"color:blue;\"> As Integer<\/span>\r\n<span style=\"color:blue;\">Private <\/span>colItems<span style=\"color:blue;\"> As <\/span>Collection<\/pre>\n<p>Die Ereignisprozedur <b>Class_Initialize <\/b>initialisiert die Collection:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Class_Initialize()\r\n     <span style=\"color:blue;\">Set<\/span> colItems = <span style=\"color:blue;\">New<\/span> Collection\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die folgenden <b>Let<\/b>&#8211; und <b>Get<\/b>-Prozeduren dienen dem Zuweisen und Auslesen der oben beschriebenen Variablen:<\/p>\n<pre><span style=\"color:blue;\">Public Property Let <\/span>CategoryName(strName<span style=\"color:blue;\"> As String<\/span>)\r\n     m_Name = strName\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>CategoryName()<span style=\"color:blue;\"> As String<\/span>\r\n     CategoryName = m_Name\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Let <\/span>ElementCount(intCount<span style=\"color:blue;\"> As Integer<\/span>)\r\n     m_ElementCount = intCount\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>ElementCount()<span style=\"color:blue;\"> As Integer<\/span>\r\n     ElementCount = m_ElementCount\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Let <\/span>PlaceholderCount(intCount<span style=\"color:blue;\"> As Integer<\/span>)\r\n     m_PlaceholderCount = intCount\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>PlaceholderCount()<span style=\"color:blue;\"> As Integer<\/span>\r\n     PlaceholderCount = m_PlaceholderCount\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p>Fehlt noch die Methode <b>AddItem<\/b>, mit der die Funktion <b>AufgabenDurchlaufenRek <\/b>die einzelnen Aufgaben zur Collection <b>colItems <\/b>hinzuf&uuml;gen:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AddItem(objCategoryItem<span style=\"color:blue;\"> As <\/span>Outlook.TaskItem)\r\n     colItems.Add objCategoryItem, objCategoryItem.EntryID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Eigenschaft <b>Items <\/b>schlie&szlig;lich bietet Zugriff auf die Collection <b>colItems<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Property Get <\/span>Items()<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Set<\/span> Items = colItems\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<h2>Weitere &auml;nderungen<\/h2>\n<p>Damit die Prozedur <b>KategoriePlatzhalter <\/b>beim Start von Outlook aufgerufen wird, f&uuml;gen wir den Aufruf genau wie den Aufruf der Routine <b>KategorienKontrollieren<\/b> der Prozedur <b>Application_Startup <\/b>hinzu:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Application_Startup()\r\n     ...\r\n     KategorienKontrollieren\r\n     KategoriePlatzhalter\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>T&auml;tigkeiten um Kategorie erg&auml;nzen<\/h2>\n<p>Wenn Sie eine Aufgabe in den Kalender ziehen, wird daraus ja ein Termin beziehungsweise eine T&auml;tigkeit. Diese enth&auml;lt in der bisherigen Fassung der Projektzeitverwaltung nur den Titel der Aufgabe.<\/p>\n<p>Wenn Sie zus&auml;tzlich noch die Kategorie hinzuf&uuml;gen wollen, um sp&auml;ter betrachten zu k&ouml;nnen, welche Phasen einer Aufgabe wie lange gedauert haben, k&ouml;nnen Sie ganz einfach die Kategorie zur Bezeichnung der Aufgabe hinzuf&uuml;gen.<\/p>\n<p>Dazu &auml;ndern Sie lediglich eine Zeile in der Ereignisprozedur <b>objAppointments_ItemAdd<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objAppointments_ItemAdd(ByVal Item<span style=\"color:blue;\"> As Object<\/span>)\r\n     ...\r\n     ''Raus:\r\n                     .Subject = .Subject \r\n     ''Rein:\r\n                     .Subject = .Subject & \"|\" & .Categories \r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>In der Klasse <b>clsTasks <\/b>sind ebenfalls kleinere &auml;nderungen n&ouml;tig. Die Methode <b>mProject_BeforeItemMove <\/b>erweitern Sie wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>mProject_BeforeItemMove(ByVal Item<span style=\"color:blue;\"> As Object<\/span>, &micro;           ByVal MoveTo<span style=\"color:blue;\"> As <\/span>MAPIFolder, Cancel<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     ...\r\n         ''ID des Zielordners ermitteln\r\n         ''Rein:\r\n         If <span style=\"color:blue;\">Not<\/span> MoveTo.Name = GetOutlook.Session. _\r\n                 GetDefaultFolder(olFolderToDo).Name Then\r\n             lngProjectID = _\r\n                 GetID(MoveTo.Description, \"project\")\r\n             ...\r\n         ''Rein:\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         ...\r\n                 CurrentDBC.Execute strSQL\r\n             ''rein:\r\n             <span style=\"color:blue;\">Case <\/span>GetOutlook.Session. _\r\n                 GetDefaultFolder(olFolderToDo).Name\r\n          ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Ereignisprozedur <b>mTasks_ItemAdd <\/b>erweitern Sie um eine einzige Anweisung, welche die Standardkategorie f&uuml;r neue Aufgaben setzt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>mTasks_ItemAdd(ByVal Item<span style=\"color:blue;\"> As Object<\/span>)\r\n     ...\r\n     <span style=\"color:blue;\">Dim <\/span>strStandardkategorie<span style=\"color:blue;\"> As String<\/span>\r\n     ...\r\n     strStandardkategorie = Format(dbLookup(CurrentDBC, _\r\n         \"Kategorienummer\", \"tblKategorien\", _\r\n         \"Standard = True\"), \"00\")\r\n     strStandardkategorie = strStandardkategorie & \"_\" _\r\n         & dbLookup(CurrentDBC, \"Kategorie\", _\r\n         \"tblKategorien\", \"Standard = True\")\r\n     objTask.Categories = strStandardkategorie\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Au&szlig;erdem soll beim &auml;ndern einer Aufgabe, also auch beim Verschieben in eine andere Kategorie, die Prozedur zum Einstellen der Platzhalter f&uuml;r die Kategorien aufgerufen werden.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>mTasks_ItemChange(ByVal Item<span style=\"color:blue;\"> As Object<\/span>)\r\n     ...\r\n     KategoriePlatzhalter\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die vollst&auml;ndige ge&auml;nderte Version der Module und Klassen finden Sie in den Beispieldaten.<\/p>\n<h2>L&ouml;sung in Outlook integrieren<\/h2>\n<p>Um die L&ouml;sung in Outlook zu integrieren, m&uuml;ssen Sie lediglich die folgenden Dateien des Downloads zu diesem Beitrag in Outlook importieren:<\/p>\n<ul>\n<li><b>clsCategoryItem.cls<\/b><\/li>\n<li><b>clsCategoryWrapper.cls<\/b><\/li>\n<li><b>clsTasks.cls<\/b><\/li>\n<li><b>mdlGlobal.bas<\/b><\/li>\n<li><b>mdlKanban.bas<\/b><\/li>\n<li><b>mdlOutlook.bas<\/b><\/li>\n<li><b>ThisOutlookSession.cls<\/b><\/li>\n<\/ul>\n<p>Dazu &ouml;ffnen Sie zun&auml;chst Outlook und dann den VBA-Editor mit dem Outlook-VBA-Projekt mit der Tastenkombination <b>Alt + F11<\/b>. Dann &ouml;ffnen Sie den Windows Explorer so, dass er neben dem VBA-Editor angezeigt wird, und navigieren zum Speicherort der heruntergeladenen Dateien. Markieren Sie die oben aufgef&uuml;hrten Dateien und ziehen Sie diese dann in den Projekt-Explorer.<\/p>\n<p>Das vollst&auml;ndige VBA-Projekt sollte anschlie&szlig;end wie in Bild 12 aussehen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_1017_012.png\" alt=\"Ben&ouml;tigte Module f&uuml;r die L&ouml;sung inklusive Projektzeiterfassung\" width=\"425\" height=\"241,9231\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Ben&ouml;tigte Module f&uuml;r die L&ouml;sung inklusive Projektzeiterfassung<\/span><\/b><\/p>\n<p>Der Download enth&auml;lt auch die Datenbankdatei <b>Projektzeiterfassung.accdb<\/b>. Diese speichern Sie in dem von Ihnen gew&uuml;nschten Verzeichnis. Anschlie&szlig;end passen Sie im Modul <b>mdlGlobal <\/b>den Pfad zu dieser Datei an &#8211; und zwar in der folgenden Zeile, die Sie ganz oben im Modul finden:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>Const cStrDB<span style=\"color:blue;\"> As String<\/span> =  \"C:\\...\\Projektzeiterfassung.accdb\"<\/pre>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Sie haben zu der bestehenden Projektzeiterfassung noch weitere Funktionen hinzugef&uuml;gt. Diese dienen im Wesentlichen dazu, die Aufgaben in verschiedene Kategorien einzuordnen. Die Kategorien entsprechen dabei den einzelnen Schritten, die jede Aufgabe durchlaufen soll. Auf diese Weise sollen immer nur wenige Aufgaben gleichzeitig bearbeitet werden.<\/p>\n<p>In einem weiteren Artikel namens <b>Projektzeitauswertung <\/b>(<b>www.access-im-unternehmen.de\/1018<\/b>) zeigen wir, wie Sie die mit der Projektzeiterfassung &uuml;ber Outlook erfassten und in einer Access-Datenbank gespeicherten Daten auswerten k&ouml;nnen &#8211; unabh&auml;ngig davon, ob Sie die hier vorgestellten Kanban-Features nutzen oder nicht.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>mdlKanban.bas<\/p>\n<p>clsCategoryItem.cls<\/p>\n<p>clsCategoryWrapper.cls<\/p>\n<p>Projektzeiterfassung.accdb<\/p>\n<p>ThisOutlookSession.cls<\/p>\n<p>mdlOutlook.bas<\/p>\n<p>mdlGlobal.bas<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{9B7E3248-95B7-41D3-89E0-763EA083FB36}\/aiu_1017.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Haben Sie auch manchmal den Eindruck, dass Sie zuviele Projekte gleichzeitig beackener und den &Uuml;berblick verlieren k&ouml;nnten Mir passierte das regelm&auml;&szlig;ig. Bis ich &uuml;ber Kanban gestolpert bin und Teile des Konzepts in meine eigenen Abl&auml;ufe eingebaut habe. Kanban soll durch eine Visualisierung der aktuellen Projekte und ihres Fortschritts eine bessere &Uuml;bersicht bieten und vor allem die Anzahl der gleichzeitig begonnenen Projekte begrenzen. Dies baue ich in meine langj&auml;hrige Praxis zur Zeiterfassung mit Outlook und Access ein. Wie das gelingt, zeigt der vorliegende 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":[66012016,662016,44000027],"tags":[],"class_list":["post-55001017","post","type-post","status-publish","format-standard","hentry","category-66012016","category-662016","category-Loesungen"],"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>Kanban mit Outlook und Access - 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\/Kanban_mit_Outlook_und_Access\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kanban mit Outlook und Access\" \/>\n<meta property=\"og:description\" content=\"Haben Sie auch manchmal den Eindruck, dass Sie zuviele Projekte gleichzeitig beackener und den &Uuml;berblick verlieren k&ouml;nnten Mir passierte das regelm&auml;&szlig;ig. Bis ich &uuml;ber Kanban gestolpert bin und Teile des Konzepts in meine eigenen Abl&auml;ufe eingebaut habe. Kanban soll durch eine Visualisierung der aktuellen Projekte und ihres Fortschritts eine bessere &Uuml;bersicht bieten und vor allem die Anzahl der gleichzeitig begonnenen Projekte begrenzen. Dies baue ich in meine langj&auml;hrige Praxis zur Zeiterfassung mit Outlook und Access ein. Wie das gelingt, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T19:03:56+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/b3be90f93f4f474eae00d76cea9e48b3\" \/>\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=\"22\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Kanban mit Outlook und Access\",\"datePublished\":\"2020-05-22T19:03:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/\"},\"wordCount\":3704,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b3be90f93f4f474eae00d76cea9e48b3\",\"articleSection\":[\"1\\\/2016\",\"2016\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/\",\"name\":\"Kanban mit Outlook und Access - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b3be90f93f4f474eae00d76cea9e48b3\",\"datePublished\":\"2020-05-22T19:03:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b3be90f93f4f474eae00d76cea9e48b3\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b3be90f93f4f474eae00d76cea9e48b3\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kanban_mit_Outlook_und_Access\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kanban mit Outlook und Access\"}]},{\"@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":"Kanban mit Outlook und Access - 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\/Kanban_mit_Outlook_und_Access\/","og_locale":"de_DE","og_type":"article","og_title":"Kanban mit Outlook und Access","og_description":"Haben Sie auch manchmal den Eindruck, dass Sie zuviele Projekte gleichzeitig beackener und den &Uuml;berblick verlieren k&ouml;nnten Mir passierte das regelm&auml;&szlig;ig. Bis ich &uuml;ber Kanban gestolpert bin und Teile des Konzepts in meine eigenen Abl&auml;ufe eingebaut habe. Kanban soll durch eine Visualisierung der aktuellen Projekte und ihres Fortschritts eine bessere &Uuml;bersicht bieten und vor allem die Anzahl der gleichzeitig begonnenen Projekte begrenzen. Dies baue ich in meine langj&auml;hrige Praxis zur Zeiterfassung mit Outlook und Access ein. Wie das gelingt, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T19:03:56+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/b3be90f93f4f474eae00d76cea9e48b3","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"22\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Kanban mit Outlook und Access","datePublished":"2020-05-22T19:03:56+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/"},"wordCount":3704,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/b3be90f93f4f474eae00d76cea9e48b3","articleSection":["1\/2016","2016","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/","url":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/","name":"Kanban mit Outlook und Access - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/b3be90f93f4f474eae00d76cea9e48b3","datePublished":"2020-05-22T19:03:56+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/b3be90f93f4f474eae00d76cea9e48b3","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/b3be90f93f4f474eae00d76cea9e48b3"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Kanban_mit_Outlook_und_Access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Kanban mit Outlook und Access"}]},{"@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\/55001017","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=55001017"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001017\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001017"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001017"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001017"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}