Rechnungen mit Word und Access

Office bietet verschiedene Möglichkeiten, um Rechnungen zu erstellen. Du kannst ein Worksheet in Excel dazu nutzen, eine Rechnung zu erstellen, die Berichte unter Access eignen sich recht gut dafür, aber auch Word lässt sich prima zum Erstellen von Rechnungen nutzen. Alle haben Vor- und Nachteile: Unter Excel gerät das Berechnen von Beträgen zum Kinderspiel, während mehrseitige Rechnungen eher schwierig zu realisieren sind, unter Access können Berichte recht flexibel realisiert werden, während man sich gerade für mehrseitige Berichte etwas einarbeiten muss – und unter Word kann man das Layout sehr einfach anpassen, während hier die Berechnung nicht so intuitiv erfolgt. Wir schauen uns eine Kombination aus Access und Word an: Die Daten stammen aus Access-Tabellen, während wir die Rechnung selbst in Word erstellen. So lassen sich auch nach dem Erstellen noch Feinheiten anpassen.

Rechnungsdaten von Access nach Word

Es gibt verschiedene Wege, wie wir Rechnungsdaten von Access aus in ein Word-Dokument bewegen können. Das eine Extrem wäre, das Word-Dokument aus der Access-Datenbank heraus von Grund auf neu zu erstellen und mit den gewünschten Inhalten zu füllen. Das andere Extrem lautet, das Word-Dokument so weit wie möglich vorzubereiten und mit Textmarken auszustatten, sodass wir nur noch die eigentlichen Texte aus der Datenbank heraus zum Word-Dokument schicken müssen.

Der erste Weg wäre sicherlich eine schöne Herausforderung für einen Software-Entwickler. Allerdings wollen wir Lösungen entwickeln, mit denen der Benutzer der Anwendung optimal arbeiten kann. Und wenn wir das Word-Dokument mit einer Rechnung komplett per Code generieren, gäbe es für den Benutzer nur noch nachträglich die Möglichkeit, das Dokument überhaupt anzupassen. Wenn er jedoch Änderungen vornehmen möchte, die sich in jedem Dokument niederschlagen, dann müsste er diese für jedes Dokument nach dessen Erstellung erneut durchführen.

Aus Benutzersicht wäre also der zweite Weg hilfreicher, denn je mehr Inhalte bereits in der zu verwendenden Word-Vorlage enthalten sind, desto mehr Elemente kann der Benutzer selbst direkt an der Vorlage anpassen – und wenn die Änderungen einmal durchgeführt sind, wirken sich diese auf alle Dokumente aus, die wir von Access aus erstellen. Auf diese Weise können wir dem Benutzer sogar ermöglichen, mehr als eine Vorlage zu erstellen und in der Access-Anwendung auszuwählen, welche Vorlage für welche Rechnung verwendet werden soll.

Aber welche Elemente können wir überhaupt bereits in der Dokumentvorlage für die Rechnung unterbringen? Wir gehen davon aus, dass die Rechnungen nur im Namen einer einzigen Person oder eines einzigen Unternehmens gestellt werden.

Dann können wir zumindest den Briefkopf und die Absenderadresse in dem Bereich, der später im Fenster des Briefumschlags sichtbar sein soll, anpassen.

Außerdem kann der Benutzer die Anordnung der übrigen Elemente wie Betreff, Rechnungstext, Block mit den Rechnungspositionen und die Zahlungsbedingungen nach den eigenen Anforderungen festlegen – und damit auch die Formatierungen wir Schriftart, Schriftgröße et cetera definieren.

Wir wählen also in diesem Artikel den zweiten Weg – wir wollen eine Dokumentvorlage mit möglichst vielen voreingestellten Elementen erzeugen und diese dann mit den Daten aus der Datenbank füllen.

Daten in ein Word-Dokument schreiben

Wie aber soll das Übertragen der Daten aus den Tabellen der Access-Datenbank in das Word-Dokument genau erfolgen? Woher wissen wir, an welchen Positionen die jeweiligen Daten eingefügt werden sollen? Und wie gehen wir überhaupt mit der Tatsache um, dass jede Rechnung unterschiedlich viele Rechnungspositionen enthalten kann – und wir die Vorlage dementsprechend gar nicht für jeden Fall vorbereiten können?

