Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Es gibt Aufgaben, um die schlägt man sich nicht. Eine davon ist es, längere Texte hart im VBA-Code zu verdrahten, sodass diese später weiterverarbeitet werden können. Ein Beispiel ist das Zusammenstellen eines XML-Dokuments, von dem man eine Vorlage hat, und das man mit eigenen Werten füllen möchte, um es dann beispielsweise als Anfrage an einen Webservice zu schicken. Oder man möchte den Inhalt einer Mail per VBA an Outlook schicken und versenden, nachdem man den Mailtext noch um individuelle Inhalte wie Anrede oder Name des Empfängers ergänzt hat. Sprich: Uns liegt ein mehrzeiliger Text vor, den wir irgendwie in eine Variable packen wollen – und zwar ausschließlich per VBA-Code. Wie das gelingt, zeigt der vorliegende Artikel.
Mein aktuelles Beispiel, das mich zum Entwickeln der in diesem Artikel vorgestellten Lösung veranlasst hat, ist das Zusammenstellen eines XML-Dokuments. Wer schon einmal ein XML-Dokument mit der Anfrage an einen Webservice geschickt hat, kennt das vielleicht – in der Dokumentation des Webservice-Betreibers finden wir ein umfassendes XML-Dokument, das mit Beispieldaten gefüllt ist und das nur noch an unsere eigenen Zwecke angepasst werden soll. Eine Zeile darin lautet dann beispielsweise:
<password>pass</password>
Wir wollen diese samt den restlichen Zeilen des XML-Dokuments mit unseren realen Daten anpassen und das resultierende Dokument in einer Variablen speichern, um es dann an den Webservice zu schicken. Nur für diese eine Zeile würden wir dann eine Prozedur wie die folgende programmieren:
Public Sub XMLZusammenstellen() Dim strText As String strText = "<password>pass</password>" & vbCrLf Debug.Print strText End Sub
Im nächsten Schritt würden wir dann das hier fest im Code untergebrachte Kennwort pass durch einen Parameter ersetzen. Diese Version sieht wie folgt aus:
Public Sub XMLZusammenstellen(strPassword As String) Dim strText As String strText = "<password>" & strPassword _ & "</password>" & vbCrLf Debug.Print strText End Sub
Dann rufen wir die Prozedur mit einem Parameterwert wie folgt auf:
XMLZusammenstellen "MeinKennwort"
Das liefert dann:
<password>MeinKennwort</password>
Für eine einzige Zeile ist der Aufwand zum Parametrisieren überschaubar, für ein paar weitere Zeilen vielleicht auch noch. Aber das XML-Dokument, das zu füllen war, sah in den VBA-Code kopiert zunächst wie in Bild 1 aus. Das heißt, wir müssen jede Zeile mit Ausnahme der ersten wie folgt ergänzen, also vorn um die Zuweisung des bisher in der Variablen gespeicherten Textes plus der neuen Zeile an die Variable:
Bild 1: Ein langes XML-Dokument soll in den VBA-Code eingearbeitet werden.
strXML = strXML & " <soapenv:Header>" & vbCrLf
Wenn wir das für einige zig Zeilen erledigen müssen, wird es Zeit, über eine Automatisierung nachzudenken. Darüber hinaus müssen wir wie bei der in XML-Dokumenten üblichen ersten Zeile, die noch die Definition von Namespaces enthält, noch einfache Anführungszeichen durch doppelte Anführungszeichen ersetzen wie bei diesem Beispiel (die eigentlichen Namespace-URLs haben wir aus Gründen der Übersicht gekürzt):
<soapenv:Envelope xmlns:soapenv="..." xmlns:cis="..." xmlns:ns="...">
Daraus wird dann die folgende Zeile – auch hier mit gekürzten Namespace-URLs (in einer Zeile):
strXML = strXML & "<soapenv:Envelope xmlns:soapenv=""..."" xmlns:cis=""..."" xmlns:ns=""..."">" & vbCrLf
Code per Code anpassen