{"id":55000463,"date":"2025-04-01T00:00:00","date_gmt":"2025-07-02T14:48:58","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=463"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Automation_mit_VBA_und_Make","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Automation_mit_VBA_und_Make\/","title":{"rendered":"Automation mit VBA und Make"},"content":{"rendered":"<p><b>In vorherigen Artikeln haben wir bereits am Beispiel von Zapier gezeigt, wie wir Workflow Automation Tools nutzen k&ouml;nnen, um von VBA aus Automationen ansto&szlig;en k&ouml;nnen. Diese Automationen zielen auf Apps ab, die wir sonst &uuml;ber den Webbrowser steuern &#8211; GMail, CRMs, Zahlungsplattformen, Buchhaltungssoftware und viele mehr. Im vorliegenden Artikel nehmen wir einen weiteren Anbieter unter die Lupe, n&auml;mlich Make.com. Make ist grunds&auml;tzlich &auml;hnlich zu nutzen wir Zapier, aber es bietet einen wichtigen Vorteil: Wir k&ouml;nnen damit n&auml;mlich Ergebnisse der Aufrufe der jeweiligen Anwendung sogar abfragen und diese auf unserem Client weiterverarbeiten. Wenn wir beispielsweise eine Mail &uuml;ber Google Mail versenden, k&ouml;nnen wir uns einen Link zu der gesendeten E-Mail zur&uuml;ckliefern lassen, um diese sp&auml;ter per Mausklick im Browser zu &ouml;ffnen. Oder wenn wir einen Datensatz anlegen, beispielsweise f&uuml;r einen neuen Kunden im CRM-Systen, k&ouml;nnen wir uns die ID des neuen Kunden zur&uuml;ckgeben lassen, um diesen als Referenz in der Datenbank zu speichern. In diesem Artikel zeigen wir zun&auml;chst, wie wir eine einfache Automation in Make.com anlegen und diese per VBA aufrufen und uns das Ergebnis zur&uuml;ckgeben lassen.<\/b><\/p>\n<h2>Make.com-Konto erstellen<\/h2>\n<p>Wenn man sich noch nicht an den Gedanken gew&ouml;hnt hat: Der Trend in der IT geht dahin, dass man f&uuml;r die Nutzung von Software nicht mehr einmalig zahlt, sondern Abonnements abschlie&szlig;t, die man f&uuml;r die gesamte Nutzungsdauer monatlich oder j&auml;hrlich (meist mit Rabatt) abschlie&szlig;t. Die Zeiten, in denen man sich einmalig eine Software wie ein Office-Paket gekauft hat und dieses dann genutzt hat, bis der Support des Herstellers beendet und die Software aus Sicherheitsgr&uuml;nden nicht mehr genutzt werden sollte, sind allm&auml;hlich vorbei.<\/p>\n<p>Auch Workflow Automation Tools wie Zapier und Make.com bieten ihre Dienste nach dem gleichen Prinzip an: Man zahlt monatlich und erh&auml;lt daf&uuml;r ein entsprechendes Kontingent an Zugriffen.<\/p>\n<p>Zum Testen reicht im Falle von Make.com das kostenlose Paket aus, hier ist man allerdings auf einen Aufruf je 15 Minuten beschr&auml;nkt. Wesentlich mehr erh&auml;lt man bereits f&uuml;r 10,59 $ im Monat bei monatlicher Abrechnung beziehungsweise f&uuml;r 9,00 $ im Monat bei j&auml;hrlicher Abrechnung.<\/p>\n<p>Mehr Infos dazu findest Du unter folgendem Link:<\/p>\n<pre>https:\/\/www.make.com\/en\/pricing<\/pre>\n<p>Die Anmeldung ist schnell erledigt, nach der Angabe von Name, E-Mail und Kennwort brauchen wir nur noch den Best&auml;tigungslink in der danach zugesendeten E-Mail zu bet&auml;tigen (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_002.png\" alt=\"Erstellen eines Make.com-Kontos\" width=\"549,6265\" height=\"412,22\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Erstellen eines Make.com-Kontos<\/span><\/b><\/p>\n<h2>Automationen starten per Webhook<\/h2>\n<p>Automationen bestehen immer aus mindestens einem Trigger und einer Aktion. Der Trigger ist ein Element, das die Automation ausl&ouml;st.<\/p>\n<p>Meistens stammt der Trigger aus einer der Web-Anwendungen, die wir automatisieren wollen. Beispiele:<\/p>\n<ul>\n<li>eine neue Zeile in einem Google Sheet,<\/li>\n<li>eine neue Datei in Google Drive, <\/li>\n<li>eine neue E-Mail ist in Google Mail eingetroffen oder <\/li>\n<li>eine neue Datei wurde zu einem Dropbox-Ordner hinzugef&uuml;gt.<\/li>\n<\/ul>\n<p>In unserem Fall wollen wir den Trigger per VBA ausl&ouml;sen. Daf&uuml;r findet sich logischerweise kein vorbereiteter Trigger, denn wir k&ouml;nnen VBA nicht so von Make.com aus referenzieren, dass wir dort auf ein Ereignis lauschen k&ouml;nnten, wie wir es mit einer Ereignisprozedur innerhalb eines VBA-Klassenmoduls tun.<\/p>\n<p>Stattdessen nutzen wir einen speziellen Trigger namens Webhook. Das funktioniert so:<\/p>\n<p><b>Make.com <\/b>stellt uns eine bestimmten URL zur Verf&uuml;gung, die wir per VBA aufrufen. Die URL ist einzigartig und nur uns bekannt, nachdem wir den Webhook-Trigger angelegt haben.<\/p>\n<p>Diese URL rufen wir per VBA mit Unterst&uuml;tzung der Methoden der <b>XMLHTTP60<\/b>-Klasse auf.<\/p>\n<p>Mit dieser k&ouml;nnen wir alle notwendigen Informationen &uuml;bergeben und auch das Ergebnis verarbeiten.<\/p>\n<h2>Ergebnis verarbeiten<\/h2>\n<p>Im Gegensatz zu Zapier bietet <b>Make.com <\/b>auch eine Aktion an, mit der wir das Ergebnis der Automationen an die Instanz zur&uuml;ckgeben k&ouml;nnen, die den Webhook aufgerufen hat. Neben den vielen anderen Aktionen, die wir durchf&uuml;hren k&ouml;nnen, finden wir also auch eine namens <b>Webhook response<\/b>. Diese soll im folgenden grundlegenden Beispiel auch die einzige Aktion sein, die wir in unserem Basisworkflow nutzen wollen.<\/p>\n<h2>Ein Scenario erstellen<\/h2>\n<p>Was unter Zapier <b>Zap <\/b>genannt wird, hei&szlig;t unter Make.com <b>Scenario<\/b>. Von der Startseite k&ouml;nnen wir entweder direkt auf <b>Create a new scenario <\/b>klicken oder wir klicken links auf <b>Scenarios<\/b>, um die &Uuml;bersicht aller bisher erstellten Automationen einzusehen (siehe Bild 2). Auch dort finden wir wieder die Schaltfl&auml;che <b>Create a new scenario<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_003.png\" alt=\"Anlegen eines neuen Scenarios\" width=\"700\" height=\"332,5842\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Anlegen eines neuen Scenarios<\/span><\/b><\/p>\n<h2>Trigger zum Scenario hinzuf&uuml;gen<\/h2>\n<p>Damit landen wir im Scenario-Designer. Hier sehen wir ein gro&szlig;es Plus-Icon und ein Men&uuml; mit der &Uuml;bersicht der verf&uuml;gbaren Trigger (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_004.png\" alt=\"Ein noch leeres neues Scenario\" width=\"700\" height=\"460,6336\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ein noch leeres neues Scenario<\/span><\/b><\/p>\n<p>Es lohnt sich, einmal durch die Liste zu scrollen und sich anzuschauen, durch welche Anwendungen eine solche Automation gestartet werden kann.<\/p>\n<p>Klicken wir auf einen der Eintr&auml;ge, erscheint eine weitere Liste mit allen Ereignissen, die durch diese Anwendungen ausgel&ouml;st werden k&ouml;nnen. Im Falle von <b>Google Sheets<\/b> sind das beispielsweise neu hinzugef&uuml;gte Zeilen oder ge&auml;nderte Zeilen (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_005.png\" alt=\"Betrachten der verschiedenen Trigger einer Anwendung\" width=\"499,6267\" height=\"397,0833\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Betrachten der verschiedenen Trigger einer Anwendung<\/span><\/b><\/p>\n<h2>Webhook als Trigger verwenden<\/h2>\n<p>Wir wollen jedoch keine externe Anwendung als Trigger nutzen, sondern den Trigger per VBA von unserem VBA-Projekt aus ausl&ouml;sen.<\/p>\n<p>Dazu kehren wir zur Hauptliste der Anwendungen zur&uuml;ck, die Trigger ausl&ouml;sen k&ouml;nnen, und klicken hier auf den Eintrag <b>Webhook<\/b>.<\/p>\n<p>Dies liefert die drei Elemente aus Bild 5, wobei die ersten beiden Trigger sind und die dritte eine Aktion. Die beiden Trigger funktionieren wie folgt:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_006.png\" alt=\"Hinzuf&uuml;gen eines Triggers namens Custom webhook\" width=\"499,6267\" height=\"401,7617\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Hinzuf&uuml;gen eines Triggers namens Custom webhook<\/span><\/b><\/p>\n<ul>\n<li><b>Custom mailhook<\/b>: Wenn wir einen Mailhook erstellen, erhalten wir eine E-Mail-Adresse. An diese E-Mail-Adresse k&ouml;nnen wir eine E-Mail senden. Kommt diese bei <b>Make.com <\/b>an, l&ouml;st dies die Automation aus. In den nachfolgend zu definierenden Aktionen k&ouml;nnen wir auf die Eigenschaften der E-Mail wie Betreff, Inhalt, Datum, Absender et cetera zugreifen und diese weiterverarbeiten.<\/li>\n<li><b>Custom webhook<\/b>: Erstellen wir einen <b>Custom webhook<\/b>, erhalten wir hingegen eine URL. Der Trigger wird ausgel&ouml;st, wenn wir diese URL aufrufen. Im einfachsten Fall geben wir diese einfach im Webbrowser ein.<\/li>\n<\/ul>\n<p>Die Aktion <b>Webhook response <\/b>stellt die entscheidende Besonderheit von <b>Make.com <\/b>gegen&uuml;ber Zapier dar: Darin finden wir eine M&ouml;glichkeit, das Ergebnis einer durch einen Webhook aufgerufenen Automation auch wieder an die aufrufende Instanz zur&uuml;ckzugeben.<\/p>\n<h2>Trigger anlegen<\/h2>\n<p>Um den Trigger anzulegen, klicken wir auf <b>Custom webhook<\/b>.<\/p>\n<p>Dies &ouml;ffnet ein Popup, indem wir einen bestehenden Webhook ausw&auml;hlen oder einen neuen anlegen k&ouml;nnen (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_007.png\" alt=\"Anlegen und Konfigurieren des Webhooks\" width=\"524,6265\" height=\"250,8147\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Anlegen und Konfigurieren des Webhooks<\/span><\/b><\/p>\n<p>Wir ben&ouml;tigen hier einen neuen Hook und klicken auf die Schaltfl&auml;che <b>Add<\/b>.<\/p>\n<p>Nun erscheint der Dialog <b>Create a webhook<\/b>, in dem wir den Namen f&uuml;r unseren Webhook eintragen &#8211; in diesem Fall <b>Beispielwebhook<\/b> (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_008.png\" alt=\"Einstellen des Namens f&uuml;r den Webhook\" width=\"324,6267\" height=\"281,3431\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Einstellen des Namens f&uuml;r den Webhook<\/span><\/b><\/p>\n<p>Danach enth&auml;lt der Webhook weitere Informationen, zum Beispiel eine URL (siehe Bild 8). Diese kopieren wir mit einem Klick auf <b>Copy address to clipboard <\/b>in die Zwischenablage.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_009.png\" alt=\"Details des Webhooks\" width=\"499,6267\" height=\"289,5164\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Details des Webhooks<\/span><\/b><\/p>\n<p>An der Schaltfl&auml;che <b>Stop <\/b>erkennen wir, dass der Webhook bereits aktiv ist und auf Aufrufe wartet.<\/p>\n<h2>Erster Test des Webhooks<\/h2>\n<p>Damit k&ouml;nnen wir den Webhook nun bereits testen &#8211; ohne gr&ouml;&szlig;eren Aufwand wie beispielsweise eine VBA-Prozedur. Wir f&uuml;gen die Adresse einfach in einen Browser ein und rufen diese auf. Das Ergebnis ist der Text <b>Accepted<\/b> (siehe Bild 9). Das sieht sehr gut aus &#8211; der Aufruf funktioniert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_024.png\" alt=\"Aufruf des Webhooks &uuml;ber den Webbrowser\" width=\"499,6267\" height=\"187,7968\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Aufruf des Webhooks &uuml;ber den Webbrowser<\/span><\/b><\/p>\n<p>Damit wollen wir den Webhook nun speichern und klicken dazu auf die Schaltfl&auml;che <b>Save<\/b>.<\/p>\n<h2>Antwort benutzerdefiniert gestalten<\/h2>\n<p>Damit kommen wir zum zweiten Schritt unseres Beispiels. Hier wollen wir nun die Antwort <b>Accepted <\/b>durch eine benutzerdefinierte Antwort ersetzen. Dazu f&uuml;gen wir eine Aktion hinzu, indem wir auf die kleine <b>Plus<\/b>-Schaltfl&auml;che rechts von unserem Trigger klicken.<\/p>\n<p>Dies &ouml;ffnet die gleiche Auswahl wie zuvor (siehe Bild 10). Klicken wir hier erneut auf <b>Webhooks<\/b>, finden wir lediglich noch den Eintrag <b>Webhook response <\/b>vor. Logisch, denn wir k&ouml;nnen an dieser Stelle keinen weiteren Trigger hinzuf&uuml;gen &#8211; wir ben&ouml;tigen eine Aktion. Also w&auml;hlen wir <b>Webhook response <\/b>aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_010.png\" alt=\"Hinzuf&uuml;gen einer Aktion zum Workflow\" width=\"649,627\" height=\"327,5277\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Hinzuf&uuml;gen einer Aktion zum Workflow<\/span><\/b><\/p>\n<p>Dies f&uuml;gt das Element <b>Webhook response <\/b>hinzu und zeigt gleich seine Eigenschaften an (siehe Bild 11).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_011.png\" alt=\"Die neue Aktion im Scenario\" width=\"700\" height=\"238,104\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Die neue Aktion im Scenario<\/span><\/b><\/p>\n<p>Wenn wir das Feld <b>Body <\/b>anklicken, erscheint ein weiteres Popup.<\/p>\n<p>Hier sehen wir zum Beispiel die Variable <b>executionId<\/b>, welche eine ID f&uuml;r die aktuelle Ausf&uuml;hrung der Automation enth&auml;lt (siehe Bild 12).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_012.png\" alt=\"Verf&uuml;gbare Elemente f&uuml;r die Antwort\" width=\"649,627\" height=\"312,3669\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Verf&uuml;gbare Elemente f&uuml;r die Antwort<\/span><\/b><\/p>\n<p>Wir tragen testweise einfach einmal den Text <b>Benutzerdefinierte Antwort<\/b>, gefolgt von der Variablen <b>executeId <\/b>in das Feld <b>Body <\/b>ein. <b>executeId <\/b>ziehen wir dazu per Drag and Drop aus der Liste in das Feld <b>Body<\/b>, sodass wir das Ergebnis aus Bild 13 erhalten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_013.png\" alt=\"Hinzuf&uuml;ge nder executionId\" width=\"424,6267\" height=\"296,2299\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Hinzuf&uuml;ge nder executionId<\/span><\/b><\/p>\n<p>Mit einem Klick auf die Schaltfl&auml;che <b>Save <\/b>speichern wir das neue Element.<\/p>\n<p>Nun lauscht der Webhook allerdings nicht mehr auf unsere Anfragen, sodass wir im Browser zun&auml;chst diese Antwort erhalten:<\/p>\n<pre>There is no scenario listening for this webhook.<\/pre>\n<p>Deshalb klicken wir nun auf die Schaltfl&auml;che <b>Run once<\/b> (siehe Bild 14). Die Schaltfl&auml;che wandelt sich in eine <b>Stop<\/b>-Schaltfl&auml;che um und die Automation lauscht wieder auf Aufrufe.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_014.png\" alt=\"Starten der Automation\" width=\"649,627\" height=\"278,59\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Starten der Automation<\/span><\/b><\/p>\n<p>Rufen wir die URL des Webhooks nun erneut im Browser auf, erhalten wir das Ergebnis aus Bild 15. Die R&uuml;ckgabe einer individuell in der Automation festgelegten Antwort funktioniert also.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_015.png\" alt=\"Erfolgreicher Test der Automation\" width=\"649,627\" height=\"172,6061\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Erfolgreicher Test der Automation<\/span><\/b><\/p>\n<h2>N&auml;chste Schritte<\/h2>\n<p>Damit haben wir das Grundger&uuml;st geschaffen. Wir werden uns nun ansehen, wie wir die Automation per VBA starten k&ouml;nnen. Das Ziel ist es, die Automation zu starten und das Ergebnis, dass wir nun im Browser erhalten haben, per VBA auszulesen und zu verarbeiten.<\/p>\n<h2>Make.com-Automation per VBA aufrufen<\/h2>\n<p>Um die Automation per VBA zu starten und das Ergebnis zu erhalten, ben&ouml;tigen wir ein VBA-Projekt, f&uuml;r das wir in diesem Fall eine Microsoft Access-Datenbank nutzen. Wir k&ouml;nnten die nachfolgend beschriebenen Techniken jedoch auch im VBA-Projekt von Excel, Word, Outlook et cetera nutzen.<\/p>\n<p>Dem VBA-Projekt f&uuml;gen wir zwei Verweise hinzu (siehe Bild 16):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_001.png\" alt=\"Verweise f&uuml;r unser VBA-Projekt\" width=\"549,6265\" height=\"433,291\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Verweise f&uuml;r unser VBA-Projekt<\/span><\/b><\/p>\n<ul>\n<li><b>Microsoft XML, v6.0<\/b><\/li>\n<li><b>Microsoft Scripting Runtime<\/b><\/li>\n<\/ul>\n<p>Danach f&uuml;gen wir ein neues, leeres Modul hinzu und geben dort den Code aus Listing 1 ein. In dieser Prozedur tragen wir die URL des Webhooks f&uuml;r die Variable <b>strWebhookURL <\/b>ein. Au&szlig;erdem verwenden wir eine Variable namens <b>strJSON <\/b>mit einer leeren Zeichenkette. Diese dient erst einmal der Vorbereitung &#8211; wir werden diese in einem weiteren Beispiel noch f&uuml;llen. Danach erstellen wir ein neues Objekt des Typs <b>MSXML2.XMLHTTP60<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Make_Template()\r\n     <span style=\"color:blue;\">Dim <\/span>strWebhookURL<span style=\"color:blue;\"> As String<\/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>strJSON<span style=\"color:blue;\"> As String<\/span>\r\n     strWebhookURL = \"https:\/\/hook.eu2.make.com\/8kyskzlhvzgb9a6ltf4ccrg7fh9hxz3e\"\r\n     strJSON = \"\"\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = <span style=\"color:blue;\">New<\/span> MSXML2.XMLHTTP60\r\n     objXMLHTTP.Open \"POST\", strWebhookURL, <span style=\"color:blue;\">False<\/span>\r\n     objXMLHTTP.setRequestHeader \"Content-Type\", \"application\/json\"\r\n     \r\n     objXMLHTTP.send strJSON\r\n     <span style=\"color:blue;\">If <\/span>objXMLHTTP.status = 200<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Erfolgreich gesendet: \" & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> & objXMLHTTP.responseText\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Fehler beim Senden: \" & objXMLHTTP.status & \" - \" & objXMLHTTP.statusText\r\n     End If   \r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Testaufruf des Webhooks<\/span><\/b><\/p>\n<p>F&uuml;r dieses f&uuml;hren wir die Methode <b>Open <\/b>aus und &uuml;bergeben als Parameter die Werte <b>GET <\/b>als Methode, die URL sowie den Wert <b>False<\/b>, um anzugeben, dass wir auf das Ergebnis des Aufrufs warten wollen.<\/p>\n<p>Anderenfalls k&ouml;nnen wir das Ergebnis nicht verarbeiten.<\/p>\n<p>Au&szlig;erdem &uuml;bergeben wir noch einen Header, mit dem wir als Format der zu sendenden Daten als <b>application\/json <\/b>angeben.<\/p>\n<p>Schlie&szlig;lich f&uuml;hren wir den Aufruf mit der <b>send<\/b>-Methode aus und &uuml;bergeben dabei die in diesem Beispiel noch leere Zeichenkette aus <b>strJSON<\/b>.<\/p>\n<p>Liefert der Aufruf den Wert <b>200 <\/b>f&uuml;r die Eigenschaft <b>status <\/b>zur&uuml;ck, war der Aufruf erfolgreich und wir geben den Wert der Eigenschaft <b>responseText <\/b>in einer Meldung aus.<\/p>\n<p>Im Fehlerfall, also wenn <b>status <\/b>einen anderen Wert liefert, geben wir die Werte der Eigenschaften <b>status <\/b>und <b>statusText <\/b>aus.<\/p>\n<p>Dies k&ouml;nnen wir simulieren, indem wir beispielsweise der URL ein Zeichen hinzuf&uuml;gen, sodass diese nicht mehr vorhanden ist und erhalten als Status den Wert <b>404<\/b>.<\/p>\n<p>F&uuml;hren wir die Prozedur nun ohne Weiteres aus, erhalten wir als Ergebnis im Meldungsfenster allerdings den Text <b>Accepted <\/b>&#8211; also nicht den erwarteten Text.<\/p>\n<p>Das liegt daran, dass wir die Automation erst wieder aktivieren m&uuml;ssen, indem wir erneut auf <b>Run once <\/b>klicken und im nachfolgend erscheinenden Popup den Button <b>Wait for new data <\/b>bet&auml;tigen (siehe Bild 17).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_016.png\" alt=\"Erneutes Aktivieren der Automation\" width=\"424,6267\" height=\"175,6805\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Erneutes Aktivieren der Automation<\/span><\/b><\/p>\n<p>Damit erhalten wir nun auch das erwartete Ergebnis (siehe Bild 18).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_017.png\" alt=\"Ergebnis des erneuten Aufrufs\" width=\"424,6267\" height=\"179,0866\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Ergebnis des erneuten Aufrufs<\/span><\/b><\/p>\n<h2>Statuscode anpassen<\/h2>\n<p>Dies ist eine wichtige Beobachtung: Die Automation liefert also im Erfolgsfall immer den Wert <b>200<\/b>, auch wenn die Automation gerade nicht l&auml;uft. Das wollen wir im Code noch differenzieren, indem wir f&uuml;r die echte Antwort einen anderen Statuscode definieren.<\/p>\n<p>Dazu klicken wir in <b>Make.com <\/b>erneut auf die Aktion und geben f&uuml;r <b>Status <\/b>den Wert <b>201 <\/b>ein (siehe Bild 19).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_018.png\" alt=\"Definieren eines eigenen Statuswertes\" width=\"549,6265\" height=\"246,4626\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 19: Definieren eines eigenen Statuswertes<\/span><\/b><\/p>\n<p>Entsprechend passen wir auch die Bedingung an, mit der wir den Status untersuchen. Wir wandeln diese in ein <b>Select Case<\/b>-Statement um und f&uuml;gen sowohl f&uuml;r <b>201<\/b> als auch f&uuml;r <b>200 <\/b>eigene <b>Case<\/b>-Zweige hinzu:<\/p>\n<pre>Select Case objXMLHTTP.status\r\n     <span style=\"color:blue;\">Case <\/span>201\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Erfolgreich gesendet: \" & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n             & <span style=\"color:blue;\">vbCrLf<\/span> & objXMLHTTP.responseText\r\n     <span style=\"color:blue;\">Case <\/span>200\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Erfolgreich gesendet, aber Automation \" _\r\n             & \"nicht aktiv.\"\r\n     <span style=\"color:blue;\">Case Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Fehler beim Senden: \" _\r\n            & objXMLHTTP.status & \" - \" _\r\n            & objXMLHTTP.statusText\r\n<span style=\"color:blue;\">End Select<\/span><\/pre>\n<h2>Make.com-Automation dauerhaft aktivieren<\/h2>\n<p>Um die Automation dauerhaft zu aktivieren, aktivieren wir unten die Option <b>Immediately as data arrives<\/b>.<\/p>\n<p>Dies &ouml;ffnet ein Popup, in dem wir ausw&auml;hlen k&ouml;nnen, wie regelm&auml;&szlig;ig abgefragt werden soll, ob neue Aufrufe der URL eingegangen sind.<\/p>\n<p>Welchen Wert wir w&auml;hlen, h&auml;ngt vom Anwendungszweck ab.<\/p>\n<p>Wenn wir durch unseren Aufruf einfach nur eine Aktion triggern wollen, die irgendwann in n&auml;chster Zeit ausgef&uuml;hrt werden soll, k&ouml;nnen wir einen der Werte <b>At regular intervals<\/b>, <b>Every day<\/b>, <b>Days of week<\/b>, <b>Days of month <\/b>oder <b>Specified days <\/b>einstellen.<\/p>\n<p>Wenn wir jedoch einen Aufruf durchf&uuml;hren, der eine Aktion ausf&uuml;hrt, von der wir R&uuml;ckgabewerte erwarten, sollten wir hier <b>Immediately <\/b>einstellen. Nur so lauscht die Automation st&auml;ndig auf eingehende Aufrufe der URL (siehe Bild 20).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_019.png\" alt=\"Dauerhaftes Aktivieren der Automation\" width=\"649,627\" height=\"376,4071\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 20: Dauerhaftes Aktivieren der Automation<\/span><\/b><\/p>\n<h2>Aufruf erneut ausprobieren<\/h2>\n<p>Danach rufen wir zwei Mal unsere VBA-Prozedur auf und erhalten jeweils die Meldung mit dem Status 201 und unterschiedlichen Werten f&uuml;r den R&uuml;ckgabewert.<\/p>\n<p>Die Automation ist also nun st&auml;ndig bereits f&uuml;r Aufrufe.<\/p>\n<h2>Weitere Informationen &uuml;bergeben<\/h2>\n<p>Weiter oben haben wir bereits &uuml;ber die Variable <b>strJSON <\/b>gesprochen, die aktuell noch mit einer leeren Zeichenkette gef&uuml;llt &uuml;bergeben wird. Je nachdem, welche Aufgaben wir zwischen unseren Trigger und die Response-Aktion schieben, ben&ouml;tigen wir dazu weitere Daten.<\/p>\n<p>Ein Beispiel dazu stellen wir im Artikel <b>Google Mail mit Make.com und VBA statt Outlook <\/b>(<b>www.vbentwickler.de\/464<\/b>) vor, wo wir zeigen, wie wir &uuml;ber VBA und <b>Make.com <\/b>E-Mails &uuml;ber Google Mail verschicken k&ouml;nnen. Hier m&uuml;ssen wir beispielsweise Daten wie Empf&auml;nger, Betreff, Inhalt, Anlagen et cetera &uuml;bergeben.<\/p>\n<p>Genau zu diesem Zweck k&ouml;nnen wir die Variable <b>strJSON <\/b>nutzen. <\/p>\n<p>JSON ist ein ein strukturiertes Format wie XML, das allerdings anders formatiert wird.<\/p>\n<p>Am einfachsten ist der Einsatz von Name-Wert-Paaren. Diese k&ouml;nnen wir beispielsweise wie folgt in der Variablen <b>strJSON <\/b>festlegen und &uuml;bergeben:<\/p>\n<pre>strJSON = \"{\"\"firstName\"\":\"\"Andr&eacute;\"\",\"\"lastName\"\":\"\"Minhorst\"\"}\"<\/pre>\n<p>Mit dieser neuen Version der Zuweisung f&uuml;hren wir die Prozedur nun erneut aus. Das Ergebnis sollte wie zuvor mit Status <b>201 <\/b>erfolgreich sein.<\/p>\n<h2>Einblick in die Historie der Aufrufe<\/h2>\n<p>Nun wollen wir uns ansehen, ob die Daten erfolgreich &uuml;bergeben wurden und was wir damit machen k&ouml;nnen.<\/p>\n<p>Dazu klicken wir zun&auml;chst oben links auf den Pfeil neben <b>Integration Webhooks <\/b>(siehe Bild 21). <b>Integration Webhooks <\/b>ist &uuml;brigens der Name unserer Automation, den wir in diesem Zuge gleich einmal auf <b>Beispiel Webhook <\/b>&auml;ndern. Anschlie&szlig;end klicken wir diesen einfach an und tragen den gew&uuml;nschten Namen ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_020.png\" alt=\"Zur&uuml;ck zur &Uuml;bersicht\" width=\"499,6267\" height=\"239,9158\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 21: Zur&uuml;ck zur &Uuml;bersicht<\/span><\/b><\/p>\n<p>Damit landen wir auf der &Uuml;bersicht aus Bild 22. Nach einem Abgleich, ob die Zeit mit unserer letzten Ausf&uuml;hrung &uuml;bereinstimmt, klicken wir den entsprechenden Eintrag an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_021.png\" alt=\"Anklicken eines History-Eintrags\" width=\"649,627\" height=\"381,2526\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 22: Anklicken eines History-Eintrags<\/span><\/b><\/p>\n<p>Dies zeigt wieder den Aufbau des Scenarios an. Wenn wir nun auf die Lupe des Triggers klicken, blendet <b>Make.com <\/b>ein Popup ein, dass Informationen &uuml;ber die gelieferten Daten enth&auml;lt (siehe Bild 23).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_022.png\" alt=\"Hier sehen wir die Eingangsparameter und ihre Werte.\" width=\"700\" height=\"346,5967\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 23: Hier sehen wir die Eingangsparameter und ihre Werte.<\/span><\/b><\/p>\n<h2>Eingangsparameter weiterverarbeiten<\/h2>\n<p>Alle dort angezeigten Informationen k&ouml;nnen wir in den folgenden Schritten weiterverarbeiten. In diesem Fall liegt uns nur der zweite Schritt vor, der die Response f&uuml;r den Aufruf liefern soll.<\/p>\n<p>Hier wollen wir nun die beiden &uuml;bergebenen Informationen zusammenf&uuml;gen und an den Aufruf zur&uuml;ckgeben.<\/p>\n<p>Das ist zugegebenerma&szlig;en nicht besonders einfallsreich und wir k&ouml;nnten noch einige Schritte dazwischenschieben &#8211; beispielsweise indem wir einen neuen Kunden in einem CRM anlegen und f&uuml;r diesen den &uuml;bergebenen Vornamen und Nachnamen eintragen. Mit dem <b>Response<\/b>-Element k&ouml;nnten wir die ID des neu angelegten Kunden im CRM zur&uuml;ckliefern.<\/p>\n<p>Dies w&uuml;rde jedoch hier den Rahmen sprengen, also wollen wir die einfache L&ouml;sung als Beispiel verwenden.<\/p>\n<p>Um das <b>Response<\/b>-Element anzupassen, klicken wir oben auf <b>Diagram<\/b>, dann auf das Scenario und schlie&szlig;lich nochmal auf das anzupassende Element.<\/p>\n<p>Dies blendet wieder die Eigenschaften des Elements ein. Hier klicken wir in das Textfeld <b>Body<\/b> und das nun erscheinende Popup zeigt nun direkt die &uuml;bergebenen Parameter aus dem Trigger-Element an (siehe Bild 24).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_023.png\" alt=\"Eingangsparameter nutzen\" width=\"599,6265\" height=\"260,3362\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 24: Eingangsparameter nutzen<\/span><\/b><\/p>\n<h2>Falls nicht die erwarteten Parameter erscheinen<\/h2>\n<p>In unserem Fall hatten wir zuvor einmal ein JSON mit anderen Bezeichnern gesendet, n&auml;mlich <b>name <\/b>und <b>project<\/b>.<\/p>\n<p>Wie sich hier zeigt, merkt sich <b>Make.com <\/b>die Bezeichner an einer bestimmten Stelle, n&auml;mlich wenn zum ersten Mal ein JSON-Dokument mitgesendet wird. <\/p>\n<p>Wenn wir sp&auml;ter ein JSON-Dokument mit anderen Elementen senden, werden dennoch die zuerst gespeicherten Parameter angezeigt.<\/p>\n<p>Wir k&ouml;nnen dies jedoch zur&uuml;cksetzen. Dazu klicken wir auf das erste Webhook-Element und finden im Popup nun den Button <b>Redetermine data structure <\/b>vor (siehe Bild 25).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_026.png\" alt=\"Zur&uuml;cksetzen der erwarteten Datenstruktur\" width=\"599,6265\" height=\"324,0999\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 25: Zur&uuml;cksetzen der erwarteten Datenstruktur<\/span><\/b><\/p>\n<p>Diesen klicken wir nun an und sehen nun die Ansicht aus Bild 26. Der Webhook wartet nun auf einen Aufruf mit der neuen Datenstruktur.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_027.png\" alt=\"Der Webhook wartet auf einen Aufruf mit der neuen Datenstruktur.\" width=\"599,6265\" height=\"351,1027\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 26: Der Webhook wartet auf einen Aufruf mit der neuen Datenstruktur.<\/span><\/b><\/p>\n<p>Also starten wir unsere VBA-Prozedur mit dem Aufruf mit der neuen JSON-Struktur erneut und erhalten als Ergebnis den Status <b>200<\/b>. Das ist korrekt, denn dieser Aufruf dient nur der &Uuml;bergabe der neuen Parameterbezeichnungen. In Make.com sehen wir nun, dass die neue Datenstruktur erfolgreich erkannt wurde (siehe Bild 27).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_028.png\" alt=\"Best&auml;tigung der neuen Datenstruktur\" width=\"424,6267\" height=\"312,7871\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 27: Best&auml;tigung der neuen Datenstruktur<\/span><\/b><\/p>\n<p>Mit einem Klick auf <b>Save <\/b>speichern wir den aktuellen Zustand.<\/p>\n<p>Danach sollten die alten Elemente verschwunden sein. Falls das nicht der Fall ist, k&ouml;nnen entweder damit leben oder wir erstellen das Scenario einmal komplett neu.<\/p>\n<p>Das Neuerstellen ist mitunter aufwendig, wenn wir bereits mehrere Aktionen definiert haben.<\/p>\n<p>Deshalb k&ouml;nnen wir folgende Technik nutzen:<\/p>\n<ul>\n<li>Wir klicken unten im Men&uuml; auf die Schaltfl&auml;che mit den drei Punkten und w&auml;hlen den Befehl <b>Export blueprint <\/b>aus (siehe Bild 28). Dies speichert eine JSON-Datei mit der aktuellen Definition unseres Scenarios in dem angegebenen Ordner.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_033.png\" alt=\"Exportieren eines Blueprints\" width=\"649,627\" height=\"121,1942\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 28: Exportieren eines Blueprints<\/span><\/b><\/p>\n<li>Wir l&ouml;schen das aktuelle Scenario. Das ist notwendig, damit wir im gleich neu zu importierenden Scenario den im ersten Scenario definierten Webhook nutzen k&ouml;nnen. Nur so k&ouml;nnen wir den Webhook mit der gleichen URL &uuml;bernehmen.<\/li>\n<li>Dann legen wir ein neues, leeres Scenario an und w&auml;hlen f&uuml;r dieses auf die gleiche Weise den Befehl <b>Import blueprint <\/b>aus. Hier selektieren wir die zuvor gespeicherte <b>.json<\/b>-Datei.<\/li>\n<\/ul>\n<p>Klicken wir nun auf das Element f&uuml;r die Response, finden wir endlich die aktualisierte Liste nur mit den neuen Parametern vor (siehe Bild 29).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_029.png\" alt=\"Die neue Version zeigt nun nur noch die gew&uuml;nschten Parameter an.\" width=\"649,627\" height=\"333,8688\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 29: Die neue Version zeigt nun nur noch die gew&uuml;nschten Parameter an.<\/span><\/b><\/p>\n<p>Hier stellen wir nun einen Body zusammen, der uns die &uuml;bersendeten Werte f&uuml;r <b>firstName <\/b>und <b>lastName <\/b>zur&uuml;ckliefert.<\/p>\n<p>Das Ergebnis nach einem erneuten Aufruf unserer VBA-Prozedur sehen wir in Bild 30.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_030.png\" alt=\"Meldung &uuml;ber den erfolgreichen Versand einer E-Mail mit R&uuml;ckgabewert\" width=\"424,6267\" height=\"205,6438\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 30: Meldung &uuml;ber den erfolgreichen Versand einer E-Mail mit R&uuml;ckgabewert<\/span><\/b><\/p>\n<h2>Response im JSON-Format zur&uuml;ckliefern<\/h2>\n<p>Fr&uuml;her oder sp&auml;ter werden wir komplexere Antworten zur&uuml;ckgeben, die wir in der aufrufenden Prozedur per VBA auswerten m&uuml;ssen.<\/p>\n<p>Hier bietet es sich an, die Antworten gleich auch im JSON-Format zur&uuml;ckzuliefern.<\/p>\n<p>In unserem Beispiel gestalten wir den Body des Response-Elements nun wie in Bild 31.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_031.png\" alt=\"Zusammenstellen der Antwort im JSON-Format\" width=\"424,6267\" height=\"380,3571\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 31: Zusammenstellen der Antwort im JSON-Format<\/span><\/b><\/p>\n<p>Die Meldung sieht nach dem Speichern des Scenarios und dem erneuten Ausf&uuml;hren der VBA-Prozedur nun wie in Bild 32 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2025_02\/pic_463_032.png\" alt=\"Antwort im JSON-Format\" width=\"424,6267\" height=\"177,2713\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 32: Antwort im JSON-Format<\/span><\/b><\/p>\n<p>Das Ergebnis w&uuml;rden wir im Produktiveinsatz entsprechend auswerten. Dazu bieten sich die Tools an, die wir in den Artikeln <b>Mit JSON arbeiten <\/b>(<b>www.vbentwickler.de\/361<\/b>) und <b>JSON-Dokumente per Objektmodell zusammenstellen <\/b>(<b>www.vbentwickler.de\/412<\/b>) vorgestellt haben.<\/p>\n<h2>Auswerten der JSON-Antwort<\/h2>\n<p>F&uuml;r die Auswertung einer solche Antwort passen wir den Code ein wenig an (siehe neue Version in Listing 2). Wir f&uuml;gen folgende Variablen hinzu:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Make_MitJSONResponse()\r\n     <span style=\"color:blue;\">Dim <\/span>strWebhookURL<span style=\"color:blue;\"> As String<\/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>strJSON<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     strWebhookURL = \"https:\/\/hook.eu2.make.com\/8kyskzlhvzgb9a6ltf4ccrg7fh9hxz3e\"\r\n     strJSON = \"{\"\"firstName\"\":\"\"Andr&eacute;\"\",\"\"lastName\"\":\"\"Minhorst\"\"}\"\r\n     <span style=\"color:blue;\">Set<\/span> objXMLHTTP = <span style=\"color:blue;\">New<\/span> MSXML2.XMLHTTP60\r\n     objXMLHTTP.Open \"POST\", strWebhookURL, <span style=\"color:blue;\">False<\/span>\r\n     objXMLHTTP.setRequestHeader \"Content-Type\", \"application\/json\"\r\n     \r\n     objXMLHTTP.send strJSON\r\n     Select Case objXMLHTTP.status\r\n         <span style=\"color:blue;\">Case <\/span>201\r\n             strResponse = objXMLHTTP.responseText\r\n             <span style=\"color:blue;\">Debug.Print<\/span> GetJSONDOM(strResponse, <span style=\"color:blue;\">True<\/span>)\r\n             <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strResponse)\r\n             <span style=\"color:blue;\">Debug.Print<\/span> \"ExecutionID: \" & objJSON.Item(\"executionId\")\r\n             <span style=\"color:blue;\">Debug.Print<\/span> \"Customer:    \" & objJSON.Item(\"customer\")\r\n         <span style=\"color:blue;\">Case <\/span>200\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Erfolgreich gesendet, aber Automation nicht aktiv.\"\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Fehler beim Senden: \" & objXMLHTTP.status & \" - \" & objXMLHTTP.statusText\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n     \r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Aufruf des Webhooks mit Auswertung der JSON-Antwort<\/span><\/b><\/p>\n<ul>\n<li><b>strResponse <\/b>speichert die gelieferte Antwort<\/li>\n<li><b>objJSON <\/b>nimmt ein Objektmodell mit dem Inhalt des JSON-Dokuments auf<\/li>\n<\/ul>\n<p>Mit der <b>send<\/b>-Methode geben wir unser JSON-Dokument mit den zu verarbeitenden Daten an den Webhook weiter. Wenn der Aufruf erfolgreich ist (<b>status <\/b>liefert den Wert <b>201<\/b>), speichern wir den Inhalt der Eigenschaft <b>responseText <\/b>in der Variablen <b>strResponse<\/b>.<\/p>\n<p>Danach nutzen wir zuerst die Funktion <b>GetJSONDOM<\/b>, um die Anweisungen im Direktbereich auszugeben, die f&uuml;r das Abrufen der entsprechenden Werte aus dem in <b>objJSON <\/b>gespeicherten Objekt erforderlich sind.<\/p>\n<p>Damit erhalten wir in diesem Fall:<\/p>\n<pre>objJSON.Item(\"executionId\"):a3af7fa2962b4c5abd28f574daa4ab\r\nobjJSON.Item(\"customer\"):Andr&eacute; Minhorst<\/pre>\n<p>Die vorn angef&uuml;hrten Ausdr&uuml;cke k&ouml;nnen wir dann im Code nutzen, um die entsprechenden Werte aus dem JSON-Dokument auszulesen. Dies erledigen wir dann in den folgenden beiden Zeilen.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Artikel zeigt, wie wir eine einfache Automation durch ein Scenario in <b>Make.com <\/b>abbilden. Dieses erm&ouml;glicht es uns nicht nur, verschiedene Tools zu automatisieren, sondern liefert auch ein Ergebnis zur&uuml;ck.<\/p>\n<p>Dabei haben wir uns zun&auml;chst auf das Grundger&uuml;st konzentriert. Zwischen dem Trigger und der Aktion, welche die Response zur&uuml;ckliefert, k&ouml;nnen wir noch beliebig viele weiterer Aktionen einf&uuml;gen, die gegebenenfalls auch verschachtelt oder in Schleifen durchgef&uuml;hrt werden k&ouml;nnen.<\/p>\n<p>Ein Beispiel daf&uuml;r liefern wir mit dem Artikel Google Mail mit <b>Make.com und VBA statt Outlook <\/b>(<b>www.vbentwickler.de\/464<\/b>). Hier f&uuml;gen wir zwischen die bereits vorgestellten Elemente weitere Aktionen ein, mit denen wir eine vollst&auml;ndige E-Mail &uuml;ber Google Mail versenden k&ouml;nnen.<\/p>\n<p>Dabei wollen wir nicht nur die Standardelemente wie Betreff und Inhalt nutzen, sondern auch noch Extras wie Anlagen einf&uuml;gen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>AutomationMitMake.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/8EAEF940-264A-4754-866C-C3695D328440\/vbe_463.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In vorherigen Artikeln haben wir bereits am Beispiel von Zapier gezeigt, wie wir Workflow Automation Tools nutzen k&ouml;nnen, um von VBA aus Automationen ansto&szlig;en k&ouml;nnen. Diese Automationen zielen auf Apps ab, die wir sonst &uuml;ber den Webbrowser steuern &#8211; GMail, CRMs, Zahlungsplattformen, Buchhaltungssoftware und viele mehr. Im vorliegenden Artikel nehmen wir einen weiteren Anbieter unter die Lupe, n&auml;mlich Make.com. Make ist grunds&auml;tzlich &auml;hnlich zu nutzen wir Zapier, aber es bietet einen wichtigen Vorteil: Wir k&ouml;nnen damit n&auml;mlich Ergebnisse der Aufrufe der jeweiligen Anwendung sogar abfragen und diese auf unserem Client weiterverarbeiten. Wenn wir beispielsweise eine Mail &uuml;ber Google Mail versenden, k&ouml;nnen wir uns einen Link zu der gesendeten E-Mail zur&uuml;ckliefern lassen, um diese sp&auml;ter per Mausklick im Browser zu &ouml;ffnen. Oder wenn wir einen Datensatz anlegen, beispielsweise f&uuml;r einen neuen Kunden im CRM-Systen, k&ouml;nnen wir uns die ID des neuen Kunden zur&uuml;ckgeben lassen, um diesen als Referenz in der Datenbank zu speichern. In diesem Artikel zeigen wir zun&auml;chst, wie wir eine einfache Automation in Make.com anlegen und diese per VBA aufrufen und uns das Ergebnis zur&uuml;ckgeben lassen.<\/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":[66022025,662025,44000012,44000023],"tags":[],"yst_prominent_words":[],"class_list":["post-55000463","post","type-post","status-publish","format-standard","hentry","category-66022025","category-662025","category-Interaktiv","category-PowerApps"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000463","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=55000463"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000463\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000463"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}