Um die Positionen zu markieren, an denen wir die Daten aus der Datenbank einfügen wollen, gibt es spezielle Elemente: die Textmarken. Warum reden wir in der Mehrzahl? Weil es zwei Typen von Textmarken gibt – offene und geschlossene Textmarken. Den Unterschied erläutern wir weiter unten. Allgemein betrachtet sind Textmarken Elemente, die eine Bezeichnung erhalten, anhand derer wir diese ansprechen und Texte oder andere Elemente an ihrer Position einfügen können.

Verwendung einer Vorlage

Wir wollen die Daten allerdings nicht einfach in ein vorhandenes Dokument schreiben, sondern wir legen eine Dokumentvorlage an, auf deren Basis wir für jede Rechnung ein neues Dokument erzeugen. Diese Dokumentvorlage speichern wir zunächst unter der Dateiendung .dotx (t für Template). Der komplette Name der zu erstellenden Datei lautet Rechnungsvorlage.dotx. Wir speichern die Daten im gleichen Verzeichnis wie die Access-Datenbank, die wir gleich im Anschluss erstellen. Wichtig: Wir können nicht einfach ein Word-Dokument über den Explorer erstellen und dieses mit der Dateiendung .dotx versehen – das Word-Dokument muss von Word aus mit dem Typ Word-Vorlage (*.dotx) gespeichert werden.

Erstellen der Access-Datenbank

Irgendwo müssen wir die Daten für die Rechnungen speichern, und dafür eignet sich eine Access-Datenbank am besten. Wir könnten zwar auch ein Excel-Workbook verwenden, in dem wir die verschiedenen Daten wie Anreden, Kunden, Rechnungen und Rechnungspositionen in verschiedenen Tabellen speichern, aber das ist eher nicht der eigentliche Anwendungszweck von Excel, sondern von Access.

In einer neuen Access-Datenbank namens RechnungenMitWordUndAccess.accdb legen wir vier Tabellen an, die später einmal das Datenmodell aus Bild 1 ergeben.

Datenmodell der Access-Datenbank

Bild 1: Datenmodell der Access-Datenbank

Wir haben die Tabellen dieser Datenbank einmal mit den notwendigsten Daten gefüllt – also mit ein paar Anreden, einem Kundendatensatz, einem Rechnungsdatensatz und zwei Rechnungspositionen (siehe Bild 2). Die Tabellen sind dabei so verknüpft und mit Nachschlagefeldern ausgestattet, dass wir für das Feld AnredeID der Tabelle tblKunden eine der Anreden aus der Tabelle tblAnreden auswählen können.

Beispieldaten für die Erstellung einer Rechnung

Bild 2: Beispieldaten für die Erstellung einer Rechnung

Für das Feld KundeID der Tabelle tblRechnungen wählen wir einen der Kunden aus der Tabelle tblKunden aus. Und schließlich legen wir für die beiden Rechnungsdatensätze aus der Tabelle tblRechnungspositionen über das Feld RechnungID die Rechnung fest, zu der die Rechnungspositionen gehören sollen.

Durch diesen Aufbau der Tabellen können wir beliebig viele Kunden, Rechnungsdatensätze und Rechnungspositionen anlegen.

Eingabe der Rechnungsdaten

Wir wollen uns an dieser Stelle nicht lange mit der Beschreibung der Benutzeroberfläche der Access-Datenbank aufhalten, daher hier nur die notwendigsten Elemente und Techniken.

Zur Verwaltung der Kunden haben wir an dieser Stelle kein eigenes Formular vorgesehen – diese kann man hilfsweise über die Tabelle eingeben (eine professionelle Anwendung sollte natürlich ein Formular zur Verwaltung der Kunden enthalten). Die Rechnungen zeigen wir in einem Formular mit Unterformular an. Das Hauptformular frmRechnungen ist über die Eigenschaft Datensatzquelle an die Tabelle tblRechnungen gebunden. Das Unterformular sfmRechnungen zeigt die Daten der Tabelle tblRechnungspositionen an.

Damit das Unterformular nur die Rechnungspositionen anzeigt, die mit der aktuell im Hauptformular angezeigten Rechnung verknüpft sind, sind die beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformular-Steuerelements beide auf den Wert RechnungID eingestellt. Dies erledigt Access in der Regel automatisch, wenn man das Unterformular aus dem Navigationsbereich von Access per Drag and Drop in den Formularentwurf des Hauptformulars zieht – das Vorhandensein einer entsprechenden Beziehung zwischen den Tabellen aus Haupt- und Unterformular vorausgesetzt.

