{"id":55000327,"date":"2022-08-01T00:00:00","date_gmt":"2023-03-02T17:04:16","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=327"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Umfangreiche_Texte_in_Code_integrieren","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Umfangreiche_Texte_in_Code_integrieren\/","title":{"rendered":"Umfangreiche Texte in Code integrieren"},"content":{"rendered":"<p><b>Es gibt Aufgaben, um die schl&auml;gt man sich nicht. Eine davon ist es, l&auml;ngere Texte hart im VBA-Code zu verdrahten, sodass diese sp&auml;ter weiterverarbeitet werden k&ouml;nnen. Ein Beispiel ist das Zusammenstellen eines XML-Dokuments, von dem man eine Vorlage hat, und das man mit eigenen Werten f&uuml;llen m&ouml;chte, um es dann beispielsweise als Anfrage an einen Webservice zu schicken. Oder man m&ouml;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&auml;ngers erg&auml;nzt hat. Sprich: Uns liegt ein mehrzeiliger Text vor, den wir irgendwie in eine Variable packen wollen &#8211; und zwar ausschlie&szlig;lich per VBA-Code. Wie das gelingt, zeigt der vorliegende Artikel.<\/b><\/p>\n<p>Mein aktuelles Beispiel, das mich zum Entwickeln der in diesem Artikel vorgestellten L&ouml;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 &#8211; in der Dokumentation des Webservice-Betreibers finden wir ein umfassendes XML-Dokument, das mit Beispieldaten gef&uuml;llt ist und das nur noch an unsere eigenen Zwecke angepasst werden soll. Eine Zeile darin lautet dann beispielsweise:<\/p>\n<pre>&lt;password&gt;pass&lt;\/password&gt;<\/pre>\n<p>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&uuml;r diese eine Zeile w&uuml;rden wir dann eine Prozedur wie die folgende programmieren:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>XMLZusammenstellen()\r\n     <span style=\"color:blue;\">Dim <\/span>strText<span style=\"color:blue;\"> As String<\/span>\r\n     strText = \"&lt;password&gt;pass&lt;\/password&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     <span style=\"color:blue;\">Debug.Print<\/span> strText\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Im n&auml;chsten Schritt w&uuml;rden wir dann das hier fest im Code untergebrachte Kennwort <b>pass <\/b>durch einen Parameter ersetzen. Diese Version sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>XMLZusammenstellen(strPassword<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strText<span style=\"color:blue;\"> As String<\/span>\r\n     strText = \"&lt;password&gt;\" & strPassword _\r\n         & \"&lt;\/password&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     <span style=\"color:blue;\">Debug.Print<\/span> strText\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dann rufen wir die Prozedur mit einem Parameterwert wie folgt auf:<\/p>\n<pre>XMLZusammenstellen \"MeinKennwort\"<\/pre>\n<p>Das liefert dann:<\/p>\n<pre>&lt;password&gt;MeinKennwort&lt;\/password&gt;<\/pre>\n<p>F&uuml;r eine einzige Zeile ist der Aufwand zum Parametrisieren &uuml;berschaubar, f&uuml;r ein paar weitere Zeilen vielleicht auch noch. Aber das XML-Dokument, das zu f&uuml;llen war, sah in den VBA-Code kopiert zun&auml;chst wie in Bild 1 aus. Das hei&szlig;t, wir m&uuml;ssen jede Zeile mit Ausnahme der ersten wie folgt erg&auml;nzen, also vorn um die Zuweisung des bisher in der Variablen gespeicherten Textes plus der neuen Zeile an die Variable:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_04\/pic_327_001.png\" alt=\"Ein langes XML-Dokument soll in den VBA-Code eingearbeitet werden.\" width=\"424,6267\" height=\"596,5405\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Ein langes XML-Dokument soll in den VBA-Code eingearbeitet werden.<\/span><\/b><\/p>\n<pre>strXML = strXML & \"   &lt;soapenv:Header&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span><\/pre>\n<p>Wenn wir das f&uuml;r einige zig Zeilen erledigen m&uuml;ssen, wird es Zeit, &uuml;ber eine Automatisierung nachzudenken. Dar&uuml;ber hinaus m&uuml;ssen wir wie bei der in XML-Dokumenten &uuml;blichen ersten Zeile, die noch die Definition von Namespaces enth&auml;lt, noch einfache Anf&uuml;hrungszeichen durch doppelte Anf&uuml;hrungszeichen ersetzen wie bei diesem Beispiel (die eigentlichen Namespace-URLs haben wir aus Gr&uuml;nden der &Uuml;bersicht gek&uuml;rzt):<\/p>\n<pre>&lt;soapenv:Envelope xmlns:soapenv=\"...\" xmlns:cis=\"...\" xmlns:ns=\"...\"&gt;<\/pre>\n<p>Daraus wird dann die folgende Zeile &#8211; auch hier mit gek&uuml;rzten Namespace-URLs (in einer Zeile):<\/p>\n<pre>strXML = strXML & \"&lt;soapenv:Envelope xmlns:soapenv=\"\"...\"\" xmlns:cis=\"\"...\"\" xmlns:ns=\"\"...\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span><\/pre>\n<h2>Code per Code anpassen<\/h2>\n<p>Die Anpassungen sind, so nervig sie auch sein m&ouml;gen, nicht besonders komplex. Also k&ouml;nnen wir dies vermutlich recht einfach automatisieren, wenn wir die richtigen Befehle herausfinden. Dazu ben&ouml;tigen wir als Erstes eine Bibliothek, welche uns den Zugriff auf das Objektmodell des VBA-Editors erm&ouml;glicht und so auch den Zugriff auf den Inhalt von Codefenstern. Diesen Verweis f&uuml;gen wir &uuml;ber den <b>Verweise<\/b>-Dialog hinzu, den wir vom VBA-Editor aus mit <b>Extras|Verweise <\/b>&ouml;ffnen. Die gew&uuml;nschte Bibliothek hei&szlig;t <b>Microsoft Visual Basic for Applications Extensibility 5.3 <\/b>(siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_04\/pic_327_002.png\" alt=\"Hinzuf&uuml;gen eines Verweises auf die VBE-Bibliothek\" width=\"424,6267\" height=\"334,749\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Hinzuf&uuml;gen eines Verweises auf die VBE-Bibliothek<\/span><\/b><\/p>\n<h2>Markieren und ersetzen<\/h2>\n<p>Der Plan lautet nun, dass wir die Zeilen in der Prozedur, die wir vorn um <b>strXML = strXML &#038; &#8221; <\/b>und hinten um <b>&#8221; &#038; vbCrLf <\/b>ersetzen wollen, zun&auml;chst markieren und dass wir dann eine Prozedur aufrufen, welche die Arbeit f&uuml;r uns erledigt. Das Markieren erledigen wir von Hand, denn nur wir wissen, welche Zeilen bearbeitet werden sollen.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000327\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000327?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000327\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9fac6dd15a\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt Aufgaben, um die schl&auml;gt man sich nicht. Eine davon ist es, gr&ouml;&szlig;ere Texte hart im VBA-Code zu verdrahten, sodass diese sp&auml;ter weiterverarbeitet werden kann. Ein Beispiel ist das Zusammenstellen eines XML-Dokuments, von dem man eine Vorlage hat, und das man mit eigenen Werten f&uuml;llen m&ouml;chte, um es dann beispielsweise als Anfrage an einen Webservice zu schicken. Oder man m&ouml;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&auml;ngers erg&auml;nzt hat. Sprich: Uns liegt ein mehrzeiliger Text vor, den wir irgendwie in eine Variable packen wollen &#8211; und zwar ausschlie&szlig;lich per VBA-Code. Wie das gelingt, zeigt der vorliegende Artikel.<\/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":[662022,66042022,44000027,44000025,44000028],"tags":[],"yst_prominent_words":[],"class_list":["post-55000327","post","type-post","status-publish","format-standard","hentry","category-662022","category-66042022","category-Excel_programmieren","category-VBAProgrammierung","category-Word_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000327","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=55000327"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000327\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000327"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}