{"id":55001088,"date":"2017-06-01T00:00:00","date_gmt":"2020-05-14T13:42:46","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1088"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Mails_mit_Vorlage","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/","title":{"rendered":"Mails mit Vorlage"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/64f9459c93fb41789db799f3cb212c98\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Ein gro&szlig;er Teil der Kommunikation mit Kunden l&auml;uft per E-Mail. Das ist vor allem dann der Fall, wenn der Kunde ein Anliegen per E-Mail vorbringt. Manchmal muss man den Kunden aber auch aus anderen Gr&uuml;nden kontaktieren &#8211; beispielsweise weil eine Lieferung per Post zur&uuml;ckgekommen ist. Wollen Sie dann die Kundenverwaltung &ouml;ffnen, die E-Mail-Adresse des Kunden ermitteln, nach Outlook wechseln, dort eine neue E-Mail an den Kunden anlegen und Ihre Nachricht samt Betreff von Hand eingeben Nein, denn die meisten Anfragen lassen sich leicht mit einer geeigneten Vorlage erledigen.<\/b><\/p>\n<p>Als Ausgangspunkt f&uuml;r die L&ouml;sung aus diesem Beitrag nehmen wir eine zur&uuml;ckgesendete Lieferung an einen Kunden (das war der konkrete Anlass f&uuml;r diesen Beitrag). In diesem Fall wollen wir dem Kunden eine Mitteilung schicken, dass eine Sendung zur&uuml;ckgeschickt wurde und ihn bitten, die beim Versand verwendete Adresse zu pr&uuml;fen und gegebenenfalls zu korrigieren.<\/p>\n<p>Bisher habe ich dazu die Kundenverwaltung gestartet, dort das Kundenformular ge&ouml;ffnet und &uuml;ber das Suchfeld den Datensatz zu diesem Kunden ermittelt. Dann habe ich eine neue E-Mail in Outlook angelegt, die E-Mail-Adresse in das An-Feld eingetragen, eine Betreff zur E-Mail hinzugef&uuml;gt und einen entsprechenden Text geschrieben.<\/p>\n<p>Dieser enthielt dann die beim Versand genutzte Adresse, die ich praktischerweise per Mausklick generieren kann und nur noch als Adressblock in die E-Mail zu kopieren brauche.<\/p>\n<p>Alles in allem eine Menge Schritte, die ich etwa bei einem Versand eines Magazins zwischen f&uuml;nf und zehn Mal wiederholen muss. F&uuml;r jemanden, der gern automatisierte Wege f&uuml;r Standardaufgaben entwickelt und nutzt, ist das eine wenig erfreuliche Aufgabe. Allerdings hat bisher auch die Motivation nicht gereicht, um hierf&uuml;r eine L&ouml;sung zu programmieren &#8211; immerhin w&uuml;rde das doch noch etwas l&auml;nger dauern als die manuelle Erstellung von f&uuml;nf bis zehn individuellen Mails. Wenn es aber der Zufall so will, dass ich gerade Beitr&auml;ge f&uuml;r Access im Unternehmen schreibe, l&auml;sst sich das prima kombinieren &#8211; ich habe eine praktische L&ouml;sung und kann diese auch noch an meine Leser weitergeben. Also: Ran ans Werk!<\/p>\n<h2>Daten der Anwendung<\/h2>\n<p>Als Daten f&uuml;r die Anwendung nutzen wir eine Tabelle namens <b>tblKunden<\/b>, die in der Datenblattansicht wie in Bild 1 aussieht und deren Anreden &uuml;ber ein Fremdschl&uuml;sselfeld namens <b>AnredeID <\/b>aus der per 1:n-Beziehung verkn&uuml;pften Tabelle <b>tblAnreden <\/b>festgelegt werden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_001.png\" alt=\"Datenherkunft f&uuml;r die L&ouml;sung\" width=\"700\" height=\"233,3333\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Datenherkunft f&uuml;r die L&ouml;sung<\/span><\/b><\/p>\n<h2>Ausgangspunkt<\/h2>\n<p>Wir gehen an dieser Stelle davon aus, dass Sie ein Kundenformular verwenden, in dem Sie die Kundendaten eines bestimmten Kunden z&uuml;gig &uuml;ber eine entsprechende Suchfunktion anzeigen k&ouml;nnen. Wir nutzen dazu die Suchfunktion aus dem Beitrag <b>Flexible Suche in Formularen <\/b>(<b>http:\/\/www.access-im-unternehmen.de\/965<\/b>) beziehungsweise <b>Suchen mit der clsFlexSearch-Klasse <\/b>(<b>http:\/\/www.access-im-unternehmen.de\/964<\/b>).<\/p>\n<h2>Kundenformular erstellen<\/h2>\n<p>Falls Sie kein solches Formular verwenden, erstellen wir auf die Schnelle eines. Dazu legen Sie ein neues Formular namens <b>frmKunde <\/b>an.<\/p>\n<p>Diesem weisen Sie als Datenherkunft die Tabelle <b>tblKunden <\/b>zu. Ziehen Sie alle Felder aus der Feldliste in den Detailbereich der Entwurfsansicht (s. Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_002.png\" alt=\"Entwurf des Kundenformulars\" width=\"599,593\" height=\"321,624\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Entwurf des Kundenformulars<\/span><\/b><\/p>\n<p>Au&szlig;erdem f&uuml;gen Sie die Klasse <b>clsFlexSearch <\/b>aus der Beispieldatenbank zu obigem Beitrag (oder aus der Datenbank zu diesem Beitrag) in das VBA-Projekt Ihrer L&ouml;sung.<\/p>\n<p>Daneben ben&ouml;tigen wir noch eine Abfrage namens <b>qryKundensuche<\/b>, welche die Felder der beiden Tabellen <b>tblKunden <\/b>und <b>tblAnreden <\/b>so zusammenf&uuml;hrt, dass alle Felder der Tabelle <b>tblKunden <\/b>(au&szlig;er <b>AnredeID<\/b>) und nur das Feld <b>Anrede <\/b>der Tabelle <b>tblAnreden <\/b>zur&uuml;ckgegeben werden (s. Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_003.png\" alt=\"Abfrage als Datenherkunft f&uuml;r die Suchfunktion\" width=\"649,559\" height=\"356,9216\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Abfrage als Datenherkunft f&uuml;r die Suchfunktion<\/span><\/b><\/p>\n<h2>Suchfeld hinzuf&uuml;gen<\/h2>\n<p>Nun f&uuml;gen Sie dem Kundenformular ganz oben ein Textfeld namens <b>txtSuche <\/b>hinzu. Schlie&szlig;lich legen Sie f&uuml;r die Ereignisprozedur <b>Beim Laden <\/b>des Formulars den Wert <b>[Ereignisprozedur] <\/b>an und klicken auf die Schaltfl&auml;che rechts daneben, um die entsprechende Prozedur zu erstellen. Diese f&uuml;llen Sie dann wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Set<\/span> objFlexSearch = <span style=\"color:blue;\">New<\/span> clsFlexSearch\r\n     <span style=\"color:blue;\">With<\/span> objFlexSearch\r\n         .Suchabfrage = \"qryKundensuche\"\r\n         .PKFeld = \"KundeID\"\r\n         .PKFeldEinschliessen = <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> .Suchfeld = Me!txtSuche\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies erstellt ein Objekt auf Basis der Klasse <b>clsFlexSearch <\/b>und teilt dieser mit, dass es <b>qryKundensuche <\/b>als Grundlage f&uuml;r die Suche nutzen soll, dass <b>KundeID <\/b>das Prim&auml;rschl&uuml;sselfeld ist und dass dieses nicht in die Suche eingeschlossen werden soll.<\/p>\n<p>Au&szlig;erdem wird das Textfeld <b>txtSuche <\/b>als Suchfeld festgelegt. <b>objFlexSearch <\/b>m&uuml;ssen Sie nat&uuml;rlich im gleichen Formular deklarieren, und zwar wie folgt im Kopf des Moduls:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents objFlexSearch<span style=\"color:blue;\"> As <\/span>clsFlexSearch<\/pre>\n<p>Danach legen Sie noch eine Ereignisprozedur f&uuml;r das Ereignis <b>Beim Entladen <\/b>an, die nur die Objektvariable <b>objFlexSearch <\/b>leert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Set<\/span> objFlexSearch = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Schlie&szlig;lich definieren Sie, was geschehen soll, wenn der Benutzer einen Suchausdruck in das Textfeld <b>txtSuche <\/b>eingegeben hat und dann die Eingabetaste bet&auml;tigt. Dazu w&auml;hlen Sie aus dem linken Kombinationsfeld oben im VBA-Fenster des Klassenmoduls <b>Form_frmKunde <\/b>den Eintrag <b>objFlexSearch <\/b>aus, was automatisch die leere Ereignisprozedur <b>objFlexSearch_Suchen <\/b>anlegt. Diese f&uuml;llen Sie dann wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objFlexSearch_Suchen(strWhere<span style=\"color:blue;\"> As String<\/span>)\r\n     Me.Filter = strWhere\r\n     Me.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dadurch wird der Filter des Formulars auf einen Ausdruck eingestellt, der mit dem Wert des Parameters <b>strWhere <\/b>der Prozedur geliefert wird.<\/p>\n<p>Wenn Sie das Kundenformular nun &ouml;ffnen, k&ouml;nnen Sie die Feldnamen eingeben, die direkt entsprechend erg&auml;nzt werden. Ein Klick auf <b>Tab <\/b>vervollst&auml;ndigt das Suchfeld und tr&auml;gt einen Doppelpunkt ein, hinter dem Sie den Vergleichswert eintragen. Mehrere Ausdr&uuml;cke k&ouml;nnen Sie mit <b>And <\/b>voneinander trennen. Sie k&ouml;nnen aber auch einfach einen Wert wie <b>andre@minhorst.com <\/b>eingeben, dann werden alle Felder aller Datens&auml;tze nach diesem Wert untersucht (s. Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_004.png\" alt=\"Suchfunktion im Einsatz\" width=\"499,6607\" height=\"350,9521\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Suchfunktion im Einsatz<\/span><\/b><\/p>\n<h2>Vorlagen verwalten<\/h2>\n<p>Nun ben&ouml;tigen wir eine Tabelle, mit der wir die Vorlagen f&uuml;r die E-Mails verwalten k&ouml;nnen. Diese Tabelle soll schlicht <b>tblMailvorlagen <\/b>hei&szlig;en und sieht im Entwurf wie in Bild 5 aus. Das Feld <b>Bezeichnung <\/b>haben wir mit einem eindeutigen Index versehen. Die Felder <b>Betreff<\/b>, <b>Inhalt <\/b>und <b>EMail <\/b>nehmen die Vorlagen f&uuml;r die entsprechenden Texte auf. Hier k&ouml;nnen Sie Gebrauch von Platzhaltern machen, die sp&auml;ter aus den Daten der Kundentabelle gef&uuml;llt werden &#8211; mehr dazu weiter unten in der Beschreibung der Nutzung des Formulars, das diese Daten anzeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_005.png\" alt=\"Die Tabelle tblMailvorlagen\" width=\"549,6265\" height=\"436,7404\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Die Tabelle tblMailvorlagen<\/span><\/b><\/p>\n<p>Wichtig sind noch die beiden Felder <b>TabelleAbfrage <\/b>und <b>PKFeld<\/b>. <b>TabelleAbfrage <\/b>nimmt den Namen der Tabelle oder Abfrage auf, welche die Daten f&uuml;r den Kunden liefern soll, <b>PKFeld <\/b>den Namen des in dieser Tabelle oder Abfrage zur Identifizierung des Kunden notwendigen Prim&auml;rschl&uuml;sselfeldes.<\/p>\n<h2>Formular zum Bearbeiten der Mailvorlagen<\/h2>\n<p>Die Daten dieser Tabellen wollen wir in einem separaten Formular bearbeiten. Dieses hei&szlig;t <b>frmMailvorlagen <\/b>und sieht in der Entwurfsansicht wie in Bild 6 aus. Damit es die Daten der Tabelle <b>tblMailvorlagen<\/b> in alphabetischer Reihenfolge liefert, verwenden wir den folgenden SQL-Ausdruck als Datenherkunft f&uuml;r das Formular:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_006.png\" alt=\"Das Formular frmMailvorlagen in der Entwurfsansicht\" width=\"424,7115\" height=\"430,8038\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Das Formular frmMailvorlagen in der Entwurfsansicht<\/span><\/b><\/p>\n<pre>SELECT tblMailvorlagen.MailvorlageID, tblMailvorlagen.Bezeichnung, tblMailvorlagen.Betreff, tblMailvorlagen.Inhalt, tblMailvorlagen.EMail, tblMailvorlagen.TabelleAbfrage, tblMailvorlagen.PKFeld \r\nFROM tblMailvorlagen \r\nORDER BY tblMailvorlagen.Bezeichnung;<\/pre>\n<p>Allerdings soll das Formular ja ohnehin nur die Details eines Datensatzes anzeigen, daher stellen wir die Eigenschaften <b>Bildlaufleisten<\/b>, <b>Datensatzmarkierer <\/b>und <b>Navigationsschaltfl&auml;chen <\/b>auf den Wert <b>Nein <\/b>und <b>Automatisch zentrieren <\/b>auf <b>Ja <\/b>ein. Wieso dann die Datens&auml;tze nach dem Alphabet sortieren Ganz einfach: Weil auch das Kombinationsfeld <b>cboAuswahl <\/b>seine Daten aus der Tabelle <b>tblMailvorlagen <\/b>bezieht und beide den gleichen Datensatz anzeigen sollen. Hier bietet es sich einfach an, die Mailvorlage zu liefern, deren Bezeichnung in der alphabetischen Sortierung als erste erscheint.<\/p>\n<p>Das Kombinationsfeld ben&ouml;tigt nur die beiden Felder <b>MailvorlageID <\/b>und <b>Bezeichnung<\/b>, daher verwenden wir eine verk&uuml;rzte Version der Abfrage, die wir als Datenherkunft f&uuml;r das Formular genutzt haben, als Datensatzherkunft:<\/p>\n<pre>SELECT tblMailvorlagen.MailvorlageID, tblMailvorlagen.Bezeichnung FROM tblMailvorlagen \r\nORDER BY tblMailvorlagen.Bezeichnung;<\/pre>\n<p>Das Formular zeigt ja nun bereits automatisch den ersten Datensatz nach alphabetischer Reihenfolge an. Damit das Kombinationsfeld den gleichen Datensatz anzeigt, f&uuml;gen wir dem Formular f&uuml;r das Ereignis <b>Beim Laden <\/b>die folgende Ereignisprozedur hinzu:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     Me!cboAuswahl = Me!MailvorlageID\r\n<span style=\"color:blue;\">End Sub<\/span> <\/pre>\n<p>Diese w&auml;hlt den gleichen Eintrag aus, der auch im Formular angezeigt wird.<\/p>\n<p>Damit nach der Auswahl eines der Eintr&auml;ge des Kombinationsfeldes die gew&auml;hlte Mailvorlage im Formular angezeigt wird, legen Sie f&uuml;r das Ereignis <b>Nach Aktualisierung <\/b>des Kombinationsfeldes die folgende Ereignisprozedur an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboAuswahl_AfterUpdate()\r\n     Me.Filter = \"MailvorlageID = \" & Me!cboAuswahl\r\n     Me.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies filtert das Formular nach dem im Kombinationsfeld ausgew&auml;hlten Eintrag.<\/p>\n<p>Damit beim Klick auf die Schaltfl&auml;che <b>cmdNeu <\/b>ein neuer, leerer Datensatz im Formular erscheint, hinterlegen wir f&uuml;r das <b>Beim Klicken<\/b>-Ereignis der Schaltfl&auml;che diese Prozedur:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNeu_Click()\r\n     DoCmd.GoToRecord Record:=acNewRec\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit erscheint ein neuer, leerer Datensatz. Dieser ist nat&uuml;rlich noch nicht in der Datensatzherkunft des Kombinationsfeldes enthalten.<\/p>\n<p>Daher legen wir die folgende Prozedur an, die in diesem Fall den Wert des Kombinationsfeldes auf den Wert <b>Null <\/b>einstellt (im Falle eines Wechsels zu einem anderen Datensatz wird dieser auch im Kombinationsfeld angezeigt):<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     Me!cboAuswahl.Requery\r\n     Me!cboAuswahl = Me!MailvorlageID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p>Das Aktualisieren der Datensatzherkunft des Kombinationsfeldes dient dazu, den neu angelegten Datensatz direkt nach dem Wechsel zu einem anderen Datensatz in das Kombinationsfeld aufzunehmen.<\/p>\n<p>Fehlt noch die Schaltfl&auml;che zum Schlie&szlig;en des Formulars:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n     DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Vorlage anlegen<\/h2>\n<p>In Aktion sieht das Formular nun wie in Bild 7 aus. F&uuml;r das Feld <b>Bezeichnung<\/b> geben Sie eine sinnvolle Bezeichnung an, unter der Sie die Mailvorlage schnell finden. Das Feld <b>Tabelle\/Abfrage<\/b> soll die Datenquelle aufnehmen, aus der die Daten f&uuml;r die Platzhalter in den nachfolgenden Eigenschaften der Mailvorlage entnommen werden sollen. Wir geben hier die Abfrage <b>qryKunden <\/b>an, welche die Felder der Tabellen <b>tblKunden <\/b>und <b>tblAnreden <\/b>wie in Bild 8 zusammenf&uuml;hrt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_008.png\" alt=\"Die Abfrage qryKunden dient als Datenquelle f&uuml;r das Ersetzen der Platzhalter\" width=\"700\" height=\"372,2354\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Die Abfrage qryKunden dient als Datenquelle f&uuml;r das Ersetzen der Platzhalter<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_007.png\" alt=\"Das Formular frmMailvorlagen in der Formularansicht\" width=\"599,593\" height=\"552,66\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Das Formular frmMailvorlagen in der Formularansicht<\/span><\/b><\/p>\n<p>Das Feld <b>E-Mail <\/b>statten Sie mit dem Namen des Feldes der Datenherkunft aus, welche die E-Mail-Adresse des Kunden liefert, in diesem Fall schlicht <b>EMail<\/b>. <b>Betreff<\/b> f&uuml;llen Sie mit dem gew&uuml;nschten Betreff der E-Mail. In diesem Fall ben&ouml;tigen wir keinen Platzhalter. Das Feld <b>Inhalt <\/b>jedoch enth&auml;lt einen Platzhalter f&uuml;r das Feld <b>Briefanrede <\/b>der Tabelle <b>tblAnreden <\/b>und <b>Nachname <\/b>aus der Tabelle <b>tblKunden<\/b>. Das ist noch verst&auml;ndlich. Aber was geschieht mit dem folgenden Platzhalter, der ja offensichtlich keinem Feld der Datenherkunft entspricht<\/p>\n<pre>[=Adressblock(0, 5, [KundeID])]<\/pre>\n<p>Hierbei handelt es sich nicht um einen normalen Platzhalter, sondern um eine VBA-Funktion, die den Text bereitstellt, der f&uuml;r den Platzhalter eingesetzt werden soll. Wenn Sie den Beitrag <b>Dynamischer Adressblock <\/b>(<b>www.access-im-unternehmen.de\/1090<\/b>) bereits gelesen haben, kennen Sie die hier verwendete Funktion <b>Adressblock<\/b> bereits: Sie ermittelt aufgrund der Konfiguration in der Konfigurationstabelle <b>tblKonfiguration <\/b>einen Adressblock mit den Daten des Kunden.<\/p>\n<p>Sie erwartet drei Parameter: Der erste gibt an, ob man die Liefer- oder die Rechnungsadresse holen will (hier <b>0 <\/b>f&uuml;r die Lieferadresse), die zweite, welche Konfiguration der Tabelle <b>tblKonfigurationen<\/b> genutzt werden soll, und die dritte enth&auml;lt den Prim&auml;rschl&uuml;sselwert f&uuml;r den Kundendatensatz, der die Daten liefert. (Hinweis: Im Beitrag <b>Dynamischer Adressblock <\/b>haben wir als ersten Parameter noch die Konstante <b>Lieferadresse <\/b>verwendet. Das funktioniert hier leider nicht, daher verwenden wir den entsprechenden Zahlenwert der Enumeration &#8211; den Grund erfahren Sie gleich.)<\/p>\n<p>Die hier in eckigen Klammern angegebene Funktion <b>Adressblock <\/b>enth&auml;lt mit <b>[KundeID] <\/b>wiederum einen Platzhalter. Dieser wird in der Prozedur, die wir weiter unten beschreiben, zuerst mit dem entsprechenden Wert der Datenherkunft gef&uuml;llt. Dann erst wird die Funktion ausgef&uuml;hrt, um den einzusetzenden Wert zu liefern.<\/p>\n<h2>Formular zum Verschicken von Mails nach Vorlage<\/h2>\n<p>Damit kommen wir zum Formular, mit dem der Benutzer die Vorlage ausw&auml;hlt, die Texte mit und ohne Platzhalter pr&auml;sentiert bekommt und schlie&szlig;lich die E-Mail erstellt.<\/p>\n<p>Zuvor m&uuml;ssen wir allerdings noch dem Formular <b>frmKunde <\/b>eine Schaltfl&auml;che zum &ouml;ffnen dieses Formulars hinzuf&uuml;gen. Dieses legen Sie wie in Bild 9 an. Die durch diese Schaltfl&auml;che ausgel&ouml;ste Prozedur sieht so aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_009.png\" alt=\"Schaltfl&auml;che zum Verschicken einer Mail an den Kunden\" width=\"424,7115\" height=\"487,7182\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Schaltfl&auml;che zum Verschicken einer Mail an den Kunden<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdMailNachVorlage_Click()\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Nz(Me!KundeID) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         DoCmd.OpenForm \"frmMailNachVorlage\", _\r\n             OpenArgs:=Me!KundeID\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Kein Kunde ausgew&auml;hlt.\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Sie &ouml;ffnet also das Formular <b>frmMailNachVorlage <\/b>und &uuml;bergibt mit dem &ouml;ffnungsargument den Wert des Prim&auml;rschl&uuml;sselfeldes des aktuellen Datensatzes.<\/p>\n<p>Der Entwurf des Formulars <b>frmMailNachVorlage<\/b> sieht wie in Bild 10 aus. Das Formular enth&auml;lt ein Listenfeld namens <b>lstVorlage<\/b>, mit dem Sie die gew&uuml;nschte Vorlage ausw&auml;hlen k&ouml;nnen. Als Datensatzherkunft dient die folgende Abfrage:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_010.png\" alt=\"Entwurf des Formulars frmMailNachVorlage\" width=\"649,559\" height=\"690,7075\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Entwurf des Formulars frmMailNachVorlage<\/span><\/b><\/p>\n<pre>SELECT tblMailvorlagen.MailvorlageID, tblMailvorlagen.Bezeichnung \r\nFROM tblMailvorlagen \r\nORDER BY tblMailvorlagen.Bezeichnung;<\/pre>\n<p>Damit das Listenfeld nur die Bezeichnungen anzeigt, stellen Sie die Eigenschaft <b>Spaltenanzahl <\/b>auf <b>2 <\/b>und die Eigenschaft <b>Spaltenbreiten <\/b>auf <b>0cm <\/b>ein.<\/p>\n<p>Die &uuml;brigen Felder sind s&auml;mtlich ungebundene Textfelder mit den folgenden Namen (von oben nach unten):<\/p>\n<ul>\n<li><b>txtEMailVorlage<\/b><\/li>\n<li><b>txtBetreffVorlage<\/b><\/li>\n<li><b>txtInhaltVorlage<\/b><\/li>\n<li><b>txtEMail<\/b><\/li>\n<li><b>txtBetreff<\/b><\/li>\n<li><b>txtInhalt<\/b><\/li>\n<\/ul>\n<p>F&uuml;r die beiden gro&szlig;en Textfelder <b>txtInhaltVorlage <\/b>und <b>txtInhalt <\/b>stellen Sie die Eigenschaft <b>Bildlaufleisten<\/b> auf <b>Vertikal <\/b>ein.<\/p>\n<h2>Vorlage ausw&auml;hlen<\/h2>\n<p>Nach dem &ouml;ffnen des Formulars zeigt zun&auml;chst nur das Listenfeld seine Daten an, die &uuml;brigen Felder sind leer. Wenn der Benutzer einen der Eintr&auml;ge des Listenfeldes ausw&auml;hlt, kommt Bewegung in die Sache: Dann l&auml;dt das Formular n&auml;mlich zun&auml;chst die Daten zur ausgew&auml;hlten Mailvorlage in die drei Textfelder <b>txtEMailVorlage<\/b>, <b>txtBetreffVorlage <\/b>und <b>txtInhaltVorlage<\/b>. Danach treten weitere Automatismen auf den Plan und tragen die Texte der drei Textfelder mit gef&uuml;llten Platzhaltern in die unteren drei Textfelder <b>txtEMail<\/b>, <b>txtBetreff <\/b>und <b>txtInhalt <\/b>ein.<\/p>\n<p>Daf&uuml;r sorgt initial die Prozedur, die durch das Ereignis <b>Beim Klicken<\/b> des Listenfeldes ausgel&ouml;st wird (s. Listing 1). Die Prozedur liest zun&auml;chst den Namen der Tabelle oder Abfrage aus dem Feld <b>TabelleAbfrage <\/b>der Tabelle <b>tblMailvorlagen <\/b>ein und speichert ihn in der Variablen <b>strTabelleAbfrage<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstVorlagen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strTabelleAbfrage<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strPKFeld<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngID<span style=\"color:blue;\"> As String<\/span>\r\n     strTabelleAbfrage = DLookup(\"TabelleAbfrage\", \"tblMailvorlagen\", \"MailvorlageID = \" & Me!lstVorlagen)\r\n     strPKFeld = DLookup(\"PKFeld\", \"tblMailvorlagen\", \"MailvorlageID = \" & Me!lstVorlagen)\r\n     lngID = Me.OpenArgs\r\n     Me!txtEMailVorlage = DLookup(\"EMail\", \"tblMailvorlagen\", \"MailvorlageID = \" & Me!lstVorlagen)\r\n     Me!txtBetreffVorlage = DLookup(\"Betreff\", \"tblMailvorlagen\", \"MailvorlageID = \" & Me!lstVorlagen)\r\n     Me!txtInhaltVorlage = DLookup(\"Inhalt\", \"tblMailvorlagen\", \"MailvorlageID = \" & Me!lstVorlagen)\r\n     Me!txtEMail = PlatzhalterErsetzen(Me!txtEMailVorlage, strTabelleAbfrage, strPKFeld, lngID)\r\n     Me!txtBetreff = PlatzhalterErsetzen(Me!txtBetreffVorlage, strTabelleAbfrage, strPKFeld, lngID)\r\n     Me!txtInhalt = PlatzhalterErsetzen(Me!txtInhaltVorlage, strTabelleAbfrage, strPKFeld, lngID)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Aktionen beim Klick auf einen der Eintr&auml;ge des Listenfeldes lstVorlagen<\/span><\/b><\/p>\n<p>Gleiches geschieht mit dem Feld <b>PKFeld<\/b>, dessen Inhalt in der Variablen <b>strPKFeld <\/b>landet. Den Wert des Prim&auml;rschl&uuml;sselfeldes des Datensatzes der angegebenen Tabelle bekommen wir ja beim &ouml;ffnen des Formulars mit dem &ouml;ffnungsargument, das wir mit <b>Me.OpenArgs <\/b>abfragen und in die Variable <b>lngID <\/b>eintragen. Danach liest die Prozedur die drei Werte f&uuml;r die ersten drei Felder mit den Vorlagen aus den Feldern <b>EMail<\/b>, <b>Betreff <\/b>und <b>Inhalt <\/b>der Tabelle <b>tblMailvorlagen <\/b>ein.<\/p>\n<p>Danach geht es mit den unteren drei Textfeldern weiter. Dabei verwenden wir die Funktion <b>PlatzhalterErsetzen<\/b>, der wir den Text mit den Platzhaltern, die Datenquelle, den Namen des Prim&auml;rschl&uuml;sselfeldes der Datenquelle und den Wert des Prim&auml;rschl&uuml;sselfeldes &uuml;bergeben.<\/p>\n<p>Diese Funktion sieht wie in Listing 2 aus. Sie erwartet drei Parameter:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>PlatzhalterErsetzen(strVorlage<span style=\"color:blue;\"> As String<\/span>, strTabelleAbfrage<span style=\"color:blue;\"> As String<\/span>, strPK<span style=\"color:blue;\"> As String<\/span>, _\r\n         lngID<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strTemp<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>fld<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n     <span style=\"color:blue;\">Dim <\/span>lngStart<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngEnde<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strFunktion<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strErgebnis<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM \" & strTabelleAbfrage & \" WHERE \" & strPK & \" = \" & lngID, dbOpenDynaset)\r\n     strTemp = strVorlage\r\n     For Each fld In rst.Fields\r\n         strTemp = <span style=\"color:blue;\">Replace<\/span>(strTemp, \"[\" & fld.Name & \"]\", Nz(fld.Value, \"\"))\r\n     <span style=\"color:blue;\">Next<\/span> fld\r\n     lngStart = <span style=\"color:blue;\">InStr<\/span>(1, strTemp, \"[=\")\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> lngStart = 0\r\n         lngEnde = <span style=\"color:blue;\">InStr<\/span>(lngStart + 2, strTemp, \"]\")\r\n         strFunktion = <span style=\"color:blue;\">Mid<\/span>(strTemp, lngStart + 2, lngEnde - lngStart - 2)\r\n         strErgebnis = Eval(strFunktion)\r\n         strTemp = <span style=\"color:blue;\">Replace<\/span>(strTemp, \"[=\" & strFunktion & \"]\", strErgebnis)\r\n         lngStart = <span style=\"color:blue;\">InStr<\/span>(lngStart + <span style=\"color:blue;\">Len<\/span>(strErgebnis) + 1, strTemp, \"[=\")\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     PlatzhalterErsetzen = strTemp\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Die Funktion PlatzhalterErsetzen<\/span><\/b><\/p>\n<ul>\n<li><b>strVorlage<\/b>: Inhalt der Vorlage mit den Platzhaltern<\/li>\n<li><b>strTabelleAbfrage<\/b>: Name der Tabelle oder Abfrage, aus der die Platzhalter gef&uuml;llt werden sollen<\/li>\n<li><b>strPK<\/b>: Name des Prim&auml;rschl&uuml;sselfeldes dieser Tabelle<\/li>\n<li><b>lngID<\/b>: Wert des Prim&auml;rschl&uuml;sselfeldes f&uuml;r den Datensatz, der die zu ersetzenden Werte f&uuml;r die Platzhalter liefern soll<\/li>\n<\/ul>\n<p>Die Tabelle erstellt nun ein Recordset auf Basis der mit <b>strTabelleAbfrage <\/b>gelieferten Tabelle oder Abfrage, die nach dem Wert <b>lngID <\/b>im Feld aus <b>strPK <\/b>gefiltert ist. Dann tr&auml;gt sie den Wert des Parameters <b>strVorlage <\/b>in die Variable <b>strTemp <\/b>ein. Anschlie&szlig;end durchl&auml;uft sie in einer <b>For Each<\/b>-Schleife alle Felder des Recordsets <b>rst<\/b>, also des Datensatzes der Tabelle oder Abfrage, welche die Platzhalter-Daten liefert. Hier ersetzt sie in <b>strTemp<\/b> einen Ausdruck, der aus dem in eckigen Klammern eingefassten aktuellen Feldnamen besteht, durch den Wert dieses Feldes.<\/p>\n<p>Danach pr&uuml;ft die Funktion, ob es in <b>strTemp <\/b>die Zeichenkette <b>[= <\/b>gibt, was darauf hindeutet, dass es dort statt eines statischen Platzhalters eine auszuf&uuml;hrende Funktion gibt, deren Ergebnis den Platzhalter ersetzen soll. Ist dies der Fall, speichert die Funktion die Position dieses Ausdrucks in der Variablen <b>lngStart<\/b>. Wurde eine solche Zeichenkette gefunden, ist <b>lngStart <\/b>gr&ouml;&szlig;er als <b>0<\/b>, was dazu f&uuml;hrt, dass die folgende <b>Do While<\/b>-Schleife zum ersten Mal ausgef&uuml;hrt wird. Hier sucht die Funktion nun nach der ersten schlie&szlig;enden eckigen Klammer hinter der Zeichenkette <b>[=<\/b>. Die Variable <b>strFunktion<\/b> nimmt dann die Zeichenkette auf, die zwischen <b>[= <\/b>und <b>] <\/b>liegt, in unserem Beispiel also etwa <b>Adressblock(0, 5, 1)<\/b> aus <b>[=Adressblock(0, 5, 1)]<\/b>. Die letzte Zahl <b>1 <\/b>ist bereits der ersetzte Platzhalter <b>[KundeID]<\/b>.<\/p>\n<p>Der Funktionsaufruf wird nun als Parameter an die <b>Eval<\/b>-Funktion &uuml;bergeben, die das Ergebnis der Funktion an die Variable <b>strErgebnis <\/b>zur&uuml;ckliefert.<\/p>\n<p>Damit k&ouml;nnen Sie auch selbst definierte Funktionen als Platzhalter einsetzen und sich damit ein sehr m&auml;chtiges Werkzeug schaffen.<\/p>\n<p>Das Ergebnis der Funktion wird nun an Stelle des Platzhalters, der aus der &ouml;ffnenden eckigen Klammer, dem Gleichheitszeichen, dem Funktionsnamen samt Parametern und der schlie&szlig;enden eckigen Klammer besteht, eingesetzt.<\/p>\n<p>Die Variable <b>lngStart <\/b>erh&auml;lt nun die Position der n&auml;chsten Zeichenkette, die mit <b>[= <\/b>beginnt. Ist diese ungleich <b>0<\/b>, beginnt der Schleifendurchlauf von vorn und es werden weitere Funktionen aufgerufen. Anderenfalls erh&auml;lt der R&uuml;ckgabewert der Funktion den Inhalt der Variablen <b>strTemp<\/b>.<\/p>\n<p>Auf diese Weise werden nun die drei Felder <b>EMail<\/b>, <b>Betreff <\/b>und <b>Inhalt <\/b>des Formulars gef&uuml;llt, das nun wie in Bild 11 aussieht. Die Platzhalter in den Vorlagentexten wurden durch die entsprechenden Texte aus der Datenbank ersetzt, sodass nun nur noch ein Klick auf die Schaltfl&auml;che <b>Mail erstellen <\/b>n&ouml;tig ist.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_011.png\" alt=\"Formular mit Vorlage und Inhalten mit gef&uuml;llten Platzhaltern\" width=\"599,593\" height=\"616,3855\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Formular mit Vorlage und Inhalten mit gef&uuml;llten Platzhaltern<\/span><\/b><\/p>\n<h2>Mail nach Vorlage erstellen<\/h2>\n<p>Dies l&ouml;st wiederum die Prozedur aus Listing 3 aus. Die Prozedur verwendet Outlook, um die E-Mail zu erstellen. Daher m&uuml;ssen Sie zuvor noch einen Verweis auf die Bibliothek <b>Microsoft Outlook x.0 Object Library <\/b>hinzuf&uuml;gen (VBA-Editor, Men&uuml;eintrag <b>Extras|Verweise<\/b>).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdMailErstellen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>objOutlook<span style=\"color:blue;\"> As <\/span>Outlook.Application\r\n     <span style=\"color:blue;\">Dim <\/span>objMailItem<span style=\"color:blue;\"> As <\/span>Outlook.MailItem\r\n     <span style=\"color:blue;\">Set<\/span> objOutlook = <span style=\"color:blue;\">New<\/span> Outlook.Application\r\n     <span style=\"color:blue;\">Set<\/span> objMailItem = objOutlook.CreateItem(olMailItem)\r\n     <span style=\"color:blue;\">With<\/span> objMailItem\r\n         .To = Me!txtEMail\r\n         .Subject = Me!txtBetreff\r\n         .Body = Me!txtInhalt\r\n         .Display <span style=\"color:blue;\">True<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Die Prozedur zum Erstellen einer E-Mail auf Basis der Daten aus dem Formular<\/span><\/b><\/p>\n<p>Die Prozedur erstellt eine neue Instanz des Objekts <b>Outlook.Application <\/b>und referenziert diese mit der Variablen <b>objOutlook<\/b>. Dann erstellt sie mit der <b>CreateItem<\/b>-Methode und dem Parameter <b>olMailItem <\/b>eine neue Mail. Diese erh&auml;lt f&uuml;r die Eigenschaften <b>To<\/b>, <b>Subject <\/b>und <b>Body <\/b>die Werte der drei Textfelder <b>txtEMail<\/b>, <b>txtBetreff <\/b>und <b>txtInhalt<\/b>. Anschlie&szlig;end zeigt die <b>Display<\/b>-Methode mit dem Parameter <b>True <\/b>die neue E-Mail als modalen Dialog an, der nur noch durch einen Klick auf die <b>Senden<\/b>-Schaltfl&auml;che abgeschickt werden muss.<\/p>\n<p>Wenn Sie die E-Mail nicht mehr kontrollieren wollen, was ja prinzipiell nicht n&ouml;tig ist, denn es werden ja genau die Texte aus dem Formular verwendet, k&ouml;nnen Sie hier auch gleich die <b>Send<\/b>-Methode statt der <b>Display<\/b>-Methode verwenden.<\/p>\n<p>Das Resultet sehen Sie in Bild 12 &#8211; die E-Mail ist erstellt und zum Versand bereit.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_03\/pic_1088_012.png\" alt=\"Per Datenbank erstellte E-Mail\" width=\"599,593\" height=\"668,9595\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Per Datenbank erstellte E-Mail<\/span><\/b><\/p>\n<h2>Anzeigen einer Vorlage zum Bearbeiten<\/h2>\n<p>Das Bearbeiten der Vorlage im Formular <b>frmMailNachVorlage <\/b>ist nicht vorgesehen. Der Benutzer ist sich unter Umst&auml;nden nicht bewusst, dass diese &auml;nderungen dauerhaft sind. Stattdessen haben wir eine Ereignisprozedur zum Formular hinzugef&uuml;gt, die daf&uuml;r sorgt, dass bei einem Doppelklick auf einen Eintrag des Listenfeldes das Formular <b>frmMailvorlagen <\/b>ge&ouml;ffnet wird und den angeklickten Eintrag der Tabelle <b>tblMailvorlagen <\/b>anzeigt.<\/p>\n<p>Die Prozedur finden Sie in Listing 4. Sie pr&uuml;ft, ob im Listenfeld &uuml;berhaupt ein Eintrag markiert ist, und &ouml;ffnet in diesem Fall das Formular mit der <b>DoCmd.OpenForm<\/b>-Methode. Dabei &uuml;bergibt sie mit dem Parameter <b>WhereCondition<\/b> eine Bedingung, die f&uuml;r die Anzeige des markierten Datensatzes sorgt. Falls der Benutzer doppelt auf einen leeren Bereich im Listenfeld klickt, wird eine entsprechende Meldung angezeigt.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstVorlagen_DblClick(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me!lstVorlagen)<span style=\"color:blue;\"> Then<\/span>\r\n         DoCmd.OpenForm \"frmMailvorlagen\", WhereCondition:=\"MailvorlageID = \" & Me!lstVorlagen, WindowMode:=acDialog\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Keine Vorlage ausgew&auml;hlt.\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Prozedur zum Anzeigen einer Vorlage nach Doppelklick auf einen Eintrag im Listenfeld<\/span><\/b><\/p>\n<h2>Formular benutzerfreundlich gestalten<\/h2>\n<p>Das Formular <b>frmMailNachVorlage <\/b>hat zwei gr&ouml;&szlig;ere Textfelder, welche die Inhalte von Memofeldern abbilden (<b>txtInhaltVorlage <\/b>und <b>txtInhalt<\/b>).<\/p>\n<p>Mit den beiden Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>k&ouml;nnen wir leider nur eines der beiden Textfelder so einstellen, dass es beim Vergr&ouml;&szlig;ern des Formulars durch den Benutzer ebenfalls mit vergr&ouml;&szlig;ert wird. Dazu stellen wir beide Eigenschaften eines der beiden gro&szlig;en Textfelder auf <b>Beide <\/b>ein.<\/p>\n<p>Au&szlig;erdem m&uuml;ssen wir die Eigenschaft <b>Vertikaler Anker <\/b>f&uuml;r die Steuer-elemente, die unter dem entsprechenden Textfeld liegen, auf den Wert <b>Unten <\/b>einstellen, damit diese beim Vergr&ouml;&szlig;ern des Formulars nach unten nicht vom automatisch mit vergr&ouml;&szlig;erten Textfeld &uuml;berdeckt werden.<\/p>\n<p>Nun m&ouml;chte der Benutzer aber vielleicht die Inhalte beider Textfelder, also <b>txtVorlageInhalt <\/b>und <b>txtInhalt<\/b>, in voller Pracht betrachten k&ouml;nnen. Nun: Gleichzeitig geht das nicht, aber durch den Einsatz zweier Ereignisprozeduren, die jeweils beim Fokuserhalt der beiden betroffenen Textfelder ausgel&ouml;st werden, k&ouml;nnen wir dies geschickt l&ouml;sen.<\/p>\n<p>Wir stellen also zun&auml;chst die Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>des Textfeldes <b>txtInhaltVorlage <\/b>auf <b>Beide <\/b>ein und die Eigenschaft <b>Vertikaler Anker <\/b>der darunter liegenden Steuer-elemente auf den Wert <b>Unten<\/b>.<\/p>\n<p>Damit wird beim Vergr&ouml;&szlig;ern des Formulars nun das Textfeld <b>txtInhaltVorlage <\/b>vergr&ouml;&szlig;ert, die darunter liegenden Steuer-elemente werden analog nach unten verschoben. Wenn der Benutzer nun nicht den vollst&auml;ndigen Inhalt von <b>txtInhaltVorlage <\/b>ansehen will, sondern den von <b>txtInhalt<\/b>, soll er dieses durch einfaches Anklicken vergr&ouml;&szlig;ern k&ouml;nnen.<\/p>\n<p>Dazu legen Sie die beiden Ereignisprozeduren aus Listing 5 an. Die erste wird ausgel&ouml;st, wenn das Textfeld <b>txtInhalt <\/b>den Fokus erh&auml;lt. Es stellt die Eigenschaft <b>Vertikaler Anker <\/b>(<b>VerticalAnchor<\/b>) von <b>txtInhaltVorlage <\/b>auf <b>Oben <\/b>ein (<b>acVerticalAnchorTop<\/b>) und die gleiche Eigenschaft von <b>txtInhalt <\/b>auf <b>acVerticalAnchorBoth<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtInhalt_GotFocus()\r\n     Me!txtInhaltVorlage.VerticalAnchor = acVerticalAnchorTop\r\n     Me!txtInhalt.VerticalAnchor = acVerticalAnchorBoth\r\n     Me!txtBetreff.VerticalAnchor = acVerticalAnchorTop\r\n     Me!txtEMail.VerticalAnchor = acVerticalAnchorTop\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>txtInhaltVorlage_GotFocus()\r\n     Me!txtInhaltVorlage.VerticalAnchor = acVerticalAnchorBoth\r\n     Me!txtInhalt.VerticalAnchor = acVerticalAnchorBottom\r\n     Me!txtBetreff.VerticalAnchor = acVerticalAnchorBottom\r\n     Me!txtEMail.VerticalAnchor = acVerticalAnchorBottom\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Diese Prozeduren vergr&ouml;&szlig;ern abwechselnd die gro&szlig;en Textfelder txtInhaltVorlage und txtInhalt.<\/span><\/b><\/p>\n<p>Die zwischen den beiden Steuerelementen liegenden Textfelder <b>txtBetreff <\/b>und <b>txtEMail <\/b>erhalten f&uuml;r die Eigenschaft <b>VerticalAnchor <\/b>den Wert <b>acVerticalAnchorTop<\/b>, da sie ja nun nicht mehr nach unten verschoben werden m&uuml;ssen.<\/p>\n<p>Klickt der Benutzer dann umgekehrt auf das Textfeld <b>txtInhaltVorlage<\/b>, wird <b>VerticalAnchor <\/b>f&uuml;r dieses wieder auf <b>acVerticalAnchorBoth <\/b>gesetzt und f&uuml;r <b>txtInhalt <\/b>auf <b>acVerticalAnchorBottom <\/b>&#8211; genau wie f&uuml;r die beiden Steuer-elemente <b>txtEMail <\/b>und <b>txtBetreff<\/b>.<\/p>\n<h2>Einbau in eigene Anwendungen<\/h2>\n<p>Wenn Sie bereits eine Kundenverwaltung verwenden, in die Sie die hier vorgestellte Funktion zum Versenden von E-Mails nach Vorlage einbauen wollen, f&uuml;gen Sie folgende Elemente zur Zieldatenbank hinzu:<\/p>\n<ul>\n<li><b>tblKonfigurationen<\/b><\/li>\n<li><b>tblMailvorlagen<\/b><\/li>\n<li><b>frmMailNachVorlage<\/b><\/li>\n<li><b>frmMailvorlagen<\/b><\/li>\n<li><b>mdlAdressblock<\/b><\/li>\n<\/ul>\n<p>Au&szlig;erdem ben&ouml;tigen Sie eine Abfrage auf Basis der Kundentabelle (und gegebenenfalls der Anreden und weiterer Daten), welche die Daten f&uuml;r das Ersetzen der Platzhalter liefert. Dann legen Sie in der Tabelle <b>tblKonfigurationen <\/b>einen Datensatz mit der gew&uuml;nschten Konfiguration an und f&uuml;gen dem Kundenformular eine Schaltfl&auml;che hinzu, mit der Sie das Formular <b>frmMailNachVorlage <\/b>&ouml;ffnen und die ID des aktuellen Kunden &uuml;bergeben. Fertig!<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>MailsMitVorlage.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/C49C5E96-18A1-4D46-892F-0D5555BE47B8\/aiu_1088.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein gro&szlig;er Teil der Kommunikation mit Kunden l&auml;uft per E-Mail. Das ist vor allem dann der Fall, wenn der Kunde ein Anliegen per E-Mail vorbringt. Manchmal muss man den Kunden aber auch aus anderen Gr&uuml;nden kontaktieren &#8211; beispielsweise, weil eine Lieferung per Post zur&uuml;ckgekommen ist. Wollen Sie dann die Kundenverwaltung &ouml;ffnen, die E-Mail-Adresse des Kunden ermitteln, nach Outlook wechseln, dort eine neue E-Mail an den Kunden anlegen und Ihre Nachricht samt Betreff von Hand eingeben Nein, denn die meisten Anfragen lassen sich leicht mit einer geeigneten Vorlage erledigen.<\/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":[662017,66032017,44000026],"tags":[],"class_list":["post-55001088","post","type-post","status-publish","format-standard","hentry","category-662017","category-66032017","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Mails mit Vorlage - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mails mit Vorlage\" \/>\n<meta property=\"og:description\" content=\"Ein gro&szlig;er Teil der Kommunikation mit Kunden l&auml;uft per E-Mail. Das ist vor allem dann der Fall, wenn der Kunde ein Anliegen per E-Mail vorbringt. Manchmal muss man den Kunden aber auch aus anderen Gr&uuml;nden kontaktieren - beispielsweise, weil eine Lieferung per Post zur&uuml;ckgekommen ist. Wollen Sie dann die Kundenverwaltung &ouml;ffnen, die E-Mail-Adresse des Kunden ermitteln, nach Outlook wechseln, dort eine neue E-Mail an den Kunden anlegen und Ihre Nachricht samt Betreff von Hand eingeben Nein, denn die meisten Anfragen lassen sich leicht mit einer geeigneten Vorlage erledigen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-14T13:42:46+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/64f9459c93fb41789db799f3cb212c98\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Mails mit Vorlage\",\"datePublished\":\"2020-05-14T13:42:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/\"},\"wordCount\":3753,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/64f9459c93fb41789db799f3cb212c98\",\"articleSection\":[\"2017\",\"3\\\/2017\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/\",\"name\":\"Mails mit Vorlage - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/64f9459c93fb41789db799f3cb212c98\",\"datePublished\":\"2020-05-14T13:42:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/64f9459c93fb41789db799f3cb212c98\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/64f9459c93fb41789db799f3cb212c98\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Mails_mit_Vorlage\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mails mit Vorlage\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mails mit Vorlage - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/","og_locale":"de_DE","og_type":"article","og_title":"Mails mit Vorlage","og_description":"Ein gro&szlig;er Teil der Kommunikation mit Kunden l&auml;uft per E-Mail. Das ist vor allem dann der Fall, wenn der Kunde ein Anliegen per E-Mail vorbringt. Manchmal muss man den Kunden aber auch aus anderen Gr&uuml;nden kontaktieren - beispielsweise, weil eine Lieferung per Post zur&uuml;ckgekommen ist. Wollen Sie dann die Kundenverwaltung &ouml;ffnen, die E-Mail-Adresse des Kunden ermitteln, nach Outlook wechseln, dort eine neue E-Mail an den Kunden anlegen und Ihre Nachricht samt Betreff von Hand eingeben Nein, denn die meisten Anfragen lassen sich leicht mit einer geeigneten Vorlage erledigen.","og_url":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-14T13:42:46+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/64f9459c93fb41789db799f3cb212c98","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Mails mit Vorlage","datePublished":"2020-05-14T13:42:46+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/"},"wordCount":3753,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/64f9459c93fb41789db799f3cb212c98","articleSection":["2017","3\/2017","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/","url":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/","name":"Mails mit Vorlage - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/64f9459c93fb41789db799f3cb212c98","datePublished":"2020-05-14T13:42:46+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/64f9459c93fb41789db799f3cb212c98","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/64f9459c93fb41789db799f3cb212c98"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Mails_mit_Vorlage\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Mails mit Vorlage"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001088","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001088"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001088\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001088"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001088"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}