Im Hauptformular platzieren wir alle Steuerelemente der Tabelle tblRechnungen – mit Ausnahme des Feldes RechnungID. Da wir das Feld KundeID bereits in der zugrunde liegenden Tabelle tblRechnungen als Nachschlagefeld definiert haben, wird dieses beim Ziehen des Feldes aus der Feldliste in den Formularentwurf direkt als Kombinationsfeld angelegt.

Im Unterformular platzieren wir die Felder Position, Bezeichnung, Menge, Einheit, EinzelpreisNetto und Umsatzsteuersatz. Damit diese Daten in der Datenblattansicht angezeigt werden, stellen wir die Eigenschaft Standardansicht auf Datenblatt ein (siehe Bild 3). Im unteren Bereich des Formulars fügen wir noch zwei Steuerelemente ein:

Entwurf des Formulars für die Eingabe der Rechnungsdaten

Bild 3: Entwurf des Formulars für die Eingabe der Rechnungsdaten

  • die Schaltfläche cmdRechnungNachWord und
  • das Kombinationsfeld cboRechnungsvorlage.

Rechnungsvorlage auswählen

Mit dem Kombinationsfeld wollen wir dem Benutzer die Möglichkeit geben, die zu verwendende Vorlage auszuwählen. Dazu wollen wir alle Dateien mit der Dateiendung .dotx aus dem Verzeichnis der Beispieldatenbank im Kombinationsfeld anzeigen. Das erledigen wir mit der ersten VBA-Prozedur dieses Artikels, die beim Laden des Formulars ausgelöst werden soll. Diese Prozedur sieht wie in Listing 1 aus.

Sub Form_Load()
     Dim strVorlagen As String
     Dim strVorlage As String
     strVorlage = Dir(CurrentProject.Path & "\*.dotx")
     Do While Not Len(strVorlage) = 0
         strVorlagen = strVorlagen & ";""" & strVorlage & """"
         strVorlage = Dir
     Loop
     If Not Len(strVorlagen) = 0 Then
         strVorlagen = Mid(strVorlagen, 2)
     End If
     Me!cboRechnungsvorlagen.RowSource = strVorlagen
     Me!cboRechnungsvorlagen = Me!cboRechnungsvorlagen.ItemData(0)
End Sub

Listing 1: Prozedur zum Füllen der Auswahlliste der Rechnungsvorlagen

Hier lesen wir, falls vorhanden, die erste Datei mit der Dateiendung .dotx aus dem Verzeichnis der Datenbank in die Variable strVorlage ein.

Wenn wir eine solche Datei finden, ist strVorlage anschließend nicht leer und wir steigen in die Do While-Schleife ein. Hier schreiben wir als Erstes den Namen der gefundenen Datei in die Variable strVorlagen – mit führendem Semikolon und in Anführungszeichen eingeschlossen. Danach sucht die Prozedur nach einem weiteren Vorkommen einer solchen Datei und wiederholt den Vorgang so lange, bis keine weitere Vorlagendatei mehr gefunden wird. Dann verlässt die Prozedur die Schleife und entfernt das erste Semikolon aus strVorlagen.

Den resultierenden Ausdruck schreibt die Prozedur anschließend in die Eigenschaft RowSource des Kombinationsfeldes cboRechnungsvorlagen.

Die letzte Anweisung stellt noch den ersten gefundenen Eintrag als aktuellen Eintrag des Kombinationsfeldes ein.

Damit das Kombinationsfeld die Daten aus dieser Semikola-separierten Liste überhaupt anzeigt, legen wir für das Kombinationsfeld noch den Wert der Eigenschaft Herkunftsart auf Wertliste fest.

Das Formular sieht, wenn bereits mindestens ein Datensatz in jeder Tabelle enthalten ist, anschließend wie in Bild 4 aus.

Das Formular zum Zusammenstellen der Rechnungsdaten im Einsatz

Bild 4: Das Formular zum Zusammenstellen der Rechnungsdaten im Einsatz

Nun könnten wir bereits die Schaltfläche cmdRechnungNachWord mit der gewünschten Funktion versehen – wenn nicht noch die zu füllende Dokumentvorlage fehlen würde. Diese erstellen wir im nächsten Schritt.

Dokumentvorlage erstellen

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Visual Basic Entwickler:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar