{"id":55000008,"date":"2001-02-01T00:00:00","date_gmt":"2020-05-06T15:16:55","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=8"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Textvorlagen_mit_Daten_fuellen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/","title":{"rendered":"Textvorlagen mit Daten f&uuml;llen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/0d406afc5a4d4570983027174bbbb6fb\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Eine h&auml;ufige Anforderung an eine Datenbank besteht darin, einen Standardtext mit individuellen Daten zu f&uuml;llen. So entstehen beispielsweise Auftragsbest&auml;tigungen, Lieferscheine und Begr&uuml;&szlig;ungsschreiben. Das Team, bestehend aus der Datenbank Access und der Textverarbeitung Word, meistert diese Aufgabe mit Bravour. Wie dies funktioniert, lesen Sie in diesem Beitrag!<\/b><\/p>\n<p>Aber was ist, wenn auf einem PC kein Word vorhanden ist Hier bietet sich die Verwendung von Textdateien an. Statt mit den unter Word &uuml;blichen Textmarken oder Feldfunktionen, markieren in Textdateien einfache Platzhalter wie beispielsweise <b>@[ <\/b>und <b>] <\/b>die Datenfelder. Ist die Textdatei erst mal als Vorlage in einem Ordner gespeichert, steht sie f&uuml;r den Gebrauch mit Access zur Verf&uuml;gung. Damit aus der Vorlage eine individuelle Nachricht wird, m&uuml;ssen Sie die Platzhalter nur noch durch die Daten aus der Datenbank ersetzen. Genau diese Aufgabe erledigt die Prozedur <b>TextvorlageF&uuml;llen <\/b>aus diesem Beitrag. Die Prozedur ist so gestaltet, dass sie sich f&uuml;r das Ersetzen von Platzhaltern in allen Textdateien eignet, in den klassischen <b>.txt<\/b>-Dateien ebenso wie in <b>.rtf<\/b>&#8211; und <b>.html<\/b>-Dateien.<\/p>\n<h2>Die Textvorlage gestalten<\/h2>\n<p>Bei der Gestaltung der Textvorlage k&ouml;nnen Sie Ihrer Fantasie freien Lauf lassen. Es ist lediglich wichtig, dass Sie die Platzhalter einheitlich mit einer Start- und einer Endzeichenfolge markieren. Es sollte sich um eine Zeichenkombination handeln, die ansonsten nicht in der Textdatei vorkommt. Au&szlig;erdem sollten Sie m&ouml;glichst sprechende Namen f&uuml;r die Platzhalter verwenden und sich an die Konventionen zur Bildung von Feldnamen in Abfragen halten. Eine kleine Musterdatei befindet sich im Download zu diesem Artikel (<b>AB_Template.txt<\/b>). Hierbei handelt es sich um eine <b>.txt<\/b>-Datei, die mit dem Texteditor von Windows erstellt wurde. Die Textdatei enth&auml;lt einen Mustertext und eine Reihe von Platzhaltern. Die Zeichenfolge <b>@[ <\/b>markiert den Beginn und die Zeichenfolge <b>] <\/b>das Ende eines Platzhalters. Dazwischen befindet sich der Name des Platzhalters (s. Bild 1).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2001_01\/TextvorlagenMitDatenFuellen-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Textvorlage mit Platzhaltern<\/span><\/b><\/p>\n<h2>Die Datenquelle hinterlegen<\/h2>\n<p>Damit aus der Vorlage ein individueller Brief wird, muss Access die Platzhalter durch Daten ersetzen. Sie ben&ouml;tigen also eine Datenquelle, welche die zur Vorlage passenden Daten liefert. Die Bezeichnungen der Felder aus der Datenquelle m&uuml;ssen mit den Bezeichnungen der Platzhalter &uuml;bereinstimmen. Nur so kann die Prozedur TextvorlageF&uuml;llen die Felder aus der Vorlage mit denen aus der Datenquelle vergleichen.<\/p>\n<p>Als Datenquelle k&ouml;nnen Sie eine Tabelle, eine Abfrage oder auch eine <b>SELECT<\/b>-Anweisung verwenden. Die Routine ist daf&uuml;r ausgelegt, dass die Datenquelle nur einen einzelnen Datensatz liefert. Falls Sie eine L&ouml;sung ben&ouml;tigen, welche die Textvorlage f&uuml;r mehrere Datens&auml;tze vervielf&auml;ltigt, m&uuml;ssen Sie auch einen Weg zur Angabe mehrerer Zieldateien finden. Da dies stark von der spezifischen Anwendungskonzeption abh&auml;ngt, verzichtet die hier vorgestellte Routine darauf.<\/p>\n<p>Im Beispiel dient die Abfrage <b>qryNeueBestellung10702 <\/b>als Datenquelle. Sie basiert auf den Tabellen <b>tblKunden <\/b>und <b>tblBestellungen<\/b>.<\/p>\n<p>Die Beispielabfrage filtert die Bestellnummer <b>10702 <\/b>aus der Datenquelle heraus. Damit ist sichergestellt, dass die Abfrage nur einen Datensatz liefert. Au&szlig;erdem werden den meisten Feldnamen &#8211; durch Doppelpunkte getrennt &#8211; neue Feldnamen vorangestellt. Der erste Buchstabe bezeichnet dabei stets die Tabelle, aus der das Feld stammt. Der Pr&auml;fix <b>B_ <\/b>kennzeichnet die Felder aus der Tabelle <b>tblBestellungen <\/b>und der Pr&auml;fix <b>K_<\/b> die Felder aus der Kundentabelle (s. Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2001_01\/TextvorlagenMitDatenFuellen-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Diese Abfrage dient als Datenquelle<\/span><\/b><\/p>\n<h2>Aufruf der Prozedur TextvorlageF&uuml;llen<\/h2>\n<p>Die Prozedur <b>TextvorlageF&uuml;llen <\/b>liest die Textvorlage und ersetzt alle Platzhalter durch die Feldwerte aus der Datenquelle (s. <a href=\"#anker-30-anchor\">Listing 1<\/a>). Beim Aufruf der Prozedur sind folgende Parameter erforderlich:<\/p>\n<p class=\"listingueberschrift\">Listing 1: F&uuml;llen einer Textvorlage<\/p>\n<pre>Sub TextvorlageF&uuml;llen(sQuelldatei As String, sZieldatei As String, sSQL As String, _\r\n    sVarStart As String, sVarEnde As String)\r\n    '' &Uuml;berpr&uuml;fen, ob das Recordset nur einen Datensatz enth&auml;lt.\r\n    Dim rs As Recordset\r\n    Set rs = CurrentDb.OpenRecordset(sSQL, , dbReadOnly)\r\n    rs.MoveLast\r\n    If Len(Nz(Dir(sQuelldatei))) &gt; 0 And rs.RecordCount = 1 Then\r\n        Dim iQuelldatei As Integer\r\n        Dim iZieldatei As Integer\r\n        Dim sNeueZeile As String\r\n        Dim sGeleseneZeile As String\r\n        '' Dateinummer f&uuml;r die Quelldatei zuweisen\r\n        iQuelldatei = FreeFile\r\n        '' Quelldatei zum bin&auml;ren Lesen &ouml;ffnen\r\n        '' Datei gleichzeitig mit Lock f&uuml;r lesenden und schreibenden Zugriff sperren.\r\n        Open sQuelldatei For Binary Access Read Lock Read Write As #iQuelldatei\r\n        '' Dateinummer f&uuml;r die Zieldatei zuweisen\r\n        iZieldatei = FreeFile\r\n        '' Zieldatei zum bin&auml;ren Schreiben &ouml;ffnen.\r\n        '' Datei gleichzeitig mit Lock f&uuml;r lesenden und schreibenden Zugriff sperren.\r\n        Open sZieldatei For Binary Access Write Lock Read Write As #iZieldatei\r\n        Dim Zeilenr As Integer\r\n        Zeilenr = 0\r\n        Dim dStartzeit As Double\r\n        dStartzeit = Time\r\n        Debug.Print &quot;Starte mit Zeilenr. 1&quot;, Format(dStartzeit, &quot;hh:mm:ss&quot;)\r\n        Do While Not EOF(iQuelldatei) '' Schleife bis zum Ende der Textdatei.\r\n            Zeilenr = Zeilenr + 1\r\n            '' Lesen am Anfang der Schleife =&gt; Auch letzte Zeile mit EOF verarbeiten.\r\n            sGeleseneZeile = ZeileLesen(iQuelldatei) '' Textzeile lesen\r\n            sNeueZeile = ZeileVerarbeiten(sGeleseneZeile, rs, sVarStart, sVarEnde)\r\n            ZeileSchreiben iZieldatei, sNeueZeile\r\n        Loop\r\n        Dim dEndzeit As Double\r\n        dEndzeit = Time\r\n        Debug.Print &quot;Ende mit Zeilenr. &quot; &amp; LTrim(str(Zeilenr)), Format(dEndzeit - dStartzeit, _\r\n        &quot;hh:mm:ss&quot;)\r\n        Close #iQuelldatei\r\n        Close #iZieldatei\r\n    End If\r\n    Set rs = Nothing\r\nEnd Sub<\/pre>\n<ul>\n<li class=\"aufz-hlung\"><b>sQuelldatei As String<\/b>: Laufwerk, Pfad und Dateiname der Textvorlage.<\/li>\n<li class=\"aufz-hlung\"><b>sZieldatei As String<\/b>: Laufwerk, Pfad und Dateiname f&uuml;r die Zieldatei.<\/li>\n<li class=\"aufz-hlung\"><b>sSQL As String<\/b>: Name einer Tabelle, einer Abfrage oder Angabe einer SELELCT-Anweisung mit der Datenquelle.<\/li>\n<li class=\"aufz-hlung\"><b>sVarStart As String<\/b>: Zeichenkette, die den Beginn eines Platzhalters markiert.<\/li>\n<li class=\"aufz-hlung\"><b>sVarEnde As String<\/b>: Zeichenkette, die das Ende eines Platzhalters markiert.<\/li>\n<\/ul>\n<p><a id=\"anker-34-anchor\" name=\"anker-34-anchor\" \/><br \/>\n<!--30percent--><\/p>\n<p>Ein Beispiel f&uuml;r einen Prozeduraufruf lautet wie folgt:<\/p>\n<pre>TextvorlageF&uuml;llen &quot;C:\\Vorlage.txt&quot;,\r\n&quot;C:\\Zieldatei.txt&quot;, &quot;qryNeueBestellung10702&quot;,\r\n&quot;@[&quot;, &quot;]&quot;<\/pre>\n<p>Die Beispieldatenbank zu diesem Beitrag enth&auml;lt das Formular <b>frmStart<\/b>, &uuml;ber das Sie die Prozedur ebenfalls starten k&ouml;nnen (s. Bild 3). Das Formular enth&auml;lt zwei Kombinationsfelder zur Eingabe oder zur Auswahl von Laufwerk, Ordner und Dateinamen, wo sich die Textvorlage und die Zieldatei befinden. Um die Wertelisten den Bed&uuml;rfnissen Ihres Kunden anzupassen, wechseln Sie in die Entwurfsansicht des Formulars. Geben Sie anschlie&szlig;end die Dateinamen in die <b>Datensatzherkunft<\/b>-Eigenschaft der Kombinationsfelder ein.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2001_01\/TextvorlagenMitDatenFuellen-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Das Startformular der Beispielanwendung<\/span><\/b><\/p>\n<h2>Testen der &Uuml;bergabeparameter<\/h2>\n<p>Die Prozedur <b>TextvorlageF&uuml;llen <\/b>ist nur f&uuml;r die Verarbeitung eines einzelnen Datensatzes ausgelegt. Zu Beginn der Prozedur wird die in der Variablen <b>sSQL <\/b>&uuml;bergebene Datenquelle daher zun&auml;chst getestet, ob sie wirklich nur einen Datensatz enth&auml;lt. Die <b>If<\/b>-Anweisung &uuml;berpr&uuml;ft zus&auml;tzlich, ob die Textvorlagendatei existiert.<\/p>\n<h2>Lesen und Verarbeiten der Textvorlagendatei<\/h2>\n<p>Das Lesen und Verarbeiten der Textvorlagendatei erfolgt in einer <b>Do While<\/b>-Schleife. Vor dem Beginn der Schleife werden verschiedene Variablen deklariert. Die <b>Open<\/b>-Anweisungen &ouml;ffnen au&szlig;erdem je einen Kanal f&uuml;r die Textvorlagen- und die Zieldatei. In der Variablen <b>Zeilenr <\/b>z&auml;hlt Access die Anzahl der gelesenen Zeilen. Um nachher die Dauer der Verarbeitung feststellen zu k&ouml;nnen, wird die Startzeit der Verarbeitung in der gleichnamigen Variablen gespeichert.<\/p>\n<p>Der Rumpf der <b>Do While<\/b>-Schleife wird f&uuml;r jede Zeile einmal durchlaufen. Als Endkriterium gilt das Erreichen des Dateiendes der Textvorlagendatei.<\/p>\n<p>Die Funktion <b>ZeileLesen <\/b>&uuml;bernimmt das Lesen einer Textzeile. Als &Uuml;bergabeparameter erh&auml;lt sie die Dateinummer der bereits ge&ouml;ffneten Textvorlagendatei. Als R&uuml;ckgabewert liefert die Funktion den Text einer gelesenen Zeile. Access speichert die Zeile in der Variablen <b>sGeleseneZeile<\/b>.<\/p>\n<p>Die Verarbeitung der Zeile erfolgt in der Funktion <b>ZeileVerarbeiten<\/b>. Sie durchsucht die Zeile nach allen Platzhaltern und ersetzt sie durch die Werte aus der Datenquelle. Deshalb werden der Funktion neben dem Text der gelesenen Zeile auch das Recordset der Datenquelle und die Variablen <b>sVarStart <\/b>und <b>sVarEnde <\/b>&uuml;bergeben. Die Prozedur <b>ZeileSchreiben <\/b>schreibt den Text der neuen Zeile in die Zieldatei.<\/p>\n<p>Die <b>Loop<\/b>-Anweisung schlie&szlig;t die <b>Do While<\/b>-Schleife ab. Die genannten Schritte stellen sicher, dass die Textvorlagendatei bis auf das letzte Zeichen in die Zieldatei kopiert wird. W&auml;hrend des Kopiervorgangs werden au&szlig;erdem alle Platzhalter durch die Werte aus der Datenquelle ersetzt.<\/p>\n<p>Die restlichen Anweisungen der Prozedur <b>TextvorlageF&uuml;llen <\/b>schlie&szlig;en nur noch die ge&ouml;ffneten Kan&auml;le, zeigen die Dauer der Aktion im Debug-Fenster an und geben die <b>Recordset<\/b>-Variable wieder frei.<\/p>\n<h2>Die Funktion ZeileLesen<\/h2>\n<p>Die Funktion <b>ZeileLesen <\/b>liest genau eine Textzeile aus der Textdatei, deren Dateinummer ihr als Parameter &uuml;bergeben wird (s. <a href=\"#anker-33-anchor\">Listing 2<\/a>). Access verf&uuml;gt zwar &uuml;ber den Befehl <b>Input <\/b>f&uuml;r das zeilenweise Lesen einer Textdatei. Da dieser Befehl aber auch ein Komma als Zeilenendezeichen interpretiert, ist er f&uuml;r die Verarbeitung von Textdateien, die Kommata innerhalb der Zeile enthalten, nicht geeignet.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Lesen einer Zeile<\/p>\n<pre>Function ZeileLesen(iDateinummer As Integer) As String\r\n    Dim sZeichen As String * 1\r\n    Dim Zeilenende As Boolean\r\n    Zeilenende = False\r\n    ZeileLesen = &quot;&quot;\r\n    Get #iDateinummer, , sZeichen\r\n    '' Zeile endet mit chr(13) und chr(10) (in dieser Reihenfolge).\r\n    Do While Not EOF(iDateinummer) And Not Zeilenende\r\n        ZeileLesen = ZeileLesen &amp; sZeichen\r\n        '' Nur bis einschl. chr(10) lesen.\r\n        If Asc(sZeichen) = 10 Then\r\n            Zeilenende = True\r\n        Else\r\n            Get #iDateinummer, , sZeichen\r\n        End If\r\n    Loop\r\nEnd Function<\/pre>\n<p>Um eine Textdatei aber dennoch zeilenweise verarbeiten zu k&ouml;nnen, muss sie zeichenweise gelesen werden. Die Definition der Variablen <b>sZeichen <\/b>als String der L&auml;nge <b>1 <\/b>erm&ouml;glicht es, genau ein einzelnes Zeichen zu lesen. Die gelesenen Zeichen werden solange zu einer Zeile addiert, bis Access entweder auf das Zeilenendezeichen mit dem ASCII-Code 10 (Line Feed) st&ouml;&szlig;t oder das Dateiende erreicht ist.<\/p>\n<h2>Verarbeitung einer Textzeile<\/h2>\n<p>Die Prozedur <b>ZeileVerarbeiten <\/b>ist das Herzst&uuml;ck des gesamten Programms (s. <a href=\"#anker-35-anchor\">Listing 3<\/a>). Sie durchsucht eine Textzeile nach Platzhaltern und ersetzt sie durch die Werte aus der Datenquelle. Als erster Schritt sucht die <b>InStr<\/b>-Funktion, den Inhalt der Variablen <b>sVarStart <\/b>(z. B. <b>@[<\/b>) in der Zeile. Falls nein, liefert die Funktion den Wert <b>0 <\/b>an die Variable <b>iLeftPos <\/b>und Funktion gibt die Textzeile unver&auml;ndert als Funktionswert zur&uuml;ck. Falls der Inhalt von <b>sVarStart <\/b>existiert, liefert die <b>InStr<\/b>-Funktion die Position des ersten Vorkommens an die Variable <b>iLeftPos<\/b>. Das bedeutet, dass die Textzeile mindestens einen Platzhalter enth&auml;lt, den es n&auml;her zu analysieren gilt.<\/p>\n<p class=\"listingueberschrift\">Listing 3: Verarbeiten einer Zeile<\/p>\n<pre>Function ZeileVerarbeiten(sZeile As String, rs As Recordset, sVarStart As String, _\r\n    sVarEnde As String)\r\n    Dim iLeftPos As Integer\r\n    Dim iRightPos As Integer\r\n    Dim sFeldname As String\r\n    Dim sNeuerWert As String\r\n    iLeftPos = InStr(sZeile, sVarStart)\r\n    Do While iLeftPos &lt; Len(sZeile) And iLeftPos &gt; 0\r\n        iRightPos = InStr(iLeftPos + Len(sVarStart), sZeile, sVarEnde)\r\n        sFeldname = Mid(sZeile, iLeftPos + Len(sVarStart), iRightPos - (iLeftPos + Len(sVarStart)))\r\n        If IsInList(sFeldname, rs) Then\r\n            sNeuerWert = CStr(Nz(rs.Fields(sFeldname).Value))\r\n        Else\r\n            sNeuerWert = sVarStart &amp; sFeldname &amp; sVarEnde\r\n        End If\r\n        Select Case iLeftPos\r\n        Case 1\r\n        sZeile = sNeuerWert &amp; Mid(sZeile, iRightPos + 1)\r\n        Case Len(sZeile) - 1\r\n        sZeile = Left(sZeile, iLeftPos - 1) &amp; sNeuerWert\r\n        Case Else\r\n        sZeile = Left(sZeile, iLeftPos - 1) &amp; sNeuerWert &amp; Mid(sZeile, iRightPos + 1)\r\n        End Select\r\n        iLeftPos = iLeftPos + Len(sNeuerWert)\r\n        iLeftPos = InStr(iLeftPos, sZeile, sVarStart)\r\n    Loop\r\n    ZeileVerarbeiten = sZeile\r\nEnd Function<\/pre>\n<p>Die weitere Verarbeitung erfolgt in einer <b>Do While<\/b>-Schleife, die die aktuelle Textzeile bis zum Ende durchl&auml;uft. Beim ersten Durchlauf wurde bereits das erste Vorkommen von <b>sVarStart<\/b>, also der Beginn des Platzhalters gefunden. Durch einen weiteren Aufruf von <b>InStr <\/b>wird die Zeile nach der Ende-Markierung des Platzhalters durchsucht. Falls diese gefunden wird, ermittelt die <b>Mid<\/b>-Funktion den Namen des Platzhalters und weist ihn der Variablen <b>sFeldname <\/b>zu.<\/p>\n<p>Die <b>IsInList<\/b>-Funktion gibt <b>True <\/b>zur&uuml;ck, wenn der Feldname in dem Recordset <b>rs <\/b>enthalten ist. Nur dann kann ein Wert aus der Datenquelle &uuml;bernommen werden und den Platzhalter ersetzen. Das Speichern des Wertes aus der Datenquelle in der Variablen <b>sNeuerWert <\/b>erfolgt durch die danach folgende Anweisung.<\/p>\n<p>Falls die <b>IsInList<\/b>-Funktion die Variable <b>sFeldname <\/b>nicht in der Datenquelle finden kann, wird der Feldname und die Anfangs- und Endemarkierung unver&auml;ndert in die Variable <b>sNeuerWert <\/b>&uuml;bernommen. W&auml;hrend diese Variable im Normalfall den Wert der Variablen aus der Datenquelle speichert, beh&auml;lt sie in diesem Ausnahmefall also den Feldnamen bei. Ein Platzhalter, der zwar einwandfrei markiert, aber nicht in der Datenquelle vorhanden ist, f&uuml;hrt so zu keinem Programmfehler.<\/p>\n<p>Die anschlie&szlig;ende <b>Select Case<\/b>-Anweisung ersetzt den Platzhalter durch den Wert aus der Datenquelle oder &#8211; falls das Feld nicht gefunden wurde &#8211; durch den urspr&uuml;nglichen Platzhalter. Die Vorgehensweise variiert mit der Position des Platzhalters innerhalb der Zeile. Je nachdem, ob er sich am Anfang, am Ende oder an einer anderen Position der Zeile befindet, muss das Ersetzen innerhalb der Zeile durch eine andere Anweisung erfolgen. Am Ende der <b>Select Case<\/b>-Anweisung muss der Zeiger innerhalb der Zeile noch um die L&auml;nge der Zeichenkette <b>sNeuerWert <\/b>erh&ouml;ht werden. Erst dann kann durch einen weiteren Aufruf der <b>InStr<\/b>-Funktion nach weiteren Vorkommen von Platzhaltern gesucht werden.<\/p>\n<h2>Die Funktion IsInList<\/h2>\n<p>Die <b>IsInList<\/b>-Funktion &uuml;berpr&uuml;ft, ob ein bestimmter Feldname in einem Recordset vorhanden ist. Sie durchl&auml;uft dadurch die gesamte <b>Fields<\/b>-Auflistung des als Parameter &uuml;bergebenen Recordsets und vergleicht den Namen jedes Elements mit der Variablen <b>sFeldname<\/b>. Falls der Feldname gefunden wird, gibt die Funktion <b>True <\/b>zur&uuml;ck.<\/p>\n<pre>Function IsInList(sFeldname As String, _\r\n    rs As Recordset) As Boolean\r\n    Dim i As Integer\r\n    Dim InList As Boolean\r\n    InList = False\r\n    i = 0\r\n    Do While i &lt; rs.Fields.Count And Not InList\r\n        If rs.Fields(i).Name = sFeldname Then\r\n            InList = True\r\n        End If\r\n        i = i + 1\r\n    Loop\r\n    IsInList = InList\r\nEnd Function<\/pre>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Die Funktion ZeileSchreiben<\/p>\n<p>Die Funktion <b>ZeileSchreiben <\/b>schreibt eine Zeile in die Textdatei. Der Text der Zeile wird in der Variablen <b>sZeile <\/b>und der Kanal der Zieldatei in der Variablen <b>iDateinummer <\/b>&uuml;bergeben. Das Schreiben erfolgt ebenso wie das Lesen zeichenweise.<\/p>\n<pre>Sub ZeileSchreiben(iDateinummer As Integer, _\r\n    sZeile As String)\r\n    Dim iZeichennr As Integer\r\n    Dim sZeichen As String * 1\r\n    For iZeichennr = 1 To Len(sZeile)\r\n        sZeichen = Mid(sZeile, iZeichennr, 1)\r\n        Put #iDateinummer, , sZeichen\r\n    Next iZeichennr\r\n    End Sub<\/pre>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Mit der hier vorgestellten L&ouml;sung k&ouml;nnen Sie Platzhalter in Textdateien einfach durch die Inhalte einer Tabelle oder Abfrage f&uuml;llen. Das Ergebnis sieht beispielsweise wie in Bild 4 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2001_01\/TextvorlagenMitDatenFuellen-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Die fertiggestellte Zieldatei<\/span><\/b><\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Textvorlagen.mdb<\/p>\n<p>AB_10702.txt<\/p>\n<p>AB_Template.txt<\/p>\n<p>AB_Template.txt<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/6CA6CE9F-38BB-43DA-90BA-A78B6F184C9F\/aiu_8.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine h&auml;ufige Anforderung an eine Datenbank besteht darin, einen Standardtext mit individuellen Daten zu f&uuml;llen. So entstehen beispielsweise Auftragsbest&auml;tigungen, Lieferscheine und Begr&uuml;&szlig;ungsschreiben. Das Team, bestehend aus der Datenbank Access und der Textverarbeitung Word, meistert diese Aufgabe mit Bravour. Wie dies funktioniert, lesen Sie in diesem Beitrag!<\/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":[66012001,662001,44000025],"tags":[],"class_list":["post-55000008","post","type-post","status-publish","format-standard","hentry","category-66012001","category-662001","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Textvorlagen mit Daten f&uuml;llen - 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\/Textvorlagen_mit_Daten_fuellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Textvorlagen mit Daten f&uuml;llen\" \/>\n<meta property=\"og:description\" content=\"Eine h&auml;ufige Anforderung an eine Datenbank besteht darin, einen Standardtext mit individuellen Daten zu f&uuml;llen. So entstehen beispielsweise Auftragsbest&auml;tigungen, Lieferscheine und Begr&uuml;&szlig;ungsschreiben. Das Team, bestehend aus der Datenbank Access und der Textverarbeitung Word, meistert diese Aufgabe mit Bravour. Wie dies funktioniert, lesen Sie in diesem Beitrag!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:16:55+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/0d406afc5a4d4570983027174bbbb6fb\" \/>\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=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Textvorlagen mit Daten f&uuml;llen\",\"datePublished\":\"2020-05-06T15:16:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/\"},\"wordCount\":1802,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/0d406afc5a4d4570983027174bbbb6fb\",\"articleSection\":[\"1\\\/2001\",\"2001\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/\",\"name\":\"Textvorlagen mit Daten f&uuml;llen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/0d406afc5a4d4570983027174bbbb6fb\",\"datePublished\":\"2020-05-06T15:16:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/0d406afc5a4d4570983027174bbbb6fb\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/0d406afc5a4d4570983027174bbbb6fb\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Textvorlagen_mit_Daten_fuellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Textvorlagen mit Daten f&uuml;llen\"}]},{\"@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":"Textvorlagen mit Daten f&uuml;llen - 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\/Textvorlagen_mit_Daten_fuellen\/","og_locale":"de_DE","og_type":"article","og_title":"Textvorlagen mit Daten f&uuml;llen","og_description":"Eine h&auml;ufige Anforderung an eine Datenbank besteht darin, einen Standardtext mit individuellen Daten zu f&uuml;llen. So entstehen beispielsweise Auftragsbest&auml;tigungen, Lieferscheine und Begr&uuml;&szlig;ungsschreiben. Das Team, bestehend aus der Datenbank Access und der Textverarbeitung Word, meistert diese Aufgabe mit Bravour. Wie dies funktioniert, lesen Sie in diesem Beitrag!","og_url":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:16:55+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/0d406afc5a4d4570983027174bbbb6fb","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Textvorlagen mit Daten f&uuml;llen","datePublished":"2020-05-06T15:16:55+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/"},"wordCount":1802,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/0d406afc5a4d4570983027174bbbb6fb","articleSection":["1\/2001","2001","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/","url":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/","name":"Textvorlagen mit Daten f&uuml;llen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/0d406afc5a4d4570983027174bbbb6fb","datePublished":"2020-05-06T15:16:55+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/0d406afc5a4d4570983027174bbbb6fb","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/0d406afc5a4d4570983027174bbbb6fb"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Textvorlagen_mit_Daten_fuellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Textvorlagen mit Daten f&uuml;llen"}]},{"@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\/55000008","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=55000008"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000008\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}