Automation mit VBA und Make

Möchtest Du den gesamten Artikel lesen? Und vielleicht sogar den Artikel im PDF-Format und die Beispieldateien herunterladen? Dann hole Dir den Artikel gleich hier - völlig kostenlos!

In vorherigen Artikeln haben wir bereits am Beispiel von Zapier gezeigt, wie wir Workflow Automation Tools nutzen können, um von VBA aus Automationen anstoßen können. Diese Automationen zielen auf Apps ab, die wir sonst über den Webbrowser steuern – GMail, CRMs, Zahlungsplattformen, Buchhaltungssoftware und viele mehr. Im vorliegenden Artikel nehmen wir einen weiteren Anbieter unter die Lupe, nämlich Make.com. Make ist grundsätzlich ähnlich zu nutzen wir Zapier, aber es bietet einen wichtigen Vorteil: Wir können damit nämlich Ergebnisse der Aufrufe der jeweiligen Anwendung sogar abfragen und diese auf unserem Client weiterverarbeiten. Wenn wir beispielsweise eine Mail über Google Mail versenden, können wir uns einen Link zu der gesendeten E-Mail zurückliefern lassen, um diese später per Mausklick im Browser zu öffnen. Oder wenn wir einen Datensatz anlegen, beispielsweise für einen neuen Kunden im CRM-Systen, können wir uns die ID des neuen Kunden zurückgeben lassen, um diesen als Referenz in der Datenbank zu speichern. In diesem Artikel zeigen wir zunächst, wie wir eine einfache Automation in Make.com anlegen und diese per VBA aufrufen und uns das Ergebnis zurückgeben lassen.

Make.com-Konto erstellen

Wenn man sich noch nicht an den Gedanken gewöhnt hat: Der Trend in der IT geht dahin, dass man für die Nutzung von Software nicht mehr einmalig zahlt, sondern Abonnements abschließt, die man für die gesamte Nutzungsdauer monatlich oder jährlich (meist mit Rabatt) abschließ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ünden nicht mehr genutzt werden sollte, sind allmählich vorbei.

Auch Workflow Automation Tools wie Zapier und Make.com bieten ihre Dienste nach dem gleichen Prinzip an: Man zahlt monatlich und erhält dafür ein entsprechendes Kontingent an Zugriffen.

Zum Testen reicht im Falle von Make.com das kostenlose Paket aus, hier ist man allerdings auf einen Aufruf je 15 Minuten beschränkt. Wesentlich mehr erhält man bereits für 10,59 $ im Monat bei monatlicher Abrechnung beziehungsweise für 9,00 $ im Monat bei jährlicher Abrechnung.

Mehr Infos dazu findest Du unter folgendem Link:

https://www.make.com/en/pricing

Die Anmeldung ist schnell erledigt, nach der Angabe von Name, E-Mail und Kennwort brauchen wir nur noch den Bestätigungslink in der danach zugesendeten E-Mail zu betätigen (siehe Bild 1).

Erstellen eines Make.com-Kontos

Bild 1: Erstellen eines Make.com-Kontos

Automationen starten per Webhook

Automationen bestehen immer aus mindestens einem Trigger und einer Aktion. Der Trigger ist ein Element, das die Automation auslöst.

Meistens stammt der Trigger aus einer der Web-Anwendungen, die wir automatisieren wollen. Beispiele:

  • eine neue Zeile in einem Google Sheet,
  • eine neue Datei in Google Drive,
  • eine neue E-Mail ist in Google Mail eingetroffen oder
  • eine neue Datei wurde zu einem Dropbox-Ordner hinzugefügt.

In unserem Fall wollen wir den Trigger per VBA auslösen. Dafür findet sich logischerweise kein vorbereiteter Trigger, denn wir können VBA nicht so von Make.com aus referenzieren, dass wir dort auf ein Ereignis lauschen könnten, wie wir es mit einer Ereignisprozedur innerhalb eines VBA-Klassenmoduls tun.

