{"id":55000432,"date":"2024-06-01T00:00:00","date_gmt":"2024-08-07T10:19:30","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=432"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"To_Do_mit_VBA_und_Power_Automate_steuern","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/","title":{"rendered":"To Do mit VBA und Power Automate steuern"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/d0e758bb3e3f4607b443496ec53aa2cf\" width=\"1\" height=\"1\" alt=\"\"><b>In einem weiteren Artikel namens &#8220;To Do-Aufgabe mit Power Automate und VBA anlegen&#8221; (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA &uuml;ber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt &#8211; das Anlegen einer Aufgabe f&uuml;r eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n&auml;mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k&ouml;nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf&uuml;gen. Au&szlig;erdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l&ouml;schen k&ouml;nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l&ouml;schen k&ouml;nnen. Es gibt viel zu tun!<\/b><\/p>\n<p>Wir starten direkt dort, wo wir im oben genannten Artikel aufgeh&ouml;rt haben, n&auml;mlich beim Anlegen einer Aufgabe. In dem dort verwendeten Code haben wir beispielsweise noch nicht die Liste dynamisch angegeben, in die wir die neue Aufgabe &uuml;bertragen wollen. Wir konnten diese nur aus den vorhandenen Listen ausw&auml;hlen, was wir aber gern direkt von der VBA-Anwendung aus erledigen w&uuml;rden. Dazu m&uuml;ssen wir die Listen und ihre Eigenschaften ausw&auml;hlen, was wir nun erledigen.<\/p>\n<h2>Neuen Flow anlegen<\/h2>\n<p>Dazu legen wir einen neuen Flow mit der Vorlage <b>Sofortiger Cloud-Flow <\/b>(siehe Bild 1) und dem Typ <b>Beim Empfang einer HTTP-Anforderung <\/b>an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_001.png\" alt=\"Anlegen eines sofortigen Cloud-Flows\" width=\"499,6267\" height=\"375,5756\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Anlegen eines sofortigen Cloud-Flows<\/span><\/b><\/p>\n<p>Hier brauchen wir nichts weiter festzulegen &#8211; wir wollen alle Listen von To Do abfragen, dazu ben&ouml;tigen wir keine Requestparameter. Danach f&uuml;gen wir mit einem Klick auf das Plus-Zeichen und anschlie&szlig;ender Auswahl von Aktion hinzuf&uuml;gen die Aktion zum Abfragen der To Do-Listen hinzu (siehe Bild 2). Hier sehen wir bereits das Ergebnis.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_002.png\" alt=\"Hinzuf&uuml;gen einer Aktion\" width=\"374,6267\" height=\"330,3047\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Hinzuf&uuml;gen einer Aktion<\/span><\/b><\/p>\n<p>Vorher w&auml;hlen wir jedoch noch aus dem Bereich <b>Eine Aktion hinzuf&uuml;gen <\/b>die gew&uuml;nschte Aktion hinzu. Dazu geben wir als Suchbegriff <b>Aufgabe <\/b>ein und scrollen dann nach unten, bis wir den Connector <b>Microsoft To-Do <\/b>finden. Hier klicken wir auf <b>Mehr anzeigen <\/b>und finden alle Aktionen f&uuml;r Microsoft To-Do vor (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_003.png\" alt=\"Alle Microsoft To-Do-Aktionen\" width=\"474,6267\" height=\"530,2\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Alle Microsoft To-Do-Aktionen<\/span><\/b><\/p>\n<p>Hier w&auml;hlen wir den Eintrag <b>Alle Aufgabenlisten auflisten <\/b>aus. Dessen Eigenschaften erscheinen nun auf der linken Seite. Auf der Seite Parameter erhalten wir wie bereits angedeutet den Hinweis, dass keine zus&auml;tzlichen Informationen n&ouml;tig sind. Im unteren Bereich sollten wir, wenn wir bereits die Schritte aus dem eingangs erw&auml;hnten Artikel ausgef&uuml;hrt haben, die Information vorfinden, dass wir bereits mit Microsoft To-Do verbunden sind. Wir brauchen auch bei diesem Schritt nichts weiter zu tun (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_004.png\" alt=\"Einstellungen f&uuml;r die neue Aktion\" width=\"474,6267\" height=\"204,7409\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Einstellungen f&uuml;r die neue Aktion<\/span><\/b><\/p>\n<p>Wir k&ouml;nnen den Flow nun speichern und das wird auch ohne Probleme gelingen. Damit k&ouml;nnen wir nun zur ersten Aktion beziehungsweise zum Trigger mit der Beschriftung <b>manual <\/b>zur&uuml;ckkehren. Klicken wir diesen an, sehen wir nun unter <b>HTTP-URL <\/b>die URL, die wir aufrufen m&uuml;ssen. Hier m&uuml;ssen wir au&szlig;erdem noch pr&uuml;fen, ob <b>Wer kann den Flow ausl&ouml;sen <\/b>den Wert <b>Jeder <\/b>aufweist (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_005.png\" alt=\"Pr&uuml;fen des Ausl&ouml;sers und Abholen der URL\" width=\"474,6267\" height=\"206,0277\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Pr&uuml;fen des Ausl&ouml;sers und Abholen der URL<\/span><\/b><\/p>\n<p>Im Gegensatz zum Beispiel aus dem eingangs erw&auml;hnten Artikel wollen wir hier eine Antwort erhalten, die &uuml;ber einen Status mit einer Erfolgsmeldung hinausgeht. Dazu f&uuml;gen wir noch eine weitere Aktion hinzu. Diese hei&szlig;t <b>Antwort<\/b> und wir finden diese wie in Bild 6.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_006.png\" alt=\"Anlegen der Antwort-Aktion\" width=\"424,6267\" height=\"257,2861\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Anlegen der Antwort-Aktion<\/span><\/b><\/p>\n<h2>Antwort als Eigenschaft hinzuf&uuml;gen<\/h2>\n<p>Hier m&uuml;ssen wir allerdings Hand anlegen. Die Parameter der <b>Antwort<\/b>-Aktion sehen wir in Bild 7. Wichtig sind hier die Eigenschaften <b>Status Code <\/b>und <b>Body<\/b>. Wenn wir den Flow aufrufen, ohne diese letzte Aktion hinzuzuf&uuml;gen, bekommen wir immer den Status <b>202 <\/b>zur&uuml;ck &#8211; ohne einen <b>Response<\/b>-Text. Hier legen wir nun fest, dass wir den Status <b>200<\/b> erhalten, wenn dieser Schritt erreicht wird, und mit der Eigenschaft <b>Body <\/b>definieren wir, welchen Inhalt wir zur&uuml;ckerhalten wollen. Deshalb klicken wir auf die Schaltfl&auml;che mit dem Blitz und dem Text <b>fx<\/b>, um die verf&uuml;gbaren Elemente anzuzeigen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_008.png\" alt=\"Eintragen des Body-Wertes\" width=\"424,6267\" height=\"241,0043\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Eintragen des Body-Wertes<\/span><\/b><\/p>\n<p>Diese sehen wir nun in Bild 8. Hier sehen wir alle m&ouml;glichen Ergebnisse der Aktion <b>Alle Aufgabenlisten auflisten<\/b>. Wir w&auml;hlen den Eintrag <b>Textk&ouml;rper <\/b>aus. Mit allen anderen Eintr&auml;gen konnten wir den Flow nicht ohne Fehlermeldungen speichern. Nun gelingt dies jedoch, und wir k&ouml;nnen uns dem Aufruf per VBA zuwenden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_007.png\" alt=\"Hinzuf&uuml;gen des Elements Textk&ouml;rper zur Eigenschaft Body der Antwort\" width=\"700\" height=\"446,8365\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Hinzuf&uuml;gen des Elements Textk&ouml;rper zur Eigenschaft Body der Antwort<\/span><\/b><\/p>\n<h2>Alle Aufgabenlisten per VBA ermitteln<\/h2>\n<p>Nachdem wir uns so praktisch unseren eigenen ma&szlig;geschneiderten Webservice gebaut haben, k&ouml;nnen wir diesen per VBA aufrufen. Um diese optimal verarbeiten zu k&ouml;nnen, wollen wir jedoch noch zwei Voraussetzungen schaffen. Als Erstes ben&ouml;tigen wir einen Verweis auf die Bibliothek <b>Microsoft Scripting Runtime<\/b>. Au&szlig;erdem f&uuml;gen wir zwei Module namens <b>mdlJSON <\/b>und <b>mdlJSONDOM <\/b>zum VBA-Projekt hinzu. Diese enthalten wichtige Funktionen zum Auswerten der Antwort des Webservices.<\/p>\n<p>In der Prozedur <b>GetToDoLists<\/b> aus Listing 1 rufen wir den Webservice auf. Hier deklarieren wir einige Variablen und weisen dann der Variablen <b>strURL <\/b>die URL zu, die wir weiter oben dem Element <b>manual <\/b>entnommen haben. Dann rufen wir diese URL. Liefert diese den Wert <b>200 <\/b>als Status zur&uuml;ck, war der Aufruf erfolgreich.  Dann k&ouml;nnen wir den Inhalt der Eigenschaft <b>responseText<\/b> des <b>XMLHTTP<\/b>-Objekts in die Variable <b>strResponse<\/b> schreiben. Da es sich hierbei um ein JSON-Dokument handelt, verwenden wir die Funktion <b>GetJSONDOM<\/b>, um die Referenzen zu den einzelnen Inhalten des Dokuments im Direktbereich auszugeben. Dieser sieht f&uuml;r das erste Element wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>GetToDoLists()\r\n     <span style=\"color:blue;\">Dim <\/span>objXMLHTTP<span style=\"color:blue;\"> As <\/span>MSXML2.ServerXMLHTTP60\r\n     <span style=\"color:blue;\">Dim <\/span>strUrl<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = <span style=\"color:blue;\">New<\/span> MSXML2.ServerXMLHTTP60\r\n     strUrl = \"https:\/\/prod2-25.germanywestcentral.logic.azure.com:443\/workflows\/...\"\r\n     <span style=\"color:blue;\">With<\/span> objXMLHTTP\r\n         .Open \"POST\", strUrl, <span style=\"color:blue;\">False<\/span>\r\n         .setRequestHeader \"Content-Type\", \"application\/json\"\r\n         .send \"{}\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     Select Case objXMLHTTP.status\r\n         <span style=\"color:blue;\">Case <\/span>200\r\n             strResponse = objXMLHTTP.responseText\r\n             <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strResponse)\r\n             <span style=\"color:blue;\">Debug.Print<\/span> GetJSONDOM(strResponse, <span style=\"color:blue;\">True<\/span>)\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & objXMLHTTP.status & \" - \" & objXMLHTTP.statusText\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Ermitteln aller Aufgabenlisten von To Do<\/span><\/b><\/p>\n<pre>objJSON.Item(1).Item(\"@odata.etag\"): W\/\"5kiLK5VJy0...\"\r\nobjJSON.Item(1).Item(\"displayName\"): Tasks\r\nobjJSON.Item(1).Item(\"isOwner\"): Wahr\r\nobjJSON.Item(1).Item(\"isShared\"): Falsch\r\nobjJSON.Item(1).Item(\"wellknownListName\"): defaultList\r\nobjJSON.Item(1).Item(\"id\"): AQMkADAwATNiZmYAZC05M2I2LTRiYTgtMDACLTAwCgAuAAADKTYDS538L0CXniiMkbeMfQEA5kiLK5VJy0Cml8itxoUMYQAAAgESAAAA<\/pre>\n<p>Uns interessieren prim&auml;r der Anzeigename (<b>displayName<\/b>) und die <b>id<\/b>. Letztere ben&ouml;tigen wir, um gezielt die Aufgaben einer Liste zu bearbeiten.<\/p>\n<p>Wir haben den Inhalt mit der Funktion <b>ParseJSON <\/b>ausgelesen und in eine Objektstruktur geschrieben, die wir mit der Variablen <b>objJSON <\/b>referenzieren. &Uuml;ber diese k&ouml;nnen wir die enthaltene Werte nun mit den von <b>GetJSONDOM <\/b>gelieferten Referenzen ermitteln.<\/p>\n<p>Wenn wir <b>GetJSONDOM <\/b>nun durch die folgende Schleife ersetzen, erhalten wir alle Anzeigenamen plus ID im Direktbereich:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\nFor i = 1 To objJSON.Count\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(i).Item(\"displayName\"), _\r\n        objJSON.Item(i).Item(\"id\")\r\n<span style=\"color:blue;\">Next<\/span> i<\/pre>\n<p>Damit k&ouml;nnen wir arbeiten &#8211; wir k&ouml;nnen die Informationen nun beispielsweise in eine Access- oder Excel-Tabelle schreiben, um weiter damit zu arbeiten.<\/p>\n<h2>Aufgaben einer Aufgabenliste abrufen<\/h2>\n<p>Im n&auml;chsten Schritt wollen wir zu einer dieser Aufgabenlisten alle Aufgaben ausgeben. Dazu legen wir einen neuen Flow an. Das ist bereits deutlich anspruchsvoller, wie wir gleich sehen werden.<\/p>\n<p>Grunds&auml;tzlich ist der Aufbau des Flows &auml;hnlich: Wir verwenden wieder das <b>manual<\/b>-Objekt zum Start, dann eines, das die Eintr&auml;ge liefert und am Ende die Antwort. Allerdings k&ouml;nnen wir die Eintr&auml;ge nicht so einfach wie zuvor als Antwort zur&uuml;ckschicken, sondern m&uuml;ssen diese zwischendurch noch prozessieren. Das erscheint gleich in der Beschreibung leicht, aber da wir im Web kein Beispiel daf&uuml;r gefunden haben und alles selbst herausfinden mussten, sind daf&uuml;r einige Stunden draufgegangen.<\/p>\n<p>Der vollst&auml;ndige Flow wird sp&auml;ter wie in Bild 9 aussehen. Wir starten mit dem Request-Element, dem wir mitteilen, welche Liste ausgelesen werden soll und wie viele Eintr&auml;ge wir maximal erhalten wollen. Dann folgt das eigentliche Auslesen durch die Aktion <b>Aufgaben nach Ordner auflisten<\/b>. Die damit erhaltenen Informationen m&uuml;ssen wir allerdings noch verarbeiten. Dazu erstellen wir eine Array-Variable, die wir in der folgenden Schleife mit den Elementen der gefundenen Aufgaben f&uuml;llen. Mit der Verfassen-Aktion bereiten wir die Inhalte zur R&uuml;ckgabe als Response vor und geben diese schlie&szlig;lich mit dem Response-Element zur&uuml;ck.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_009.png\" alt=\"Vollst&auml;ndiger Flow zum Abfragen der Aufgaben einer Aufgabenliste\" width=\"424,6267\" height=\"948,487\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Vollst&auml;ndiger Flow zum Abfragen der Aufgaben einer Aufgabenliste<\/span><\/b><\/p>\n<p>Dies schauen wir uns nun im Detail an.<\/p>\n<h2>Trigger f&uuml;r den Request hinzuf&uuml;gen<\/h2>\n<p>Wir starten mit einem neuen Flow, f&uuml;r den wir wieder den Typ <b>Beim Empfang einer HTTP-Aufforderung<\/b>. F&uuml;r diesen legen wir unter <b>Wer kann den Flow ausl&ouml;sen <\/b>wieder <b>Jeder <\/b>fest.<\/p>\n<p>F&uuml;r JSON-Schema des Anforderungstexts hinterlegen wir das folgende JSON-Dokument, mit dem wir diesmal nicht nur die <b>listId <\/b>abfragen, sondern mit <b>count <\/b>auch die maximale Anzahl der zur&uuml;ckzugebenden Elemente:<\/p>\n<pre>{\r\n   \"properties\": {\r\n     \"listId\": {\r\n       \"type\": \"string\"\r\n     },\r\n     \"count\": {\r\n       \"type\": \"integer\"\r\n     }\r\n   },\r\n   \"type\": \"object\"\r\n}<\/pre>\n<h2>Aktion zum Abfragen der Aufgaben hinzuf&uuml;gen<\/h2>\n<p>&Uuml;ber das Pluszeichen f&uuml;gen wir nun ein neues Element hinzu. Leider ist die Suche nach Aktionen so schlecht, dass wir uns behelfen, indem wir das Suchwort <b>Aufgaben <\/b>eingeben und etwas nach unten scrollen, bis wir die Gruppe <b>Microsoft To-Do <\/b>finden. Diese enth&auml;lt auch die Aktion <b>Aufgaben nach Ordner auflisten<\/b>, die wir durch Anklicken hinzuf&uuml;gen.<\/p>\n<p>Hier finden wir in den Eigenschaften unter Parameter die beiden Parameter <b>To-Do-List <\/b>und <b>H&ouml;chstzahl<\/b>. Wenn wir das Nachschlagfeld f&uuml;r <b>To-Do-Liste <\/b>&ouml;ffnen, sehen wir alle To-Do-Listen f&uuml;r das angegebene Konto und ganz unten den Eintrag <b>Benutzerdefinierten Wert eingeben<\/b>. Dies blendet die Schaltfl&auml;che aus Bild 10 ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_010.png\" alt=\"Weitere Auswahlm&ouml;glichkeiten\" width=\"599,6265\" height=\"262,9278\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Weitere Auswahlm&ouml;glichkeiten<\/span><\/b><\/p>\n<p>Klicken wir auf den Blitz oben, erhalten wir die aus den bisherigen Elementen verf&uuml;gbaren Parameter, hier <b>listId <\/b>und <b>count <\/b>aus dem <b>manual<\/b>-Element (siehe Bild 11). Hier w&auml;hlen wir folglich das Element <b>listId <\/b>f&uuml;r <b>To-Do-Liste <\/b>aus und <b>count <\/b>f&uuml;r <b>H&ouml;chstanzahl<\/b> und haben so schon alle Einstellungen f&uuml;r diese Aktion festgelegt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_011.png\" alt=\"Hinzuf&uuml;gen der Parameter\" width=\"649,627\" height=\"326,9035\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Hinzuf&uuml;gen der Parameter<\/span><\/b><\/p>\n<p>Du solltest an dieser Stelle auch noch pr&uuml;fen, ob du mit einem Microsoft To-Do-Konto verbunden bist und dies gegebenenfalls an der Stelle aus Bild 12 erledigst.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_012.png\" alt=\"Pr&uuml;fen der Verbindung mit Microsoft To-Do\" width=\"549,6265\" height=\"302,7831\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Pr&uuml;fen der Verbindung mit Microsoft To-Do<\/span><\/b><\/p>\n<h2>Array-Variable initialisieren<\/h2>\n<p>Im vorherigen Beispiel konnten wir an dieser Stelle bereits die <b>Antwort<\/b>-Aktion hinzuf&uuml;gen. Das ist hier noch nicht m&ouml;glich, denn wir m&uuml;ssen die Elemente des Ergebnisses der Aufgaben nach <b>Ordner auflisten<\/b>-Aktion noch aufbereiten.<\/p>\n<p>Dazu geben wir als Suchbegriff <b>Variable <\/b>an und w&auml;hlen dort den Eintrag <b>Variable initialisieren <\/b>aus (siehe Bild 13).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_013.png\" alt=\"Hinzuf&uuml;gen der Aktion Variable initialisieren\" width=\"424,6267\" height=\"395,8532\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Hinzuf&uuml;gen der Aktion Variable initialisieren<\/span><\/b><\/p>\n<p>F&uuml;r dieses neue Variable-Element stellen wir nun die Parameter ein (siehe Bild 14). Hier finden wir den Parameter <b>Name<\/b>, dem wir den Wert <b>tasksArray <\/b>zuweisen. Der Parameter <b>Type <\/b>erh&auml;lt den Wert <b>Array <\/b>und f&uuml;r <b>Value <\/b>stellen wir mit einem eckigen Klammernpaar ein leeres Array ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_014.png\" alt=\"Einstellen der Parameter\" width=\"424,6267\" height=\"398,6475\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Einstellen der Parameter<\/span><\/b><\/p>\n<h2>Schleife &uuml;ber alle Aufgaben<\/h2>\n<p>Nun ben&ouml;tigen wir eine Schleife, in der wir alle Aufgaben in die Array-Variable eintragen. Diese finden wir unter dem Namen <b>Auf alle anwenden <\/b>im Bereich <b>Control<\/b> (siehe Bild 15).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_015.png\" alt=\"Hinzuf&uuml;gen der Aktion Auf alle anwenden\" width=\"424,6267\" height=\"341,3486\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Hinzuf&uuml;gen der Aktion Auf alle anwenden<\/span><\/b><\/p>\n<p>In den Parametern dieses neuen Elements legen wir nun fest, welchen Output eines vorherigen Elements wie verarbeiten wollen. Hier w&auml;hlen wir den Eintrag <b>Textk&ouml;rper <\/b>aus <b>Aufgaben nach Ordner auflisten aus<\/b> (siehe Bild 16).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_016.png\" alt=\"Ausw&auml;hlen des Outputs, der in der Schleife verarbeitet werden soll\" width=\"599,6265\" height=\"373,9245\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Ausw&auml;hlen des Outputs, der in der Schleife verarbeitet werden soll<\/span><\/b><\/p>\n<p>Danach m&uuml;ssen wir noch festlegen, was genau mit diesen Inhalten geschehen soll. Dazu klicken wir auf die <b>Plus<\/b>-Schaltfl&auml;che innerhalb des <b>Auf alle anwenden<\/b>-Elements (siehe Bild 17) und w&auml;hlen die <b>Aktion hinzuf&uuml;gen<\/b>-Anweisung aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_017.png\" alt=\"Hier f&uuml;gen wir noch ein Element hinzu.\" width=\"249,6268\" height=\"467,3669\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Hier f&uuml;gen wir noch ein Element hinzu.<\/span><\/b><\/p>\n<p>Hier suchen wir im Suchen-Feld wieder nach dem Schl&uuml;sselwort <b>Variable <\/b>und w&auml;hlen diesmal den Eintrag <b>An Arrayvariable anf&uuml;gen <\/b>aus.<\/p>\n<p>Hier sind nun zwei Parameter festzulegen. F&uuml;r Name w&auml;hlen wir den Namen der Variable aus, also <b>tasksArray<\/b>. Einen anderen Eintrag gibt es auch nicht.<\/p>\n<p>F&uuml;r <b>Value<\/b> klicken wir wieder auf das Blitz-Symbol und finden dann eine ganze Reihe von Elementen vor, wenn wir f&uuml;r <b>Aufgaben nach Ordner auflisten <\/b>auf <b>Mehr anzeigen (19) <\/b>klicken (siehe Bild 18).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_018.png\" alt=\"Auswahl der Eigenschaften der Aufgabe\" width=\"674,627\" height=\"437,0821\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Auswahl der Eigenschaften der Aufgabe<\/span><\/b><\/p>\n<p>Aber k&ouml;nnen wir hier nun nur ein Element ausw&auml;hlen? Was ist, wenn wir beispielsweise die ID und den Titel selektieren wollen? Das ist kein Problem: Wir k&ouml;nnen beliebig viele Elemente ausw&auml;hlen und diese nacheinander per Mausklick zur Eigenschaft <b>Value <\/b>hinzuf&uuml;gen.<\/p>\n<p>In diesem Fall wollen wir uns jedoch mit ID und Titel begn&uuml;gen, damit die R&uuml;ckgabe &uuml;berschaubar bleibt.<\/p>\n<p>Das reicht allerdings noch nicht aus, denn so werden die Elemente einfach in einem JSON-Dokument aneinandergeh&auml;ngt. Wir bearbeiten also die beiden Elemente in der Eigenschaft Value, indem wir die Struktur eines JSON-Dokuments hinzuf&uuml;gen &#8211; hier in Form von geschweiften Klammern und den Namen f&uuml;r die Elemente, hier <b>id <\/b>und <b>title<\/b> (siehe Bild 19).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_019.png\" alt=\"Strukturieren der Eigenschaften der Aufgabe in einem JSON-Dokument\" width=\"449,6267\" height=\"334,6997\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 19: Strukturieren der Eigenschaften der Aufgabe in einem JSON-Dokument<\/span><\/b><\/p>\n<h2>Verfassen der Antwort<\/h2>\n<p>Nach der Schleife f&uuml;gen wir eine weitere Aktion hinzu. Diese finden wir &uuml;ber die Suche nach dem Begriff <b>Verfassen <\/b>sehr schnell und f&uuml;gen sie hinzu.<\/p>\n<p>F&uuml;r den Parameter <b>Eingaben <\/b>w&auml;hlen wir &uuml;ber die durch Anklicken des Blitz-Icons erscheinende Variable <b>tasksArray <\/b>aus.<\/p>\n<h2>Hinzuf&uuml;gen des Antwort-Elements<\/h2>\n<p>Schlie&szlig;lich ben&ouml;tigen wir noch das Antwort-Element selbst, das wir nach Eingabe des Suchbegriffs Antwort im Bereich Anforderung finden.<\/p>\n<p>Hier behalten wir den Wert <b>200 <\/b>f&uuml;r den Parameter <b>Status Code <\/b>bei und f&uuml;gen f&uuml;r <b>Body <\/b>den Wert <b>Verfassen|Ausgaben <\/b>hinzu.<\/p>\n<h2>Speichern des Flows<\/h2>\n<p>Ob wir alles korrekt angelegt haben, erfahren wir, wenn wir den Flow mit einem Klick auf die entsprechende Schaltfl&auml;che speichern. Wenn dies gelingt, k&ouml;nnen wir ihn mit der im Anschluss vorgestellten VBA-Prozedur testen.<\/p>\n<p>Diese finden wir in Listing 2. Die Prozedur <b>GetTaskOfAList <\/b>nimmt mit dem Parameter <b>strListID <\/b>die ID der Liste entgegen, deren To Do-Aufgaben ermittelt werden sollen. Folglich ben&ouml;tigen wir noch einen Aufruf dieser Prozedur, mit der wir die ID ermitteln und &uuml;bergeben. Hier haben wir die ID bereits vorab ermittelt und &uuml;bergeben diese als Parameter:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>GetTasksOfAList(strListID<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objXMLHTTP<span style=\"color:blue;\"> As <\/span>MSXML2.ServerXMLHTTP60\r\n     <span style=\"color:blue;\">Dim <\/span>strUrl<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strRequest<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = <span style=\"color:blue;\">New<\/span> MSXML2.ServerXMLHTTP60\r\n     strUrl = \"https:\/\/prod2-11.germanywestcentral.logic.azure.com:443\/workflows\/2641fd9330094a83bf60f40088c...\"\r\n     <span style=\"color:blue;\">With<\/span> objXMLHTTP\r\n         .Open \"POST\", strUrl, <span style=\"color:blue;\">False<\/span>\r\n         .setRequestHeader \"Content-Type\", \"application\/json\"\r\n         strRequest = \"{\"\"listId\"\": \"\"\" & strListID & \"\"\", \"\"count\"\":999}\"\r\n         .send strRequest\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     Select Case objXMLHTTP.status\r\n         <span style=\"color:blue;\">Case <\/span>200\r\n             strResponse = objXMLHTTP.responseText\r\n             <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strResponse)\r\n             For i = 1 To objJSON.Count\r\n                 <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(i).Item(\"id\"), objJSON.Item(i).Item(\"title\")\r\n             <span style=\"color:blue;\">Next<\/span> i\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & objXMLHTTP.status & \" - \" & objXMLHTTP.statusText\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Prozedur zum Ermitteln aller Aufgaben einer Liste in To Do<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_GetTasksOfAList()\r\n     <span style=\"color:blue;\">Dim <\/span>strListID<span style=\"color:blue;\"> As String<\/span>\r\n     strListID = \"AQMkADAwATNiZmYAZC05M2I2LTRiYTgtMD...\"\r\n     GetTasksOfAList strListID\r\n<span style=\"color:blue;\">End Sub<\/span> <\/pre>\n<p>Die Prozedur verwendet eine Variable namens <b>strURL<\/b>, der wir noch die URL zuweisen m&uuml;ssen, die wir f&uuml;r den Aufruf des Flows verwenden k&ouml;nnen. Diese wurde beim Speichern des Flows im Element <b>manual <\/b>im Parameter <b>HTTP-URL <\/b>hinterlegt. Dort k&ouml;nnen wir sie herauskopieren und f&uuml;r <b>strUrl <\/b>einf&uuml;gen. Dann rufen wir die URL mit dem <b>objXMLHTTP<\/b>-Objekt auf und &uuml;bergeben neben der Methode <b>POST <\/b>die URL. Au&szlig;erdem setzen wir den &uuml;blichen Request-Header. F&uuml;r die <b>Send<\/b>-Methode stellen wir vorab in der Variablen <b>strRequest <\/b>ein JSON-Dokument mit der <b>listId <\/b>und der maximalen Anzahl (<b>count<\/b>) zusammen.<\/p>\n<p>Danach werten wir das Ergebnis, zuerst die <b>status<\/b>-Eigenschaft. Diese liefert optimalerweise den Wert <b>200<\/b>, dann hat alles funktioniert. In diesem Fall lesen wir den Inhalt der Eigenschaft <b>responseText <\/b>in die Variable <b>strResponse <\/b>ein. Wir verwenden die <b>ParseJSON<\/b>-Funktion, um aus dem zur&uuml;ckgelieferten JSON-Dokument eine Objektstruktur zu machen, die wir nach bew&auml;hrter Manier &uuml;ber das mit <b>GetJSONDOM <\/b>einzusehende Objektmodell auslesen k&ouml;nnen.<\/p>\n<p>In diesem Fall durchlaufen wir in einer Schleife von <b>1<\/b> bis zur Anzahl der Element von <b>objJSON <\/b>die mit <b>objJSON.Item(i).Item(&#8220;id&#8221;)<\/b> und <b>objJSON.Item(i).Item(&#8220;title&#8221;) <\/b>referenzierten <b>IDs <\/b>und <b>Titel <\/b>der Aufgaben. Diese geben wir hier der Einfachheit halber im Direktbereich des VBA-Editors aus.<\/p>\n<p>Sollte ein Fehler auftreten und der Flow liefert nicht den Wert <b>200 <\/b>zur&uuml;ck, geben wir den gelieferten Status plus Text in einem Meldungsfenster aus.<\/p>\n<p>Die IDs und Titel k&ouml;nnten wir beispielsweise in eine Excel- oder Access-Tabelle schreiben und sie dann nutzen, um gezielt weitere Eigenschaften einer einzelnen Aufgabe auszulesen.<\/p>\n<h2>Update des Flows zum Anlegen einer Aufgabe<\/h2>\n<p>Im Artikel <b>To Do-Aufgabe mit Power Automate und VBA anlegen <\/b>(<b>www.vbentwickler.de\/431<\/b>) haben wir einfach nur eine To Do-Aufgabe angelegt. Den dortigen Flow wollen wir noch erweitern um die R&uuml;ckgabe der ID des neu angelegten Flows.<\/p>\n<p>Dazu f&uuml;gen wir den beiden Elementen <b>manual <\/b>und <b>Aufgabe hinzuf&uuml;gen <\/b>noch das Element <b>Antwort <\/b>hinzu (siehe Listing 3).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>AddToDoTask(strTitle<span style=\"color:blue;\"> As String<\/span>, datDue<span style=\"color:blue;\"> As Date<\/span>, <span style=\"color:blue;\">Optional<\/span> strID<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objXMLHTTP<span style=\"color:blue;\"> As <\/span>MSXML2.XMLHTTP60\r\n     <span style=\"color:blue;\">Dim <\/span>strUrl<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strJSON<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = <span style=\"color:blue;\">New<\/span> MSXML2.XMLHTTP60\r\n     strUrl = \"https:\/\/prod2-20.germanywestcentral.logic.azure.com:443\/workflows\/966850d91ed3480badfcb64c1...\"\r\n     strJSON = \"{\"\"title\"\":\"\"\" & strTitle & \"\"\",\"\"dueDate\"\":\"\"\" & Format(datDue, \"yyyy-mm-ddT00:00:00Z\") _\r\n         & \"\"\",\"\"importance\"\":\"\"normal\"\"}\"\r\n     <span style=\"color:blue;\">With<\/span> objXMLHTTP\r\n         .Open \"POST\", strUrl, <span style=\"color:blue;\">False<\/span>\r\n         .setRequestHeader \"Content-Type\", \"application\/json\"\r\n         .send strJSON\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     Select Case objXMLHTTP.status\r\n         <span style=\"color:blue;\">Case <\/span>200\r\n             strResponse = objXMLHTTP.responseText\r\n             <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strResponse)\r\n             AddToDoTask = <span style=\"color:blue;\">True<\/span>\r\n             strID = objJSON.Item(\"id\")\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & objXMLHTTP.status & \" - \" & objXMLHTTP.statusText\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = Nothing\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Prozedur zum Anlegen einer Aufgabe mit R&uuml;ckgabe der ID<\/span><\/b><\/p>\n<p>F&uuml;r diese legen wir f&uuml;r den Parameter <b>Body<\/b> den Wert aus Bild 20 fest.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_020.png\" alt=\"R&uuml;ckgabewert beim Anlegen einer neuen Aufgabe\" width=\"674,627\" height=\"375,0417\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 20: R&uuml;ckgabewert beim Anlegen einer neuen Aufgabe<\/span><\/b><\/p>\n<p>Nat&uuml;rlich m&uuml;ssen wir auch die Prozedur anpassen, welche die neue Aufgabe anlegt. Diese legen wir gleich als Funktion an, die den Wert <b>True <\/b>oder <b>False <\/b>zur&uuml;ckgibt und die im Falle von <b>True <\/b>mit dem Parameter <b>strID <\/b>die ID der neuen Aufgabe liefert. Au&szlig;erdem soll die Funktion den Titel und das Datum der anzulegenden Aufgabe als Parameter entgegennehmen.<\/p>\n<p>Diese werden in das mit dem Request gesendete JSON-Dokument geschrieben. Der Request erfolgt wie in den bereits zuvor beschriebenen Prozeduren.<\/p>\n<p>Beim Auswerten des Ergebnisses lesen wir den Wert von <b>objJSON.Item(&#8220;id&#8221;) <\/b>in den R&uuml;ckgabeparameter <b>strID <\/b>ein.<\/p>\n<p>Der Aufruf erfolgt mit einer Prozedur wie der folgenden:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_AddToDoTask()\r\n     <span style=\"color:blue;\">Dim <\/span>strID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span>AddToDoTask(\"Neue Aufgabe\", Date, strID) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Neue ID: \" & strID\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Eingaben und R&uuml;ckgabewerte erweitern<\/h2>\n<p>Gerade beim Anlegen einer Aufgabe m&ouml;chten wir vielleicht noch mehr Flexibilit&auml;t und wollen noch weitere Eigenschaften von VBA aus &uuml;bergeben wie zum Beispiel einen Body-Text.<\/p>\n<p>Dazu sind folgende Schritte n&ouml;tig:<\/p>\n<ul>\n<li>Erweitern des JSON-Schemas im Element <b>manual <\/b>des Flows<\/li>\n<li>Erweitern des mit dem Request gesendeten JSON-Dokuments im VBA-Code<\/li>\n<li>Hinzuf&uuml;gen der zus&auml;tzlichen Informationen im Element <b>Aufgabe hinzuf&uuml;gen<\/b><\/li>\n<\/ul>\n<p>Schauen wir uns an, wie das funktioniert &#8211; insbesondere im Hinblick darauf, dass wir gegebenenfalls &uuml;bergebene Werte nur optional verwenden wollen.<\/p>\n<p>Dazu schauen wir uns erst einmal an, welche Werte wir einer neuen Aufgabe &uuml;berhaupt zuweisen k&ouml;nnen. Dies finden wir im Element <b>Aufgabe hinzuf&uuml;gen <\/b>(siehe Bild 21). Alle dort angegebenen Elemente k&ouml;nnen wir mit dem Request &uuml;bergeben. Diesen gestalten wir dazu wie folgt:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_023.png\" alt=\"Leere Parameter einer neuen Aufgabe\" width=\"424,643\" height=\"445,9438\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 21: Leere Parameter einer neuen Aufgabe<\/span><\/b><\/p>\n<pre>{\r\n     \"type\": \"object\",\r\n     \"properties\": {\r\n         \"listID\": {\r\n             \"type\": \"string\"\r\n         },\r\n         \"title\": {\r\n             \"type\": \"string\"\r\n         },\r\n         \"dueDateTime\": {\r\n             \"type\": \"string\"\r\n         },\r\n         \"reminderDateTime\": {\r\n             \"type\": \"string\"\r\n         },\r\n         \"importance\": {\r\n             \"type\": \"string\"\r\n         },\r\n         \"status\": {\r\n             \"type\": \"string\"\r\n         },\r\n         \"bodyContent\": {\r\n             \"type\": \"string\"\r\n         }\r\n     }\r\n}<\/pre>\n<p>Nun erweitern wir den VBA-Code f&uuml;r die anzulegende Aufgabe um die entsprechenden Elemente. Da das JSON-Dokument nun schon etwas umfangreicher wird, stellen wir es auf alternative Weise zusammen. Au&szlig;erdem wollen wir alle Werte f&uuml;r die zu erstellende Aufgabe als Parameter &uuml;bergeben und passen den Funktionskopf entsprechend an (Erweiterungen siehe Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>AddToDoTask(strTitle<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> strListID<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> datDue<span style=\"color:blue;\"> As Date<\/span>, _\r\n         <span style=\"color:blue;\">Optional<\/span> datReminder<span style=\"color:blue;\"> As Date<\/span>, <span style=\"color:blue;\">Optional<\/span> strImportance<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> strStatus<span style=\"color:blue;\"> As String<\/span>, _\r\n         <span style=\"color:blue;\">Optional<\/span> strBody<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> strID<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     ...\r\n     <span style=\"color:blue;\">Dim <\/span>dicRequest<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = <span style=\"color:blue;\">New<\/span> MSXML2.XMLHTTP60\r\n     strUrl = \"https:\/\/prod2-20.germanywestcentral.logic.azure.com:443\/workflows\/966850d91ed3480badfcb64c1b...\"\r\n     <span style=\"color:blue;\">Set<\/span> dicRequest = <span style=\"color:blue;\">New<\/span> Dictionary\r\n     <span style=\"color:blue;\">With<\/span> dicRequest\r\n         .Add \"listId\", strListID\r\n         .Add \"title\", strTitle\r\n         .Add \"dueDate\", Format(datDue, \"yyyy-mm-ddT00:00:00Z\")\r\n         .Add \"reminderDateTime\", Format(datReminder, \"yyyy-mm-ddT00:00:00Z\")\r\n         .Add \"importance\", strImportance\r\n         .Add \"status\", strStatus\r\n         .Add \"bodyContent\", strBody\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     strJSON = ConvertToJson(dicRequest)\r\n     ...\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Prozedur zum Anlegen einer Aufgabe mit allen Parametern<\/span><\/b><\/p>\n<p>Dazu deklarieren wir eine <b>Dictionary<\/b>-Objektvariable namens <b>dicRequest<\/b>. Dieses f&uuml;llen wir mit einem neuen <b>Dictionary<\/b>-Objekt, das wir anschlie&szlig;end &uuml;ber die <b>Add<\/b>-Methode mit den Parametern f&uuml;llen.<\/p>\n<p>Dabei passen wir das Format f&uuml;r die Datumsangaben noch auf <b>yyyy-mm-ddT00:00:00Z<\/b> an. F&uuml;r den Parameter <b>importance <\/b>k&ouml;nnen wir die Werte <b>high<\/b>, <b>low <\/b>oder <b>normal    <\/b>verwenden. F&uuml;r den Parameter <b>status <\/b>nutzen wir einen der Werte <b>notStarted<\/b>, <b>inProgress<\/b>, <b>completed<\/b>, <b>waitingOnOthers <\/b>oder <b>deferred<\/b>. Das so zusammengestellte <b>Dictionary<\/b>-Objekt wandeln wir mit der Funktion <b>ConvertToJson <\/b>in eine Zeichenkette mit dem JSON-Dokument um. Der Rest der Funktion arbeitet wie die vorherige Version.<\/p>\n<p>Den Aufruf k&ouml;nnen wir nun so gestalten:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_AddToDoTask()\r\n     <span style=\"color:blue;\">Dim <\/span>strID<span style=\"color:blue;\"> As String<\/span>\r\n     If AddToDoTask(\"Neue Aufgabe normal\", _\r\n             \"AQMkADAwATNiZmYAZC05M...\", Date, Date, _\r\n             \"normal\", \"notStarted\", \"Inhalt der Aufgabe\", _\r\n             strID) = <span style=\"color:blue;\">True<\/span> Then\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Neue ID: \" & strID\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit stellen wir nun sicher, dass die Parameter wie im Element <b>manual <\/b>des Flows definiert &uuml;bergeben werden.<\/p>\n<h2>Parameter den Eigenschaften der neuen Aufgabe zuweisen<\/h2>\n<p>Nun m&uuml;ssen wir diese noch entsprechend in die zu erstellende Aufgabe einarbeiten. Dazu klicken wir das Element <b>Aufgabe hinzuf&uuml;gen <\/b>an und erhalten den Dialog aus Bild 22.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_022.png\" alt=\"Parameter beim Anlegen einer neuen Aufgabe\" width=\"549,643\" height=\"573,994\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 22: Parameter beim Anlegen einer neuen Aufgabe<\/span><\/b><\/p>\n<p>Hier klicken wir jeweils auf das Element, f&uuml;r das wir den Parameter f&uuml;llen wollen und dann auf das Blitz-Symbol. Nun sehen wir die Liste der verf&uuml;gbaren Elemente, von denen wir das jeweils gew&uuml;nschte anklicken und so den Parameter einf&uuml;gen.<\/p>\n<h2>R&uuml;ckgabe definieren<\/h2>\n<p>Nun wollen wir noch die R&uuml;ckgabewerte definieren. Diese k&ouml;nnen wir so nicht nur f&uuml;r das Anlegen einer neuen Aufgabe nutzen, sondern auch beispielsweise dann, wenn wir den Inhalt einer speziellen Aufgabe auslesen wollen. Dazu klicken wir auf das Element <b>Antwort<\/b>.<\/p>\n<p>Hier ist nun wieder ein wenig Handarbeit angesagt. Wir m&uuml;ssen n&auml;mlich ein JSON-Dokument zusammenstellen, das die korrekten Bezeichnungen sowie die aktuellen Werte der Parameter enth&auml;lt. Das Ergebnis sieht wie in Bild 23 aus. Wir schreiben hier jeweils eine neue Zeile in das JSON-Dokument und platzieren die Einf&uuml;gemarke dann zwischen den beiden Anf&uuml;hrungszeichen f&uuml;r den Wert eines Name-Wert-Paares.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_024.png\" alt=\"R&uuml;ckgabewert beim Anlegen einer neuen Aufgabe zusammenstellen\" width=\"700\" height=\"576,3914\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 23: R&uuml;ckgabewert beim Anlegen einer neuen Aufgabe zusammenstellen<\/span><\/b><\/p>\n<p>Dann klicken wir auf das Blitz-Symbol und sehen die im Flow verf&uuml;gbaren Elemente. Hier erweitern wir die Anzeige von Aufgabe hinzuf&uuml;gen und finden nun alle Elemente, die wir ben&ouml;tigen, in der Liste.<\/p>\n<p>Auf diese Weise stellen wir das JSON-Dokument mit allen relevanten Informationen zusammen.<\/p>\n<h2>Tipp: Antwort f&uuml;r andere Flows &uuml;ber Zwischenablage kopieren<\/h2>\n<p>Diese Antwort k&ouml;nnen wir noch anderen Stellen gebrauchen, zum Beispiel beim Ermitteln der Werte einer Aufgabe oder nach dem &Auml;ndern einer Aufgabe. Dazu kopieren wir einfach den Inhalt aus dem Feld <b>Body<\/b> in die Zwischenablage und f&uuml;gen diesen im gew&uuml;nschten Flow wieder ein.<\/p>\n<p>Wir k&ouml;nnen dies auch in einer Textdatei oder an einem anderen Ort zwischenspeichern. Hier sehen wir, dass sich hinter den Platzhaltern wiederum Ausdr&uuml;cke in einer bestimmten Notation befinden, die wir hier nicht weiter untersuchen, sondern nur einmal vorstellen wollen. Anbei die gek&uuml;rzte Fassung unserer Antwort:<\/p>\n<pre>{  \"id\": \"@{outputs(''Aufgabe_hinzuf&uuml;gen'')?[''body\/id']}\",  \"createdDateTime\": \"@{outputs(''Aufgabe_hinzuf&uuml;gen'')?[''body\/createdDateTime']}\",  \"lastModifiedDateTime\": \"@{outputs(''Aufgabe_hinzuf&uuml;gen'')?[''body\/lastModifiedDateTime']}\",\r\n   ...}<\/pre>\n<p>In der oben beschriebenen Funktion <b>AddToDoTask<\/b> werten wir jedoch nur die ID des neuen Elements aus, da wir die &uuml;brigen Informationen f&uuml;r das neue Element ja bereits kennen &#8211; wir haben sie schlie&szlig;lich &uuml;bergeben.<\/p>\n<h2>Eine Aufgabe l&ouml;schen<\/h2>\n<p>Wenn wir Aufgaben per VBA hinzuf&uuml;gen, wollen wir diese gegebenenfalls auch wieder l&ouml;schen.<\/p>\n<p>Auch daf&uuml;r gibt es eine Aktion. Diese hei&szlig;t <b>Aufgabe l&ouml;schen <\/b>und wir f&uuml;gen sie einem neuen Flow namens <b>Aufgabe l&ouml;schen <\/b>hinzu.<\/p>\n<p>Diese Aktion erwartet die Angabe der To Do-Liste als auch die ID der zu l&ouml;schenden Aufgabe als Parameter.  Also f&uuml;gen wir diese beiden zum Element manual unter Parameter f&uuml;r den Anforderungstext im JSON-Format in Form des Schemas aus Bild 24 hinzu.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_025.png\" alt=\"Flow zum L&ouml;schen einer Aufgabe\" width=\"700\" height=\"421,0998\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 24: Flow zum L&ouml;schen einer Aufgabe<\/span><\/b><\/p>\n<p>Danach bearbeiten wir das Element <b>Aufgabe l&ouml;schen<\/b>.<\/p>\n<p>Hier f&uuml;gen wir f&uuml;r die beiden Parameter <b>To-Do-List <\/b>und <b>To-Do-Aufgabe <\/b>die beiden zuvor im Element <b>manuel<\/b> definierten Parameter hinzu (siehe Bild 25).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_026.png\" alt=\"Parameter der Aktion Aufgabe l&ouml;schen\" width=\"700\" height=\"295,9731\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 25: Parameter der Aktion Aufgabe l&ouml;schen<\/span><\/b><\/p>\n<p>Hier ben&ouml;tigen wir au&szlig;erdem kein Antwort-Element. Die Aktion <b>Aufgaben l&ouml;schen <\/b>liefert bereits den Wert <b>202 <\/b>f&uuml;r den Status zur&uuml;ck, wenn die Aufgabe erfolgreich gel&ouml;scht werden konnte.<\/p>\n<p>Wenn wir nun aus dem Element manual wieder die URL kopieren und den Flow f&uuml;r alle freigegeben haben, brauchen wir nur noch die VBA-Funktion zum Aufruf des Flows zu gestalten.<\/p>\n<p>Diese Funktion sieht wie in Listing 5 aus. Diese rufen wir wie folgt auf:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DeleteToDoTask(strListID<span style=\"color:blue;\"> As String<\/span>, strTaskID<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objXMLHTTP<span style=\"color:blue;\"> As <\/span>MSXML2.XMLHTTP60\r\n     <span style=\"color:blue;\">Dim <\/span>strUrl<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strJSON<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = <span style=\"color:blue;\">New<\/span> MSXML2.XMLHTTP60\r\n     strUrl = \"https:\/\/prod2-15.germanywestcentral.logic.azure.com:443\/workflows\/8d95215737f04d238ce06892628d48b8\/...\"\r\n     strJSON = \"{\"\"listId\"\":\"\"\" & strListID & \"\"\",\"\"taskId\"\":\"\"\" & strTaskID & \"\"\"}\"\r\n     <span style=\"color:blue;\">With<\/span> objXMLHTTP\r\n         .Open \"POST\", strUrl, <span style=\"color:blue;\">False<\/span>\r\n         .setRequestHeader \"Content-Type\", \"application\/json\"\r\n         .send strJSON\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     Select Case objXMLHTTP.status\r\n         <span style=\"color:blue;\">Case <\/span>202\r\n             DeleteToDoTask = <span style=\"color:blue;\">True<\/span>\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & objXMLHTTP.status & \" - \" & objXMLHTTP.statusText\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = Nothing\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Funktion zum L&ouml;schen eines Tasks<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_DeleteToDoTask()\r\n     <span style=\"color:blue;\">Dim <\/span>strListID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strTaskID<span style=\"color:blue;\"> As String<\/span>\r\n     strListID = \"AQMkADAwATNiZmYAZC05M2I2LTRiYTgtMDACL...\"\r\n     strTaskID = \"AQMkADAwATNiZmYAZC05M2I2LTRiYTgtMDACL...\"\r\n     <span style=\"color:blue;\">Debug.Print<\/span> DeleteToDoTask(strListID, strTaskID)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit k&ouml;nnen wir Aufgaben zuverl&auml;ssig l&ouml;schen. Das L&ouml;schen einer Aufgabe liefert immer das Ergebnis <b>202<\/b>. Allerdings wird dieses Ergebnis auch geliefert, wenn keine Aufgabe gel&ouml;scht wird. Letztlich bedeutet <b>202 <\/b>auch nur, dass die Anfrage akzeptiert wurde. Ob die Ausf&uuml;hrung tats&auml;chlich erfolgreich war, k&ouml;nnen wir aktuell nur &uuml;ber den Ausf&uuml;hrungsverlauf des Flows pr&uuml;fen. Dazu klicken wir den Flow in der Liste an und schauen uns die Liste des Ausf&uuml;hrungsverlaufs an (siehe Bild 26). Hier sehen wir, dass einige Ausf&uuml;hrungen einen Fehler als Status liefern. Diese Ausf&uuml;hrungen haben jedoch keinen Fehler zur&uuml;ckgeliefert. Und die Aktion <b>Aufgabe l&ouml;schen <\/b>liefert auch keine M&ouml;glichkeit, das Ergebnis auszuwerten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_027.png\" alt=\"Ergebnisse eines Flows\" width=\"649,643\" height=\"516,7615\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 26: Ergebnisse eines Flows<\/span><\/b><\/p>\n<p>Wie k&ouml;nnen dies jedoch so anpassen, dass wir vor dem L&ouml;schen pr&uuml;fen, ob die Aufgabe &uuml;berhaupt vorhanden ist und anschlie&szlig;end pr&uuml;fen, ob sie gel&ouml;scht wurde. Damit k&ouml;nnen wir uns auch gleich einmal den Umgang mit Bedingungen in Power Automate ansehen.<\/p>\n<p>Wie wollen wir pr&uuml;fen, ob das L&ouml;schen erfolgreich war oder nicht?<\/p>\n<p>Dazu erweitern wir unseren Flow erheblich, sodass er anschlie&szlig;end wie in Bild 27 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_028.png\" alt=\"Flow zum L&ouml;schen einer Aufgabe, neue Version\" width=\"649,643\" height=\"831,9445\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 27: Flow zum L&ouml;schen einer Aufgabe, neue Version<\/span><\/b><\/p>\n<p>Nach dem Start versuchen wir, die Aufgabe mit der Aktion <b>Aufgabe abrufen <\/b>abzurufen. Dies kann fehlschlagen, wenn die Aufgabe nicht vorhanden ist. Wir schalten eine Bedingung nach, in der wir pr&uuml;fen, ob der Wert der ID der mit <b>Aufgabe abrufen <\/b>gefundenen Aufgabe mit dem Wert der ID der zu l&ouml;schenden Aufgabe aus dem Aufruf &uuml;bereinstimmt. Ist dies der Fall, fahren wir mit dem <b>True<\/b>-Pfad fort.<\/p>\n<p>Hier l&ouml;schen wir nun die Aufgabe mit <b>Aufgabe l&ouml;schen <\/b>und rufen die Aufgabe danach mit <b>Aufgabe abrufen 1 <\/b>erneut ab. In der folgenden Bedingung pr&uuml;fen wir, ob die ID der mit <b>Aufgabe abrufen 1 <\/b>ermittelten Aufgabe mit der beim Start &uuml;bergebenen Aufgabe &uuml;bereinstimmt.<\/p>\n<p>Falls ja, geben wir mit der Antwort den Status <b>400 <\/b>zur&uuml;ck und den Text <b>Task not deleted<\/b>. Falls die ID nicht &uuml;bereinstimmt, liefert die Antwort unter <b>False <\/b>den Status <b>200 <\/b>und den Text <b>Task deleted <\/b>zur&uuml;ck.<\/p>\n<p>Wenn bereits bei der ersten Bedingung die &uuml;bergebene ID nicht mit der abgerufenen ID &uuml;bereinstimmt, was der Fall ist, wenn diese nicht vorhanden ist, gehen wir in den <b>False<\/b>-Teil der ersten Bedingung.<\/p>\n<p>Die dortige Antwort gibt den Status <b>400 <\/b>und den Text <b>Task not found <\/b>zur&uuml;ck.<\/p>\n<p>Hier sind einige Feinheiten zu beachten. Die Elemente f&uuml;gen wir jeweils durch Anklicken des Plus-Zeichens und anschlie&szlig;endes Ausw&auml;hlen von <b>Aktion hinzuf&uuml;gen <\/b>aus.<\/p>\n<p>F&uuml;r die erste Bedingung stellen wir unter Parameter die Bedingung aus Bild 28 ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_029.png\" alt=\"Bedingung zum Pr&uuml;fen, ob der zu l&ouml;schende Task vorhanden ist\" width=\"549,643\" height=\"212,5157\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 28: Bedingung zum Pr&uuml;fen, ob der zu l&ouml;schende Task vorhanden ist<\/span><\/b><\/p>\n<p>Dir ist vielleicht schon aufgefallen, dass &uuml;ber der Bedingung ein roter und ein gr&uuml;ner Punkt abgebildet sind. Diese kannst Du beeinflussen, indem Du f&uuml;r die Bedingung auf den Bereich <b>Einstellungen <\/b>klickst.<\/p>\n<p>Hier klickst Du nochmals auf den Namen <b>Aufgabe abrufen<\/b>. Es erscheinen die vier Optionen <b>Ist erfolgreich<\/b>, <b>Timeout<\/b>, <b>Wurde &uuml;bersprungen <\/b>und <b>Fehlgeschlagen<\/b>.<\/p>\n<p>Wir markieren wie in Bild 29 die beiden Eintr&auml;ge <b>Ist erfolgreich <\/b>und <b>Fehlgeschlagen<\/b>. Normalerweise ist hier nur <b>Ist erfolgreich <\/b>aktiviert. Das bedeutet, dass die weiteren Aktionen beim Fehlschlagen einer Aktion standardm&auml;&szlig;ig gar nicht erst ausgef&uuml;hrt werden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_030.png\" alt=\"Einstellung, f&uuml;r welches Ergebnis der Aktion Aufgabe abrufen die Bedingung &uuml;berhaupt aufgerufen werden soll\" width=\"549,643\" height=\"310,4201\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 29: Einstellung, f&uuml;r welches Ergebnis der Aktion Aufgabe abrufen die Bedingung &uuml;berhaupt aufgerufen werden soll<\/span><\/b><\/p>\n<p>Damit wir auch beim Fehlschlagen das korrekte Ergebnis in Form einer Antwort zur&uuml;ckgeben k&ouml;nnen, m&uuml;ssen wir hier auch <b>Fehlgeschlagen <\/b>aktivieren.<\/p>\n<p>Das Gleiche gilt f&uuml;r den ersten Schritt im ersten <b>True<\/b>-Zweig nach dem L&ouml;schen der Aufgabe und auch f&uuml;r die zweite Bedingung. Wir m&uuml;ssen hier immer <b>Ist erfolgreich <\/b>und <b>Fehlgeschlagen <\/b>aktivieren, damit der Flow in beiden F&auml;llen weiterl&auml;uft.<\/p>\n<p>Die aufrufende VBA-Funktion m&uuml;ssen wir noch nicht einmal anpassen. Nur, wenn uns der Grund f&uuml;r einen anderen Statuswert als <b>200 <\/b>interessiert, k&ouml;nnen wir diesen beispielsweise in der <b>MsgBox <\/b>noch wie folgt ausgeben:<\/p>\n<pre><span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & objXMLHTTP.status & \" - \" & objXMLHTTP.statusText & \" \" & objXMLHTTP.responseText<\/pre>\n<h2>Testen eines Flows<\/h2>\n<p>Oben rechts k&ouml;nnen wir nach dem Speichern eines Flows auf die Schaltfl&auml;che Testen klicken. Dies zeigt einen Bereich an, mit dem wir unter der Option <b>Automatisch <\/b>festlegen k&ouml;nnen, dass wir einen k&uuml;rzlich verwendeten Ausl&ouml;ser zum Testen nutzen wollen (siehe Bild 30). Wir haben in diesem Fall den Flow bereits einmal per VBA aufgerufen und somit Testdaten bereitgestellt. Diese k&ouml;nnen wir nun zum Aufruf zu Testzwecken nutzen. Klicken wir nach der Auswahl unten auf <b>Testen<\/b>, wird der Flow mit diesen Daten ausgef&uuml;hrt. Wir erhalten nun im Flow-Diagramm ausf&uuml;hrliche Informationen, welcher Schritt wie lange gedauert hat und welches Ergebnis diese geliefert haben. Au&szlig;erdem erfahren wir, welchen Pfad der Flow bei Verwendung von Bedingungen verwendet hat.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_031.png\" alt=\"Aufruf eines Tests\" width=\"424,643\" height=\"442,781\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 30: Aufruf eines Tests<\/span><\/b><\/p>\n<p>Zur Veranschaulichung haben wir in Bild 31 einmal den oberen Teil des Testergebnisses abgebildet.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_03\/pic_432_032.png\" alt=\"Ergebnis eines Tests\" width=\"674,643\" height=\"452,1127\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 31: Ergebnis eines Tests<\/span><\/b><\/p>\n<h2>Komplette Steuerung von Rest-APIs m&ouml;glich<\/h2>\n<p>Mit den hier vorgestellten Techniken k&ouml;nnen wir alle Aktionen, die in Flows m&ouml;glich sind, in einen Rest-API-Aufruf integrieren und die Antworten entsprechend aufbereiten. Und es gibt einige M&ouml;glichkeiten.<\/p>\n<p>Hier haben wir nur ein Beispiel geliefert daf&uuml;r, wie man mit VBA &uuml;ber eine Rest-API einen Flow starten kann. Es gibt jedoch noch viele andere M&ouml;glichkeiten, die deutlich werden, wenn wie einmal einen neuen Flow erstellen und uns die Vorlagen anschauen.<\/p>\n<p>Wir k&ouml;nnen vieles rund um die verschiedenen Connectoren erledigen &#8211; Office 365 Outlook, SharePoint, OneDrive for Business, Microsoft Forms, Microsoft Teams, Outlook.com und viele mehr.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Mit den hier vorgestellten Techniken kannst Du Deine To Do-Aufgaben vollst&auml;ndig von einer VBA-Anwendung aus steuern.<\/p>\n<p>Du kannst neue Listen anlegen, neue Aufgaben hinzuf&uuml;gen und Aufgaben l&ouml;schen.<\/p>\n<p>Aber es geht noch weiter, denn Du hast einige Grundlagen zur Programmierung von Power Automation gelernt. Damit kannst Du viele der Dienste im Microsoft-Universum steuern. In weiteren Artikeln werden wir sicher auf dieses Thema zur&uuml;ckkommen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>ToDoAufgabeMitPowerAutomateUndVBAAnlegen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/12AB51BC-3525-40BA-B54C-202B7C46B83D\/vbe_432.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In einem weiteren Artikel namens &#8220;To Do-Aufgabe mit Power Automate und VBA anlegen&#8221; (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA &uuml;ber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt &#8211; das Anlegen einer Aufgabe f&uuml;r eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n&auml;mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k&ouml;nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf&uuml;gen. Au&szlig;erdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l&ouml;schen k&ouml;nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l&ouml;schen k&ouml;nnen. Es gibt viel zu tun!<\/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":[662024,66032024,44000012,44000023],"tags":[],"yst_prominent_words":[],"class_list":["post-55000432","post","type-post","status-publish","format-standard","hentry","category-662024","category-66032024","category-Interaktiv","category-PowerApps"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"In einem weiteren Artikel namens &quot;To Do-Aufgabe mit Power Automate und VBA anlegen&quot; (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA \u00fcber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt - das Anlegen einer Aufgabe f\u00fcr eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n\u00e4mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k\u00f6nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf\u00fcgen. Au\u00dferdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l\u00f6schen k\u00f6nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l\u00f6schen k\u00f6nnen. Es gibt viel zu tun!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Andr\u00e9 Minhorst\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler\" \/>\n\t\t<meta property=\"og:description\" content=\"In einem weiteren Artikel namens &quot;To Do-Aufgabe mit Power Automate und VBA anlegen&quot; (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA \u00fcber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt - das Anlegen einer Aufgabe f\u00fcr eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n\u00e4mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k\u00f6nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf\u00fcgen. Au\u00dferdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l\u00f6schen k\u00f6nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l\u00f6schen k\u00f6nnen. Es gibt viel zu tun!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2024-08-07T10:19:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"-001-11-30T00:00:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler\" \/>\n\t\t<meta name=\"twitter:description\" content=\"In einem weiteren Artikel namens &quot;To Do-Aufgabe mit Power Automate und VBA anlegen&quot; (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA \u00fcber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt - das Anlegen einer Aufgabe f\u00fcr eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n\u00e4mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k\u00f6nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf\u00fcgen. Au\u00dferdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l\u00f6schen k\u00f6nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l\u00f6schen k\u00f6nnen. Es gibt viel zu tun!\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#blogposting\",\"name\":\"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler\",\"headline\":\"To Do mit VBA und Power Automate steuern\",\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/d0e758bb3e3f4607b443496ec53aa2cf\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#articleImage\"},\"datePublished\":\"2024-06-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#webpage\"},\"articleSection\":\"2024, 3\\\/2024, Interaktiv, PowerApps\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vbentwickler.de\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2024\\\/#listItem\",\"name\":\"2024\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2024\\\/#listItem\",\"position\":2,\"name\":\"2024\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2024\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2024\\\/3\\\/2024\\\/#listItem\",\"name\":\"3\\\/2024\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2024\\\/3\\\/2024\\\/#listItem\",\"position\":3,\"name\":\"3\\\/2024\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2024\\\/3\\\/2024\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#listItem\",\"name\":\"To Do mit VBA und Power Automate steuern\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2024\\\/#listItem\",\"name\":\"2024\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#listItem\",\"position\":4,\"name\":\"To Do mit VBA und Power Automate steuern\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2024\\\/3\\\/2024\\\/#listItem\",\"name\":\"3\\\/2024\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/cropped-header_vbe-1.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#organizationLogo\",\"width\":664,\"height\":225},\"image\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Andr\\u00e9 Minhorst\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#webpage\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/\",\"name\":\"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler\",\"description\":\"In einem weiteren Artikel namens \\\"To Do-Aufgabe mit Power Automate und VBA anlegen\\\" (www.vbentwickler.de\\\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA \\u00fcber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt - das Anlegen einer Aufgabe f\\u00fcr eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n\\u00e4mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k\\u00f6nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf\\u00fcgen. Au\\u00dferdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l\\u00f6schen k\\u00f6nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l\\u00f6schen k\\u00f6nnen. Es gibt viel zu tun!\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/To_Do_mit_VBA_und_Power_Automate_steuern\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"datePublished\":\"2024-06-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler","description":"In einem weiteren Artikel namens \"To Do-Aufgabe mit Power Automate und VBA anlegen\" (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA \u00fcber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt - das Anlegen einer Aufgabe f\u00fcr eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n\u00e4mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k\u00f6nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf\u00fcgen. Au\u00dferdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l\u00f6schen k\u00f6nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l\u00f6schen k\u00f6nnen. Es gibt viel zu tun!","canonical_url":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#blogposting","name":"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler","headline":"To Do mit VBA und Power Automate steuern","author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"},"image":{"@type":"ImageObject","url":"http:\/\/vg08.met.vgwort.de\/na\/d0e758bb3e3f4607b443496ec53aa2cf","@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#articleImage"},"datePublished":"2024-06-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#webpage"},"isPartOf":{"@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#webpage"},"articleSection":"2024, 3\/2024, Interaktiv, PowerApps"},{"@type":"BreadcrumbList","@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/vbentwickler.de#listItem","position":1,"name":"Home","item":"https:\/\/vbentwickler.de","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2024\/#listItem","name":"2024"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2024\/#listItem","position":2,"name":"2024","item":"https:\/\/vbentwickler.de\/category\/2024\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2024\/3\/2024\/#listItem","name":"3\/2024"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2024\/3\/2024\/#listItem","position":3,"name":"3\/2024","item":"https:\/\/vbentwickler.de\/category\/2024\/3\/2024\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#listItem","name":"To Do mit VBA und Power Automate steuern"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2024\/#listItem","name":"2024"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#listItem","position":4,"name":"To Do mit VBA und Power Automate steuern","previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2024\/3\/2024\/#listItem","name":"3\/2024"}}]},{"@type":"Organization","@id":"https:\/\/vbentwickler.de\/#organization","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","url":"https:\/\/vbentwickler.de\/","logo":{"@type":"ImageObject","url":"https:\/\/vbentwickler.de\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#organizationLogo","width":664,"height":225},"image":{"@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author","url":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Andr\u00e9 Minhorst"}},{"@type":"WebPage","@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#webpage","url":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/","name":"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler","description":"In einem weiteren Artikel namens \"To Do-Aufgabe mit Power Automate und VBA anlegen\" (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA \u00fcber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt - das Anlegen einer Aufgabe f\u00fcr eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n\u00e4mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k\u00f6nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf\u00fcgen. Au\u00dferdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l\u00f6schen k\u00f6nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l\u00f6schen k\u00f6nnen. Es gibt viel zu tun!","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/vbentwickler.de\/#website"},"breadcrumb":{"@id":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/#breadcrumblist"},"author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"creator":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"datePublished":"2024-06-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00"},{"@type":"WebSite","@id":"https:\/\/vbentwickler.de\/#website","url":"https:\/\/vbentwickler.de\/","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","inLanguage":"de-DE","publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","og:type":"article","og:title":"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler","og:description":"In einem weiteren Artikel namens &quot;To Do-Aufgabe mit Power Automate und VBA anlegen&quot; (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA \u00fcber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt - das Anlegen einer Aufgabe f\u00fcr eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n\u00e4mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k\u00f6nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf\u00fcgen. Au\u00dferdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l\u00f6schen k\u00f6nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l\u00f6schen k\u00f6nnen. Es gibt viel zu tun!","og:url":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/","og:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","og:image:secure_url":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","article:published_time":"2024-08-07T10:19:30+00:00","article:modified_time":"-001-11-30T00:00:00+00:00","twitter:card":"summary_large_image","twitter:title":"To Do mit VBA und Power Automate steuern - Visual Basic Entwickler","twitter:description":"In einem weiteren Artikel namens &quot;To Do-Aufgabe mit Power Automate und VBA anlegen&quot; (www.vbentwickler.de\/431) haben wir die Grundlagen zur Steuerung von Microsoft To Do mit VBA \u00fcber Power Automate beschrieben und einen ersten Anwendungsfall vorgestellt - das Anlegen einer Aufgabe f\u00fcr eine vorgegebene Liste. In diesem Artikel haben wir die wichtigsten Vorbereitungen getroffen, n\u00e4mlich das Anlegen eines Power Automate Kontos und das Freigeben des Zugriffs auf das To Do-Konto, dessen Listen und Aufgaben wir verwalten wollen. Dabei schauen wir uns in diesem Artikel an, wie wir die Aufrufe noch genauer gestalten k\u00f6nnen, um beispielsweise die Liste einzustellen, der wir eine neue Aufgabe hinzuf\u00fcgen. Au\u00dferdem schauen wir uns an, wie wir Aufgaben auslesen, bearbeiten oder l\u00f6schen k\u00f6nnen und wie wir Listen auslesen, anlegen, bearbeiten oder l\u00f6schen k\u00f6nnen. Es gibt viel zu tun!","twitter:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png"},"aioseo_meta_data":{"post_id":"55000432","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2024-08-07 08:20:18","updated":"2026-05-16 09:13:39","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2024\/\" title=\"2024\">2024<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2024\/3\/2024\/\" title=\"3\/2024\">3\/2024<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tTo Do mit VBA und Power Automate steuern\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/vbentwickler.de"},{"label":"2024","link":"https:\/\/vbentwickler.de\/category\/2024\/"},{"label":"3\/2024","link":"https:\/\/vbentwickler.de\/category\/2024\/3\/2024\/"},{"label":"To Do mit VBA und Power Automate steuern","link":"https:\/\/vbentwickler.de\/To_Do_mit_VBA_und_Power_Automate_steuern\/"}],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000432"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000432\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000432"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}