{"id":55000484,"date":"2007-08-01T00:00:00","date_gmt":"2021-01-12T22:37:42","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=484"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Rechnungen_in_Word_schreiben","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/","title":{"rendered":"Rechnungen in Word schreiben"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg04.met.vgwort.de\/na\/58c838d3200d4ab08ffbe4fa23ec78f2\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Die Grenzen des Berichtsgenerators, den Access von Hause aus mitbringt, sind bei gehobenen Anspr&uuml;chen rasch erreicht. Manch einer mag sich da schon die vielf&auml;ltigen Formatierungsm&ouml;glichkeiten von Word gew&uuml;nscht haben. Nun, warum nicht: Gestandene Word-Profis werden es weniger gern h&ouml;ren, aber aus Sicht des Datenbank-Entwicklers ist Word schlie&szlig;lich nichts anderes als eine Erweiterung der Alma Mater Access.<\/b><\/p>\n<\/p><\/div>\n<div class=\"story\">\n<p>Wie Sie Word zum Ausgeben der Daten Ihrer Datenbank einsetzen, erfahren Sie im vorliegenden Beitrag am Beispiel einer Rechnung. Diese k&ouml;nnen Sie zwar auch in Form eines Access-Berichts ausgeben, aber was, wenn der Sachbearbeiter den Feinschliff gern in Word vornehmen m&ouml;chte<\/p>\n<p>Grundlegende Informationen zum Zugriff auf Word per VBA finden Sie &uuml;brigens im Beitrag <b>Von Access nach Word <\/b>(s. Shortlink 360).<\/p>\n<p><b>Aufbau einer Rechnung<\/b><\/p>\n<p>Vor der ersten Zeile Code lohnt ein Blick auf das gew&uuml;nschte Resultat &#8211; sprich: den Aufbau des zu erstellenden Rechnungsdokuments (siehe Bild 1). Dieses enth&auml;lt zun&auml;chst konstante Bereiche, die entweder der Gesch&auml;ftspapiervordruck oder die Word-Vorlage in Form vorgegebener Elemente liefert, hier also der eigentliche Briefkopf und Angaben im Fu&szlig;bereich wie Gru&szlig;formel, eventuell eine feste Bankverbindung und &auml;hnliches.<\/p>\n<div class=\"abbildung\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_04\/WordAutomation_3-web-images\/Demo_opt.jpeg\" alt=\"Demo.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 1: Aufbau des Word-Dokuments<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Des Weiteren gibt es variable Bereiche, die der Code Ihrer Anwendung manipulieren soll &#8211; Anschriftenfeld und Rechnungsnummer &#8211; und einen (oder mehrere) Listenbereiche, die ebenfalls variabel sind, hier die Rechnungspositionen.<\/p>\n<p>Interessant sind die variablen Bereiche, die der Code Ihrer Anwendung manipulieren soll. Die einfach variablen und die Listendaten finden sich in der Datenbank in der Regel als 1:n-Beziehung; im gew&auml;hlten Fall einer Rechnungserstellung also zum Beispiel Bestellungen und Bestelldetails.<\/p>\n<p>Die konstanten und einfachen variablen Bereiche entsprechen dabei dem Berichtskopf beziehungsweise -fu&szlig;, die sich wiederholenden variablen Bereiche (hier zur Anzeige der Bestelldetails) dem Detailbereich eines Berichts.<\/p>\n<p>Alles, was Sie &uuml;ber die Word-Oberfl&auml;che erledigen k&ouml;nnen, ist auch mittels Code machbar &#8211; wie beispielsweise das Erzeugen eines beliebig komplexen Dokuments aus einer v&ouml;llig leeren Vorlage. Das w&auml;re allerdings ein Berg &uuml;berfl&uuml;ssiger Arbeit. Die nat&uuml;rliche Faulheit des Programmierers (man kann es auch Intelligenz nennen) und Erfahrung im Entwurf von Access-Berichten weisen den rechten Weg: Die Word-Vorlage liefert die fixen Elemente, alles andere f&uuml;gen die passenden Routinen hinzu. <\/p>\n<p><b>Besonderheiten der Textverarbeitung<\/b><\/p>\n<p>Das Word-Objektmodell und damit der Aufbau eines Word-Dokuments bringen f&uuml;r Access-Entwickler Ungewohntes mit sich:<\/p>\n<p>Nach einem <b>Page<\/b>-Objekt, das eine Seite repr&auml;sentiert, oder nach Analogien zu Textfeldern, die als wohl definierte Beh&auml;lter f&uuml;r die per Code zu schreibenden Werte dienen, sucht man vergeblich.<\/p>\n<p>Das ist auch gut so, denn eine Textverarbeitung ist in erster Linie daf&uuml;r gedacht, Flie&szlig;text aufzunehmen, dessen Umbruch sich nach Schriftart und -gr&ouml;&szlig;e, nach Seitenr&auml;ndern und &auml;hnlichem richtet. Wo nun also konkret ein bestimmtes Textst&uuml;ck landet, zum Beispiel dritte Seite, zweiter Absatz, zweites Wort, steht beim Bef&uuml;llen des Dokuments noch nicht fest.<\/p>\n<p>Zus&auml;tzlich gilt es einige Dinge zu beachten, die einem Datenbankprogrammierer gar zu leicht von der Hand gehen, in einer Textverarbeitung aber mindestens mieser Stil sind:<\/p>\n<p>Die Konstante <b>vbCrLf<\/b> etwa ist in Word nicht einfach ein Zeilenwechsel, sondern hat die spezielle Bedeutung des Absatzes (<b>Paragraph<\/b>). Da die Zeilen einer Adresse beispielsweise insgesamt einen Absatz bilden, ist hier die weiche Zeilenschaltung (ASCII-Code 11) zu verwenden:<\/p>\n<pre>Anrede &amp; Chr(11) &amp; Vorname &amp; &quot; &quot; &amp; Name &amp; Chr(11) &amp; Stra&szlig;e &amp; Chr(11) &amp; Chr(11) &amp; PLZ &amp; &quot; &quot; &amp; Ort<\/pre>\n<p>Abst&auml;nde vor und nach Abs&auml;tzen erzeugen Sie nicht durch mehrere <b>vbCrLf<\/b>, sondern durch entsprechende Absatzformate:<\/p>\n<pre>ParagraphFormat.SpaceBefore = 12\r\nParagraphFormat.SpaceAfter = 6<\/pre>\n<p>Dadurch w&uuml;rden Sie bei Schriftgr&ouml;&szlig;en von 10 bis 12 Punkt vor dem Absatz eine volle und danach eine halbe Leerzeile einf&uuml;gen.<\/p>\n<p>F&uuml;r Einr&uuml;ckungen sind nicht Tabulatoren oder Leerzeichenfolgen zust&auml;ndig, sondern eine passende Formatierung. Die folgende erzeugt etwa einen linken Einzug von zwei Zentimetern:<\/p>\n<pre>ParagraphFormat.LeftIndent = _\r\nInchesToPoints(2 \/ 2.54)<\/pre>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Wichtige Objekte<\/p>\n<p>Um nun &uuml;berhaupt an einer definierten Position schreiben zu k&ouml;nnen, brauchen Sie Elemente, die Sie in den Text einbauen und per Code ansprechen k&ouml;nnen. Als wichtigste sind hier zu nennen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Textmarken (Bookmarks)<\/li>\n<li class=\"aufz-hlung\">Felder (Fields)<\/li>\n<li class=\"aufz-hlung\">Tabellen (Tables)<\/li>\n<\/ul>\n<p>Die gr&ouml;&szlig;te Bedeutung kommt hier den Textmarken zu &#8211; insbesondere k&ouml;nnen Sie diese mit einem Namen versehen.<\/p>\n<p>Felder und Tabellen lassen sich nur durch einen numerischen Index ansprechen, wodurch Sie bei der Programmierung entweder die Topologie der Vorlage genau kennen m&uuml;ssen oder mittels Bookmarks umgehen k&ouml;nnen: Dazu fassen Sie beispielsweise eine Tabelle vollst&auml;ndig in eine Textmarke ein und erzeugen dar&uuml;ber einen Objektverweis auf die enthaltene Tabelle. Der erforderliche Code braucht noch nicht einmal eine zus&auml;tzliche Zeile. Mit Feldern ist das ebenfalls m&ouml;glich.<\/p>\n<p>Eine Besonderheit, die sich direkt auf Ihre Programmiergewohnheiten niederschl&auml;gt, ist folgende: S&auml;mtliche Auflistungen in Word beginnen mit den Indexwert <b>1<\/b>.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Hinweis f&uuml;r Makro-Fans<\/p>\n<p>Eine kleine Warnung an Entwickler, die mit dem Makro-Rekorder von Word aufgezeichnete Makros als Grundlage f&uuml;r Eigenkreationen verwenden: Der Recorder arbeitet prinzipbedingt intensiv mit Objekten wie <b>ActiveDocument<\/b> und <b>Selection <\/b>beziehungsweise nimmt selbst Selektionen (Markierungen) vor.<\/p>\n<p>Viele interne Funktionsprozeduren, die eigentlich einen Objektverweis zur&uuml;ckgeben, werden in der Art einer Befehlsliste mit Sub-Syntax aufgerufen. F&uuml;r die Automation von einer anderen Anwendung aus ist dieses Vorgehen im Allgemeinen unbrauchbar: Sie sollten daher immer mit definierten Objektvariablen arbeiten und Bereiche mit <b>Range<\/b>-Objekten identifizieren.<\/p>\n<p><b>Word starten<\/b><\/p>\n<p>Einen Verweis auf eine Word-Instanz erhalten Sie mit unterschiedlichen Methoden. Verbreitet ist die Variante, zu versuchen, eine laufende Instanz anzusprechen und im Fehlerfall eine neue Instanz zu starten.<\/p>\n<p>Das Vorhandensein einer Word-Instanz ist auch per API-Funktion pr&uuml;fbar. Beide Varianten finden Sie in der Beispieldatenbank zu diesem Beitrag.<\/p>\n<p>Eine kaum bekannte Methode, die ohne Fehlerprovokation und ohne API auskommt, ist die aus Listing 1.<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 1: Word-Instanz holen<\/p>\n<pre>Dim wdApp As Word.Application\r\nDim wdDoc As Word.Document, wdDocDummy As Word.Document\r\nDim tDoc As String\r\ntDoc = &quot;Pfad\\und\\Name.doc&quot;\r\nSet wdDocDummy = CreateObject(&quot;Word.Document&quot;)\r\nSet wdApp = wdDocDummy.Application\r\nSet wdDoc = wdApp.Documents.Add(tDoc)\r\nwdDocDummy.Close<\/pre>\n<\/p><\/div>\n<p>Alle Methoden liefern jedoch das gleiche Ergebnis &#8211; einen g&uuml;ltigen Objektverweis auf das gew&uuml;nschte Dokument.<\/p>\n<p><b>Textmarken verwenden<\/b><\/p>\n<p>Wie schon erw&auml;hnt, steuert man das Word-Dokument am sinnvollsten mittels Textmarken. Es gibt hier zwei Typen, die offene I-Bookmark und die begrenzte [ ]-Bookmark.<\/p>\n<p>Beide weisen Sie &uuml;ber den Men&uuml;eintrag <b>Einf&uuml;gen\/Textmarke <\/b>zu. Der Unterschied liegt im markierten Bereich: Liegt eine Markierung vor, umfasst die Textmarke diesen Bereich, sonst f&uuml;gt Word eine offene Textmarke an der Stelle der Einf&uuml;gemarke ein.<\/p>\n<p>Falls Sie die Textmarken auch sehen m&ouml;chten, w&auml;hlen Sie den Men&uuml;befehl <b>Extras\/Optionen\/Ansicht\/Textmarken <\/b>aus (Word 2007: <b>Word-Optionen\/Erweitert\/Dokumentinhalt anzeigen\/Textmarken anzeigen<\/b>).<\/p>\n<p>Per Code funktioniert dies wie folgt:<\/p>\n<pre>ActiveWindow.View.ShowBookmarks = [True|False]<\/pre>\n<p>Beim Beschreiben verhalten sich beide Typen unterschiedlich. Eine offene Textmarke schreibt den Text direkt hinter ihre Position, wobei sie selbst unbeschadet bleibt. Ein Beispiel sind die folgenden Zeilen, die sich auf eine offene Textmarke namens Test beziehen:<\/p>\n<pre>With wdDoc.Bookmarks(&quot;Test&quot;)\r\n     .Range.Text = &quot;Erstens&quot;\r\n     .Range.Text = &quot;Zweitens&quot;\r\n     .Range.Text = &quot;Drittens&quot;\r\nEnd With<\/pre>\n<p>Wenn das Zeichen <b>|<\/b> die Position der Textmarke angibt, sorgen die obigen Zeilen nacheinander f&uuml;r folgende Ausgabe:<\/p>\n<pre>I Erstens\r\nI ZweitensErstens\r\nI DrittensZweitensErstens<\/pre>\n<p>Eine begrenzte Textmarke verh&auml;lt sich anders. Sie wird durch den eingef&uuml;gten Text ersetzt. Die Textmarke <b>[ ] <\/b>wird durch die Anweisung<\/p>\n<pre>.Range.Text = &quot;Erstens&quot;<\/pre>\n<p>in den Text<\/p>\n<pre>Erstens<\/pre>\n<p>umgewandelt. Der Aufruf der Anweisung<\/p>\n<pre>.Range.Text = &quot;Zweitens&quot;<\/pre>\n<p>und damit der Versuch, der Textmarke einen weiteren Ausdruck zuzuweisen, l&ouml;st einen Laufzeitfehler aus, da eine begrenzte Textmarke beim Beschreiben zerst&ouml;rt wird. <\/p>\n<p>Das ist nicht weiter tragisch: Einerseits will man ja einen Text nicht mehrfach &uuml;berschreiben, andererseits kann man die Textmarke, falls man sie doch mehrfach zu brauchen meint, mit folgendem Trick retten:<\/p>\n<pre>&apos;[]-Bookmark retten\r\nSet wdRng = _\r\nwdDoc.Bookmarks(&quot;Test&quot;).Range\r\nwdRng.Text = &quot;Irgendwas&quot;\r\nwdDoc.Bookmarks.Add &quot;Test&quot;, wdRng<\/pre>\n<p>Dabei ist <b>wdRng <\/b>eine Variable vom Typ <b>Word.Range<\/b>. <\/p>\n<p>Wer keinen Laufzeitfehler riskieren m&ouml;chte, verwendet zus&auml;tzlich die folgende Anweisung:<\/p>\n<pre>If wdDoc.Bookmarks.Exists(&quot;Test&quot;) _\r\n Then ...<\/pre>\n<p class=\"zwischen-berschriftnachquellcode\">Das Range-Objekt<\/p>\n<p><!--30percent--><\/p>\n<p>Das <b>Range<\/b>-Objekt ist der Schl&uuml;ssel f&uuml;r die gesamte Word-Programmierung. Es steht f&uuml;r einen Bereich, den man sich wie eine Markierung im Word-Dokument vorstellen kann. Ein Range hat immer einen Anfang und ein Ende sowie eine sich daraus ergebende Ausdehnung.<\/p>\n<p>Der kleinstm&ouml;gliche Range hat die Ausdehnung 0 und entspricht einer Cursor-Position &#8211; f&uuml;r die &auml;lteren Leser: einem Lichtmarkenzeiger. Ansonsten kann alles ein Range sein, was sich markieren l&auml;sst: etwa ein Buchstabe, ein Wort, ein Absatz, eine Tabelle, eine Tabellenzelle, ein Feld, ein Abschnitt oder das ganze Dokument.<\/p>\n<p>Der gro&szlig;e Vorteil des <b>Range<\/b>-Objekts liegt in seiner Eigenschaft als virtuelle Markierung. Es kann dadurch nicht mit einer eventuellen Textauswahl eines Benutzers interferieren, au&szlig;erdem lassen sich beliebig viele Ranges parallel verarbeiten. Obendrein ist ein <b>Range<\/b> erheblich schneller als eine echte Auswahl, die es unter dem Begriff <b>Selection <\/b>ebenfalls gibt.<\/p>\n<p>In der Praxis legen Sie einen Range nicht durch Anfangs- und Endposition fest, sondern durch die <b>Range<\/b>-Eigenschaft, die viele Word-Objekte zur Verf&uuml;gung stellen (s. Tab. 1).<\/p>\n<div class=\"story\">\n<table class=\"table-style-3\">\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Bereich<\/p>\n<\/td>\n<td>\n<p class=\"kastentabelleheader\">Bedeutung<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n                        <\/td>\n<\/tr>\n<tr>\n<td  colspan=\"2\">\n<p><b><span style=\"color:darkgrey\">Tab. 1: Bereiche und ihre Bedeutung<\/span><\/b><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p>Fast alle anschaulichen Word-Objekte haben eine <b>Range<\/b>-Eigenschaft, die einen Verweis auf ein <b>Range<\/b>-Objekt zur&uuml;ckgibt, gelegentlich ergeben aber auch Eigenschaften anderen Namens ein <b>Range<\/b>-Objekt.<\/p>\n<p>Eine Logik gibt es dahinter nicht. Nun ja, die Word-Entwickler waren wohl keine Datenb&auml;nkler, also &uuml;ben wir Nachsicht &#8230;<\/p>\n<p><b>In medias res<\/b><\/p>\n<p>Die bisherigen Erw&auml;gungen setzen Sie jetzt direkt in die Praxis um. Den vollst&auml;ndigen lauff&auml;higen Code finden Sie in der Beispieldatenbank.<\/p>\n<p>Wie eingangs erw&auml;hnt, bereiten Sie das Word-Dokument am besten von Hand vor. Um das oben abgebildete Dokument zu erzeugen, f&uuml;gen Sie die Elemente aus Bild 2 hinzu oder Sie verwenden einfach die mitgelieferte Beispieldatei <b>VorlageBriefTab.doc<\/b>.<\/p>\n<div class=\"image\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_04\/WordAutomation_3-web-images\/Briefkopf_opt.jpeg\" alt=\"Briefkopf.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 2: Der Briefkopf mit seinen Textmarken<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Die obere Tabelle befindet sich im Kopfzeilenbereich und enth&auml;lt die allgemeinen Briefkopfangaben, die untere im eigentlichen Dokument. Die endg&uuml;ltige Anwendung gibt die Tabellen nat&uuml;rlich ohne sichtbare Rahmenlinien aus.<\/p>\n<p>Das Dokument enth&auml;lt die Textmarken aus Bild 3, im Dokument sehen diese Textmarken wie in Bild 4 aus. Man beachte das kaum sichtbare <b>[<\/b> vor dem <b>B <\/b>von <b>Bezeichnung<\/b>: Dies ist der Beginn der Textmarke Tabelle. Das schlie&szlig;ende ]-Symbol finden Sie in der darunter liegenden Zeile (siehe Bild 5).<\/p>\n<div class=\"image\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_04\/WordAutomation_3-web-images\/Textmarken_opt.jpeg\" alt=\"Textmarken.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 3: Der Dialog zum Verwalten der Textmarken<\/span><\/b><\/p>\n<\/p><\/div>\n<div class=\"abbildungrahmen\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_04\/WordAutomation_3-web-images\/TabelleGanz_opt.jpeg\" alt=\"TabelleGanz.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 5: Die komplette Artikeltabelle<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Die erste leere Datenzeile ist, obwohl ohne Inhalt, auf die gew&uuml;nschte Schriftart vorformatiert, wodurch per Code eingef&uuml;gter Text direkt die gew&uuml;nschte Formatierung erh&auml;lt.<\/p>\n<p>Der besseren &uuml;bersicht halber ist es sinnvoll, Textmarken in der geschlossenen Form zu verwenden und als Vorgabetext den Namen der Textmarke, der nat&uuml;rlich auf ihre Verwendung schlie&szlig;en lassen sollte, zu benutzen &#8211; also wie in Bild 4 <b>[Betreff]<\/b>.<\/p>\n<div class=\"abbildungrahmen\">\n            <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_04\/WordAutomation_3-web-images\/Rest_opt.jpeg\" alt=\"Rest.tif\" \/>\n        <\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 4: Textmarken<\/span><\/b><\/p>\n<\/p><\/div>\n<p>Eine Alternative w&auml;re ein Beispieltext wie <b>[Sehr geehrte]<\/b>; nach der ersten Methode w&uuml;rde dies <b>[Anrede] <\/b>lauten.<\/p>\n<p>So haben Sie beim Entwurf eine Vorschau, was wo stehen wird. Dies ist v&ouml;llig leeren Marken sicher vorzuziehen.<\/p>\n<p>Das F&uuml;llen der Textmarke &uuml;berschreibt dann den Vorgabetext und l&ouml;scht die Marke. Da sich das nur auf die aus der Vorlage erzeugten Dokumente, nicht aber auf die Vorlage selbst auswirkt, bleibt diese unver&auml;ndert bestehen.<\/p>\n<p>Abweichend hiervon verwenden Sie f&uuml;r die Anschrift immer eine offene Textmarke (ohne Vorgabetext, da dieser nicht &uuml;berschrieben w&uuml;rde), da Sie so mit einem kleinen Trick schnell und einfach die Zeile mit PLZ und Ort fett formatieren k&ouml;nnen.<\/p>\n<p>Die folgenden Anweisungen f&uuml;llen die Vorlage mit der Empf&auml;nger-Adresse und formatieren PLZ und Ort fett:<\/p>\n<pre>Set wdRng = _\r\nwdDoc.Bookmarks(&quot;Anschrift&quot;).Range\r\nwdRng.Text = PLZOrt\r\nwdRng.Font.Bold = True\r\nSet wdRng = _\r\nwdDoc.Bookmarks(&quot;Anschrift&quot;).Range\r\nwdRng.Text = Adresse\r\nwdRng.Font.Bold = False<\/pre>\n<p>Die Variablen <b>PLZOrt <\/b>und <b>Adresse <\/b>werden aus der Datenbank bef&uuml;llt. Typisch f&uuml;r die offene Textmarke ist die Reihenfolge beim F&uuml;llen: Der Text, der unten stehen soll, wird zuerst geschrieben, danach erst folgt der Text, der dar&uuml;ber steht. Wichtig ist hier das nochmalige Zuweisen des Textmarkenbereichs an die <b>Range<\/b>-Variable, da das Range-Objekt nach der ersten Textzuweisung um eben diesen Text erweitert wird.<\/p>\n<p>Die geschlossenen Textmarken beschreiben Sie mit Anweisungen nach folgendem Muster:<\/p>\n<pre>wdDoc. _\r\nBookmarks(&quot;Betreff&quot;).Range.Text = _\r\n&quot;Rechnung Nr. 2007\/12345&quot;<\/pre>\n<p>Hierbei stammen die gew&uuml;nschten Texte aus den betreffenden Datenbankfeldern oder sind gegebenenfalls Textkonstanten.<\/p>\n<p>Eine kleine Besonderheit gibt es beim Beschreiben der Textmarke <b>Nachtext<\/b>. Diese steht direkt unter der Detailtabelle. Um hier einen Abstand zu erzeugen, versehen Sie den ersten Absatz des Bereichs Nachtext nach dem Einf&uuml;gen des Textes mit einem entsprechenden Format.<\/p>\n<p>Da das Zuweisen des Texts die Textmarke aber l&ouml;scht, k&ouml;nnen Sie diese danach nicht mehr ansprechen. Daher weisen Sie den Range der Textmarke vorher einfach einer Objektvariablen zu. Diese &uuml;bersteht das Desaster n&auml;mlich klaglos (s. Listing 2).<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 2: Per Objektvariable referenzierte Textmarken leben l&auml;nger.<\/p>\n<pre>Set wdRng = .Bookmarks(&quot;Nachtext&quot;).Range\r\nwdRng.Text = _\r\n     &quot;Bitte &uuml;berweisen Sie den Endbetrag auf das Ihnen bekannte Konto.&quot; &amp; _\r\n     vbCrLf &amp; _\r\n     &quot;Beachten Sie hierbei die vereinbarten Zahlungsbedingungen f&uuml;r Skonti.&quot;\r\nwdRng.Paragraphs(1).Range.ParagraphFormat.SpaceBefore = 6<\/pre>\n<\/p><\/div>\n<p>Es fehlt noch die Detailtabelle mit den Rechnungspositionen. Den Verweis holen Sie sich sich, soweit bekannt, &uuml;ber den numerischen Index der Tabelle oder aus einer entsprechend gesetzten Textmarke namens <b>Tabelle<\/b>, was die sch&ouml;nere L&ouml;sung ist. Die Variante mit dem Index sieht so aus:<\/p>\n<pre>Set wdTab = wdDoc.Tables(2)<\/pre>\n<p>Im Beispieldokument ist die Tabelle &#8211; zuf&auml;llig &#8211; die zweite im Text-Layer. Die erste ist der Briefkopf nach DIN.<\/p>\n<p>Folgende Variante zeigt, wie Sie die in eine Textmarke eingebettete Tabelle referenzieren:<\/p>\n<pre>Set wdTab = .Bookmarks(&quot;Tabelle&quot;).Range.Tables(1)<\/pre>\n<p>Die gleiche Tabelle ist die erste (da einzige) innerhalb des Bereichs der Textmarke <b>Tabelle<\/b>. Die Zugriffsnummer ist so also immer gleich.<\/p>\n<p>Letzteres ist insbesondere n&uuml;tzlich, wenn Sie komplexere Dokumente mit mehreren Tabellen aufbauen m&ouml;chten.<\/p>\n<p>Den Code f&uuml;r das Bef&uuml;llen der Tabelle finden Sie in Listing 3.<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 3: F&uuml;llen einer Tabelle mit Daten aus einer Datenbank<\/p>\n<pre>Set rst = CurrentDb.OpenRecordset(SQL)\r\nrst.MoveLast\r\nn = rst.RecordCount\r\nrst.MoveFirst\r\nWith wdTab\r\n     For i = 2 To n + 1\r\n         .Cell(i, 1).Range.Text = &quot;&quot; &amp; rst.Fields(&quot;Bezeichnung&quot;). _<br \/> Value\r\n         Anzahl = Nz(rst.Fields(&quot;Anzahl&quot;).Value, 0)\r\n         .Cell(i, 2).Range.Text = Anzahl\r\n         Einzelpreis = Nz(rst.Fields(&quot;Preis&quot;).Value, 0)\r\n         .Cell(i, 3).Range.Text = Format$(Einzelpreis, &quot;#,##0.00 &euro;&quot;)\r\n         Gesamtpreis = Anzahl * Einzelpreis\r\n         .Cell(i, 4).Range.Text = Format$(Gesamtpreis, &quot;#,##0.00 &euro;&quot;)\r\n         Summe = Summe + Gesamtpreis\r\n         rst.MoveNext\r\n         .Rows.Add\r\n     Next i\r\n     .Cell(n + 2, 1).Range.Text = &quot;Zwischensumme&quot;\r\n     .Cell(n + 2, 4).Range.Text = Format$(Summe, &quot;#,##0.00 &euro;&quot;)\r\n     .Rows(n + 2).Range.Font.Italic = True\r\n     .Rows.Add\r\n     .Cell(n + 3, 1).Range.Text = &quot;Mehrwertsteuer 19 %&quot;\r\n     .Cell(n + 3, 4).Range.Text = Format$(Summe * 0.19, &quot;#,##0.00 &quot;)\r\n     .Rows.Add\r\n     .Cell(n + 4, 1).Range.Text = &quot;Endsumme&quot;\r\n     .Cell(n + 4, 4).Range.Text = Format$(Summe * 1.19, &quot;#,##0.00 &euro;&quot;)\r\n     .Rows(n + 4).Range.Font.Italic = False\r\n     .Rows(n + 4).Range.Font.Bold = True\r\nEnd With<\/pre>\n<\/p><\/div>\n<p>Allzu kompliziert ist der Ablauf nicht: Neue Zeilen f&uuml;gen Sie mit <b>.Rows.Add <\/b>hinzu; die Formatierungen der jeweils letzten Zeile werden dabei automatisch mit &uuml;bernommen.<\/p>\n<p>Der Zugriff auf die Tabellenzellen erfolgt mit <b>.Cell(Zeile, Spalte)<\/b>.<\/p>\n<p><b>Tabelle selbst gemacht<\/b><\/p>\n<p>Falls Sie eine Tabelle ohne Vorlage komplett per Code erstellen wollen, &auml;ndert sich nicht viel. Die folgende Anweisung f&uuml;gt eine Tabelle mit zw&ouml;lf Zeilen und drei Spalten im Bereich <b>wdRng <\/b>ein:<\/p>\n<pre>Set wdTab = _\r\n wdDoc.Tables.Add(wdRng, 12, 3)<\/pre>\n<p>Nat&uuml;rlich m&uuml;ssen Sie jetzt die gesamte Formatierung mit Schattierungen und Rahmenlinien per Code vornehmen: Wie das aussieht, zeigt das Beispiel aus Listing 4.<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 4: Formatieren einer Tabelle per Code<\/p>\n<pre>With wdTab\r\n     With .Rows(1)\r\n         With .Borders(wdBorderBottom)\r\n             .LineStyle = wdLineStyleDouble\r\n             .Color = wdColorBlack\r\n         End With\r\n         With .Shading\r\n             .BackgroundPatternColor = wdColorGray50\r\n         End With\r\n         .Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphRight\r\n     End With\r\n     For i = 2 To 12\r\n         With .Rows(i)\r\n             With .Borders(wdBorderBottom)\r\n                 .LineStyle = wdLineStyleSingle\r\n                 .LineWidth = wdLine-Width100pt\r\n                 .Color = wdColor-Gray50\r\n             End With\r\n             .Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphRight\r\n         End With\r\n     Next i\r\n     With .Columns(1)\r\n         With .Borders(wdBorderLeft)\r\n             .LineStyle = wdLineStyleSingle\r\n             .LineWidth = wdLine-Width100pt\r\n             .Color = wdColorGray50\r\n         End With\r\n     End With\r\n     With .Columns(3)\r\n         With .Borders(wdBorderRight)\r\n             .LineStyle = wdLineStyleSingle\r\n             .LineWidth = wdLine-Width100pt\r\n             .Color = wdColorGray50\r\n         End With\r\n     End With\r\nEnd With<\/pre>\n<\/p><\/div>\n<p><b>Row <\/b>und <b>Column <\/b>weisen eine <b>Cells<\/b>-Eigenschaft auf, die mit einem Index die Zellen in einer Zeile oder Spalte nummeriert. Das <b>Table<\/b>-Objekt hingegen besitzt eine <b>Cell<\/b>-Eigenschaft, die mit zwei Indizes die Zellen aus Sicht der Tabelle adressiert. Der Rest des Codes d&uuml;rfte bei den Englisch-Kenntnissen, &uuml;ber die ein Entwickler zwangsl&auml;ufig verf&uuml;gt, selbsterkl&auml;rend sein.<\/p>\n<p>&uuml;berraschend ist f&uuml;r den Datenb&auml;nkler wohl in erster Linie die abstrus wirkende Schachtelung der Objekte, die aber, wenn man etwas dar&uuml;ber nachdenkt, vor dem Hintergrund der Erfordernisse einer Textverarbeitung durchaus ihren Sinn hat. Immerhin lernt man so bei der Word-Programmierung auch zehnfach geschachtelte <b>With<\/b>-Anweisungen zu sch&auml;tzen.<\/p>\n<p><b>Verwenden von AutoText<\/b><\/p>\n<p>Sie werden l&auml;ngere Textst&uuml;cke wahrscheinlich ungern in der Datenbank pflegen wollen. Noch weniger erfreulich w&auml;re das Ablegen im Quellcode: Wenn ein Benutzer eine &auml;nderung einer Phrase w&uuml;nschte, m&uuml;sste die Anwendung ge&auml;ndert werden mit allen organisatorischen Folgen. Mit Blick auf das Qualit&auml;tsmanagement eine unhaltbare Vorgehensweise.<\/p>\n<p>Word sei dank, gibt es daf&uuml;r Autotexte, die Benutzer problemlos selbst verwalten und &auml;ndern k&ouml;nnen. Diese Autotexte sind nat&uuml;rlich auch per Code zug&auml;nglich. Dazu m&uuml;ssen Sie nur Folgendes wissen: Word speichert Autotexte nicht in Dokumenten, sondern in Dokumentvorlagen (Templates, Endung .dot). Jedes Dokument basiert auf einer solchen Vorlage; falls nichts anderes bestimmt wurde, handelt es sich dabei um die Vorlage <b>Normal.dot<\/b>.<\/p>\n<p>Den Verweis auf die mit Ihrem Dokument verbundene Vorlage bekommen Sie mit folgenden Anweisungen:<\/p>\n<pre>Dim wdDot As Word.Template\r\nSet wdDot = wdDoc.AttachedTemplate\r\n&apos;f&uuml;r mit dem Dokument verbundene Vorlage\r\nSet wdDot = wdApp.NormalTemplate \r\n&apos;f&uuml;r Standard-Vorlage Normal.dot<\/pre>\n<p>Mit diesem Objektverweis haben Sie dann Zugriff auf die in der Vorlage abgelegten Autotexte mit diesem Code:<\/p>\n<pre>wdDot.AutoTextEntries(&quot;Vortext&quot;).Insert _<br \/> wdDoc.Bookmarks(&quot;Vortext&quot;).Range\r\nwdDot.AutoTextEntries(&quot;Nachtext&quot;).Insert _<br \/> wdDoc.Bookmarks(&quot;Nachtext&quot;).Range<\/pre>\n<p>Nat&uuml;rlich m&uuml;ssen Autotexte mit diesen Namen auch angelegt sein! Wenn die Autotexte gleich benannt sind wie die Textmarken, die sie aufnehmen sollen, erh&ouml;ht dies die &uuml;bersicht. In jedem Fall k&ouml;nnen Sie die Namen frei vergeben.<\/p>\n<p><b>Die Beispielanwendung<\/b><\/p>\n<p>Zu diesem Artikel finden Sie eine kleine Demo-Anwendung mit lauff&auml;higem Code. Da es in diesem Artikel in erster Linie um die Verwendung von Word f&uuml;r Ausgaben geht, liegt der Fokus nat&uuml;rlich nicht auf der Pr&auml;sentation eines vollst&auml;ndigen, sauber normalisierten Warenwirtschaftssystems.<\/p>\n<p>Das verwendete kleine Tabellenmodell wird in keiner Weise einer ordentlichen Rechnungsverwaltung gerecht. <\/p>\n<p>Mit Absicht wurde im Code auch auf jedwedes Drumherum mit Objektkapselung, ausgefeilten Error-Handlern, exotischen Performance-Optimierungen und abstrusen API-Funktionen verzichtet.<\/p>\n<p>Der didaktische Anspruch besteht darin, einen Einblick in den Umgang mit den Word-Objekten zu geben und nicht, diese in einem Wald von Techniken zu verstecken, die interessant sein m&ouml;gen, aber mit dem eigentlichen Thema nichts zu tun haben.<\/p>\n<p>Ebenfalls aus didaktischen Gr&uuml;nden arbeitet das Beispiel konsequent mit Early-Binding &#8211; also mit einem direkten Verweis auf die Word-Bibliothek im VBA-Projekt.<\/p>\n<p>Die Risiken von Early-Binding sind durchaus diskussionsw&uuml;rdig, zum Lernen ist es durch IntelliSense aber allemal besser geeignet. Wer mit Word erst einmal sattelfest ist, kann seine produktiven Anwendungen jederzeit auf Late-Binding umstellen.<\/p>\n<p>Dabei wird der Verweis auf Word in der Datenbank entfernt und alle Objektvariablen mit Bezug auf die Word-Bibliothek als <b>Object <\/b>deklariert. Konstanten aus der Word-Bibliothek m&uuml;ssen dann au&szlig;erdem durch ihre &auml;quivalenten Zahlenwerte ersetzt werden.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Sie haben nun gesehen, wie man eine klassische Rechnung in Word per Code mit Datenbankinhalten f&uuml;llt. Selbstverst&auml;ndlich k&ouml;nnen Sie Word auch f&uuml;r weitaus komplexere Aufgaben einsetzen.<\/p>\n<p>Denkbar w&auml;re zum Beispiel ein Rechnungsentwurf in der Art der heute &uuml;blichen Telekom-Rechnung, also auf der ersten Seite Anschreiben und Endsumme, auf den Folgeseiten, eventuell hierarchisch gegliedert, die Details in Tabellenform.<\/p>\n<p>Oder Sie m&ouml;chten vielleicht an Stelle der hier vorgestellten Push-Technik lieber eine Pull-Technik einsetzen, also dem Word-Benutzer Elemente verf&uuml;gbar machen, mit denen er sich Daten aus einer Datenbank ziehen kann.<\/p>\n<p>All diese M&ouml;glichkeiten lassen sich nat&uuml;rlich ebenfalls verwirklichen. Nun haben Sie die ersten Schritte beim Einstieg in den Umgang mit Word-Automation bereits erfolgreich bew&auml;ltigt.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>WordRechnung.mdb<\/p>\n<p>VorlageBriefTab.doc<\/p>\n<p>VorlageElemente.doc<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/B9EF2607-322D-49A1-8085-00117253450F\/aiu_484.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Grenzen des Berichtsgenerators, den Access von Hause aus mitbringt, sind bei gehobenen Anspr&uuml;chen rasch erreicht. Manch einer mag sich da schon die vielf&auml;ltigen Formatierungsm&ouml;glichkeiten von Word gew&uuml;nscht haben. Nun, warum nicht: Gestandene Word-Profis werden es weniger gern h&ouml;ren, aber aus Sicht des Datenbank-Entwicklers ist Word schlie&szlig;lich nichts anderes als eine Erweiterung der Alma Mater Access.<\/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":[662007,66042007,44000026,44000031],"tags":[],"class_list":["post-55000484","post","type-post","status-publish","format-standard","hentry","category-662007","category-66042007","category-Interaktiv","category-Word"],"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>Rechnungen in Word schreiben - 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\/Rechnungen_in_Word_schreiben\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rechnungen in Word schreiben\" \/>\n<meta property=\"og:description\" content=\"Die Grenzen des Berichtsgenerators, den Access von Hause aus mitbringt, sind bei gehobenen Anspr&uuml;chen rasch erreicht. Manch einer mag sich da schon die vielf&auml;ltigen Formatierungsm&ouml;glichkeiten von Word gew&uuml;nscht haben. Nun, warum nicht: Gestandene Word-Profis werden es weniger gern h&ouml;ren, aber aus Sicht des Datenbank-Entwicklers ist Word schlie&szlig;lich nichts anderes als eine Erweiterung der Alma Mater Access.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-12T22:37:42+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg04.met.vgwort.de\/na\/58c838d3200d4ab08ffbe4fa23ec78f2\" \/>\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=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Rechnungen in Word schreiben\",\"datePublished\":\"2021-01-12T22:37:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/\"},\"wordCount\":3022,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/58c838d3200d4ab08ffbe4fa23ec78f2\",\"articleSection\":[\"2007\",\"4\\\/2007\",\"Interaktiv\",\"Word\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/\",\"name\":\"Rechnungen in Word schreiben - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/58c838d3200d4ab08ffbe4fa23ec78f2\",\"datePublished\":\"2021-01-12T22:37:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/58c838d3200d4ab08ffbe4fa23ec78f2\",\"contentUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/58c838d3200d4ab08ffbe4fa23ec78f2\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rechnungen_in_Word_schreiben\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rechnungen in Word schreiben\"}]},{\"@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":"Rechnungen in Word schreiben - 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\/Rechnungen_in_Word_schreiben\/","og_locale":"de_DE","og_type":"article","og_title":"Rechnungen in Word schreiben","og_description":"Die Grenzen des Berichtsgenerators, den Access von Hause aus mitbringt, sind bei gehobenen Anspr&uuml;chen rasch erreicht. Manch einer mag sich da schon die vielf&auml;ltigen Formatierungsm&ouml;glichkeiten von Word gew&uuml;nscht haben. Nun, warum nicht: Gestandene Word-Profis werden es weniger gern h&ouml;ren, aber aus Sicht des Datenbank-Entwicklers ist Word schlie&szlig;lich nichts anderes als eine Erweiterung der Alma Mater Access.","og_url":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-01-12T22:37:42+00:00","og_image":[{"url":"http:\/\/vg04.met.vgwort.de\/na\/58c838d3200d4ab08ffbe4fa23ec78f2","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Rechnungen in Word schreiben","datePublished":"2021-01-12T22:37:42+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/"},"wordCount":3022,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/#primaryimage"},"thumbnailUrl":"http:\/\/vg04.met.vgwort.de\/na\/58c838d3200d4ab08ffbe4fa23ec78f2","articleSection":["2007","4\/2007","Interaktiv","Word"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/","url":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/","name":"Rechnungen in Word schreiben - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/#primaryimage"},"thumbnailUrl":"http:\/\/vg04.met.vgwort.de\/na\/58c838d3200d4ab08ffbe4fa23ec78f2","datePublished":"2021-01-12T22:37:42+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/#primaryimage","url":"http:\/\/vg04.met.vgwort.de\/na\/58c838d3200d4ab08ffbe4fa23ec78f2","contentUrl":"http:\/\/vg04.met.vgwort.de\/na\/58c838d3200d4ab08ffbe4fa23ec78f2"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Rechnungen_in_Word_schreiben\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Rechnungen in Word schreiben"}]},{"@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\/55000484","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=55000484"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000484\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}