Stattdessen nutzen wir einen speziellen Trigger namens Webhook. Das funktioniert so:

Make.com stellt uns eine bestimmten URL zur Verfügung, die wir per VBA aufrufen. Die URL ist einzigartig und nur uns bekannt, nachdem wir den Webhook-Trigger angelegt haben.

Diese URL rufen wir per VBA mit Unterstützung der Methoden der XMLHTTP60-Klasse auf.

Mit dieser können wir alle notwendigen Informationen übergeben und auch das Ergebnis verarbeiten.

Ergebnis verarbeiten

Im Gegensatz zu Zapier bietet Make.com auch eine Aktion an, mit der wir das Ergebnis der Automationen an die Instanz zurückgeben können, die den Webhook aufgerufen hat. Neben den vielen anderen Aktionen, die wir durchführen können, finden wir also auch eine namens Webhook response. Diese soll im folgenden grundlegenden Beispiel auch die einzige Aktion sein, die wir in unserem Basisworkflow nutzen wollen.

Ein Scenario erstellen

Was unter Zapier Zap genannt wird, heißt unter Make.com Scenario. Von der Startseite können wir entweder direkt auf Create a new scenario klicken oder wir klicken links auf Scenarios, um die Übersicht aller bisher erstellten Automationen einzusehen (siehe Bild 2). Auch dort finden wir wieder die Schaltfläche Create a new scenario.

Anlegen eines neuen Scenarios

Bild 2: Anlegen eines neuen Scenarios

Trigger zum Scenario hinzufügen

Damit landen wir im Scenario-Designer. Hier sehen wir ein großes Plus-Icon und ein Menü mit der Übersicht der verfügbaren Trigger (siehe Bild 3).

Ein noch leeres neues Scenario

Bild 3: Ein noch leeres neues Scenario

Es lohnt sich, einmal durch die Liste zu scrollen und sich anzuschauen, durch welche Anwendungen eine solche Automation gestartet werden kann.

Klicken wir auf einen der Einträge, erscheint eine weitere Liste mit allen Ereignissen, die durch diese Anwendungen ausgelöst werden können. Im Falle von Google Sheets sind das beispielsweise neu hinzugefügte Zeilen oder geänderte Zeilen (siehe Bild 4).

Betrachten der verschiedenen Trigger einer Anwendung

Bild 4: Betrachten der verschiedenen Trigger einer Anwendung

Webhook als Trigger verwenden

Wir wollen jedoch keine externe Anwendung als Trigger nutzen, sondern den Trigger per VBA von unserem VBA-Projekt aus auslösen.

Dazu kehren wir zur Hauptliste der Anwendungen zurück, die Trigger auslösen können, und klicken hier auf den Eintrag Webhook.

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:

Hinzufügen eines Triggers namens Custom webhook

Bild 5: Hinzufügen eines Triggers namens Custom webhook

  • Custom mailhook: Wenn wir einen Mailhook erstellen, erhalten wir eine E-Mail-Adresse. An diese E-Mail-Adresse können wir eine E-Mail senden. Kommt diese bei Make.com an, löst dies die Automation aus. In den nachfolgend zu definierenden Aktionen können wir auf die Eigenschaften der E-Mail wie Betreff, Inhalt, Datum, Absender et cetera zugreifen und diese weiterverarbeiten.
  • Custom webhook: Erstellen wir einen Custom webhook, erhalten wir hingegen eine URL. Der Trigger wird ausgelöst, wenn wir diese URL aufrufen. Im einfachsten Fall geben wir diese einfach im Webbrowser ein.

Die Aktion Webhook response stellt die entscheidende Besonderheit von Make.com gegenüber Zapier dar: Darin finden wir eine Möglichkeit, das Ergebnis einer durch einen Webhook aufgerufenen Automation auch wieder an die aufrufende Instanz zurückzugeben.

Trigger anlegen

Um den Trigger anzulegen, klicken wir auf Custom webhook.

Dies öffnet ein Popup, indem wir einen bestehenden Webhook auswählen oder einen neuen anlegen können (siehe Bild 6).

Anlegen und Konfigurieren des Webhooks

Bild 6: Anlegen und Konfigurieren des Webhooks

Wir benötigen hier einen neuen Hook und klicken auf die Schaltfläche Add.

Nun erscheint der Dialog Create a webhook, in dem wir den Namen für unseren Webhook eintragen – in diesem Fall Beispielwebhook (siehe Bild 7).

Einstellen des Namens für den Webhook

Bild 7: Einstellen des Namens für den Webhook

Danach enthält der Webhook weitere Informationen, zum Beispiel eine URL (siehe Bild 8). Diese kopieren wir mit einem Klick auf Copy address to clipboard in die Zwischenablage.

Details des Webhooks

Bild 8: Details des Webhooks

An der Schaltfläche Stop erkennen wir, dass der Webhook bereits aktiv ist und auf Aufrufe wartet.

Erster Test des Webhooks

Damit können wir den Webhook nun bereits testen – ohne größeren Aufwand wie beispielsweise eine VBA-Prozedur. Wir fügen die Adresse einfach in einen Browser ein und rufen diese auf. Das Ergebnis ist der Text Accepted (siehe Bild 9). Das sieht sehr gut aus – der Aufruf funktioniert.

Aufruf des Webhooks über den Webbrowser

Bild 9: Aufruf des Webhooks über den Webbrowser

Damit wollen wir den Webhook nun speichern und klicken dazu auf die Schaltfläche Save.

Antwort benutzerdefiniert gestalten

Damit kommen wir zum zweiten Schritt unseres Beispiels. Hier wollen wir nun die Antwort Accepted durch eine benutzerdefinierte Antwort ersetzen. Dazu fügen wir eine Aktion hinzu, indem wir auf die kleine Plus-Schaltfläche rechts von unserem Trigger klicken.

Dies öffnet die gleiche Auswahl wie zuvor (siehe Bild 10). Klicken wir hier erneut auf Webhooks, finden wir lediglich noch den Eintrag Webhook response vor. Logisch, denn wir können an dieser Stelle keinen weiteren Trigger hinzufügen – wir benötigen eine Aktion. Also wählen wir Webhook response aus.

Hinzufügen einer Aktion zum Workflow

Bild 10: Hinzufügen einer Aktion zum Workflow

Dies fügt das Element Webhook response hinzu und zeigt gleich seine Eigenschaften an (siehe Bild 11).

Die neue Aktion im Scenario

Bild 11: Die neue Aktion im Scenario

Wenn wir das Feld Body anklicken, erscheint ein weiteres Popup.

Hier sehen wir zum Beispiel die Variable executionId, welche eine ID für die aktuelle Ausführung der Automation enthält (siehe Bild 12).

Verfügbare Elemente für die Antwort

Bild 12: Verfügbare Elemente für die Antwort

Wir tragen testweise einfach einmal den Text Benutzerdefinierte Antwort, gefolgt von der Variablen executeId in das Feld Body ein. executeId ziehen wir dazu per Drag and Drop aus der Liste in das Feld Body, sodass wir das Ergebnis aus Bild 13 erhalten.

Hinzufüge nder executionId

Bild 13: Hinzufüge nder executionId

Mit einem Klick auf die Schaltfläche Save speichern wir das neue Element.

Nun lauscht der Webhook allerdings nicht mehr auf unsere Anfragen, sodass wir im Browser zunächst diese Antwort erhalten:

There is no scenario listening for this webhook.

Deshalb klicken wir nun auf die Schaltfläche Run once (siehe Bild 14). Die Schaltfläche wandelt sich in eine Stop-Schaltfläche um und die Automation lauscht wieder auf Aufrufe.

Starten der Automation

Bild 14: Starten der Automation

Rufen wir die URL des Webhooks nun erneut im Browser auf, erhalten wir das Ergebnis aus Bild 15. Die Rückgabe einer individuell in der Automation festgelegten Antwort funktioniert also.

Erfolgreicher Test der Automation

Bild 15: Erfolgreicher Test der Automation

Nächste Schritte

Damit haben wir das Grundgerüst geschaffen. Wir werden uns nun ansehen, wie wir die Automation per VBA starten kö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.

Make.com-Automation per VBA aufrufen

Um die Automation per VBA zu starten und das Ergebnis zu erhalten, benötigen wir ein VBA-Projekt, für das wir in diesem Fall eine Microsoft Access-Datenbank nutzen. Wir könnten die nachfolgend beschriebenen Techniken jedoch auch im VBA-Projekt von Excel, Word, Outlook et cetera nutzen.

Dem VBA-Projekt fügen wir zwei Verweise hinzu (siehe Bild 16):

Verweise für unser VBA-Projekt

Bild 16: Verweise für unser VBA-Projekt

  • Microsoft XML, v6.0
  • Microsoft Scripting Runtime

Danach fü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ür die Variable strWebhookURL ein. Außerdem verwenden wir eine Variable namens strJSON mit einer leeren Zeichenkette. Diese dient erst einmal der Vorbereitung – wir werden diese in einem weiteren Beispiel noch füllen. Danach erstellen wir ein neues Objekt des Typs MSXML2.XMLHTTP60.

Public Sub Make_Template()
     Dim strWebhookURL As String
     Dim objXMLHTTP As MSXML2.XMLHTTP60
     Dim strJSON As String
     strWebhookURL = "https://hook.eu2.make.com/8kyskzlhvzgb9a6ltf4ccrg7fh9hxz3e"
     strJSON = ""
     Set objXMLHTTP = New MSXML2.XMLHTTP60
     objXMLHTTP.Open "POST", strWebhookURL, False
     objXMLHTTP.setRequestHeader "Content-Type", "application/json"
     
     objXMLHTTP.send strJSON
     If objXMLHTTP.status = 200 Then
         MsgBox "Erfolgreich gesendet: " & vbCrLf & vbCrLf & objXMLHTTP.responseText
     Else
         MsgBox "Fehler beim Senden: " & objXMLHTTP.status & " - " & objXMLHTTP.statusText
     End If   
End Sub

Listing 1: Testaufruf des Webhooks

Für dieses führen wir die Methode Open aus und übergeben als Parameter die Werte GET als Methode, die URL sowie den Wert False, um anzugeben, dass wir auf das Ergebnis des Aufrufs warten wollen.

Anderenfalls können wir das Ergebnis nicht verarbeiten.

Außerdem übergeben wir noch einen Header, mit dem wir als Format der zu sendenden Daten als application/json angeben.

Schließlich führen wir den Aufruf mit der send-Methode aus und übergeben dabei die in diesem Beispiel noch leere Zeichenkette aus strJSON.

Liefert der Aufruf den Wert 200 für die Eigenschaft status zurück, war der Aufruf erfolgreich und wir geben den Wert der Eigenschaft responseText in einer Meldung aus.

Im Fehlerfall, also wenn status einen anderen Wert liefert, geben wir die Werte der Eigenschaften status und statusText aus.

Dies können wir simulieren, indem wir beispielsweise der URL ein Zeichen hinzufügen, sodass diese nicht mehr vorhanden ist und erhalten als Status den Wert 404.

Führen wir die Prozedur nun ohne Weiteres aus, erhalten wir als Ergebnis im Meldungsfenster allerdings den Text Accepted – also nicht den erwarteten Text.

Das liegt daran, dass wir die Automation erst wieder aktivieren müssen, indem wir erneut auf Run once klicken und im nachfolgend erscheinenden Popup den Button Wait for new data betätigen (siehe Bild 17).

Erneutes Aktivieren der Automation

Bild 17: Erneutes Aktivieren der Automation

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar