Texte mit Platzhaltern zu füllen und die Platzhalter dann durch in der Datenbank gespeicherte Daten zu ersetzen ist ein oft benötigter Anwendungsfall. Im Prinzip bildet Word das mit der Seriendokument-Funktion ab: Hier werden im Dokument Verknüpfungen zur Datenquelle hergestellt und dann gefüllt. Wir wollen es eine Nummer kleiner angehen und einfache Text mit entsprechenden formatierten Platzhaltern wie [Vorname] versehen und diese dann nach Bedarf mit den Daten aus der Datenbank füllen.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1701_PlatzhalterInTextenFuellen.accdb.
Textdatei mit Platzhaltern erstellen
Der erste Schritt besteht daraus, eine geeignete Textdatei zu erstellen, die wir mit Platzhaltern versehen. Hier kommt bereits die erste Hürde: Wie sollen die Platzhalter aussehen, damit wir diese später auch zuverlässig finden können Die erste Voraussetzung ist, dass die Namen der Platzhalter mit den Datenfeldern korrelieren. Wenn wir aus einer Tabelle Felder namens Vorname, Nachname und Strasse in die Textdateien füllen wollen, sollten die Platzhalter auch entsprechend benannt werden. Das hat allein praktische Gründe: Wir können so später einfach die Felder der Datenherkunft in einer Schleife durchlaufen und die Werte direkt in die Platzhalter einsetzen.
Die zweite Voraussetzung ist, dass die Platzhalter vom übrigen Text unterschieden werden können. Wenn Sie beispielsweise nur den Namen des betroffenen Feldes als Platzhalter verwenden, ist die Wahrscheinlichkeit gegeben, dass dieser Name auch im eigentlichen Text zum Einsatz kommt.
Also müssen wir die Platzhalter noch mit einer Start- und einer Endmarkierung versehen, die in dieser Art sonst nicht im Text vorkommt. Dazu eignen sich beispielsweise eckige Klammern. [Vorname] wäre also ein geeigneter Platzhalter. Auf Nummer Sicher gehen Sie, wenn Sie die Start- und die Endmarkierung noch ein wenig eindeutiger gestalten, beispielsweise mit @[Vorname@]. Auf diese Weise sollte nichts anbrennen.
Die Vorlage sieht dann beispielsweise wie in Bild 1 aus. Sie enthält einige Platzhalter, die mit @[ beginnen und mit ]@ enden. Nun benötigen wir eine Tabelle beziehungsweise Abfrage, welche die angegebenen Platzhalterbezeichnungen innerhalb der Begrenzungszeichen aufweist. Dazu legen wir eine Tabelle namens tblKunden an, deren Entwurf Sie in Bild 2 finden. Das Feld AnredeID ist ein Fremdschlüsselfeld, das noch mit der Tabelle tblAnreden verknüpft ist.
Bild 1: Entwurf der Tabelle tblKunden
Bild 2: Beispielvorlage als Textdatei
tblAnreden enthält die Felder ID (Primärschlüsselfeld) und Bezeichnung sowie zwei Felder mit speziellen Formen der Anrede: AnredeAdresse nimmt die Form der Anrede für den Adressblock auf (Herrn/Frau), AnredeBrief die Anrede für die erste Zeile des Brieftextes (Sehr geehrter Herr/Sehr geehrte Frau) – siehe Bild 3.
Bild 3: Die Tabelle tblAnreden mit einigen Werten
Abfrage als Quelle für die Platzhalter
Nun benötigen wir noch eine Abfrage, welche die Daten der beiden Tabellen so zusammenführt, dass wir diese in der anschließend zu erstellenden VBA-Prozedur zum Ersetzen der Platzhalter nutzen können. Diese Abfrage soll die beiden Tabellen tblKunden und tblAnreden als Datenherkunft nutzen und alle Felder dieser beiden Tabellen mit Ausnahme des Feldes AnredeID der Tabelle tblKunden und des Feldes ID der Tabelle tblAnreden enthalten. Der Entwurf dieser Abfrage, die wir unter dem Namen qryKundenMitAnrede speichern, sieht wie in Bild 4 aus.
Bild 4: Entwurf der Abfrage qryKundenMitAnrede
Das Ergebnis der Abfrage aus Bild 5 liefert alle Daten der Tabelle tblKunden plus die dazugehörigen Anreden aus der Tabelle tblAnreden.
Bild 5: Die Abfrage qryKundenMitAnrede in der Datenblattansicht
Formular zum Füllen der Platzhalter in der Textdatei
Die Funktionen zum Auswählen der Vorlage mit den Platzhaltern, zum Auswählen der Zieldatei und zum Festlegen des Kunden, für den die Vorlage gefüllt werden soll, wollen wir in eine Benutzeroberfläche integrieren – sprich: in ein Formular. Dieses sieht in der Entwurfsansicht wie in Bild 6 aus. Es enthält im oberen Bereich zwei Textfelder namens txtVorlage und txtZiel. In beiden soll der Benutzer die Namen der Dateien eintragen, die verwendet werden sollen. Beide Dateien sollen der Einfachheit halber im Verzeichnis der aktuellen Datenbankdatei liegen.
Bild 6: Das Formular frmPlatzhalterErsetzen in der Entwurfsansicht
Vorlagendatei öffnen
Die Schaltfläche rechts vom Textfeld für die Vorlagendatei soll die angegebene Datei zum Betrachten und Bearbeiten öffnen. Dazu löst diese die Prozedur cmdVorlageOeffnen aus (siehe Listing 1). Diese fügt den mit CurrentProject.Path ermittelten Datenbankpfad und die im Textfeld txtVorlage angegebene Datei in einer Variablen namens strVorlage zusammen und prüft mithilfe der Dir-Funktion, ob die Datei überhaupt vorhanden ist. Diese Funktion würde in diesem Fall den reinen Dateinamen zurückliefern. Hat Dir(strVorlage) also eine Länge größer 0, dann ist die Datei vorhanden.
Private Sub cmdVorlageOeffnen_Click() Dim strVorlage As String strVorlage = CurrentProject.Path & "\" & Me!txtVorlage If Len(Dir(strVorlage)) > 0 Then DateiOeffnen strVorlage Else MsgBox "Die Datei '" & Me!txtVorlage & "' ist nicht im aktuellen Ordner der Datenbank vorhanden." End If End Sub
Listing 1: Anzeige der Vorlagendatei im Text-Editor
In diesem Fall ruft die Prozedur eine weitere Routine namens DateiOeffnen auf, die im Modul mdlTools angelegt ist. Diese verwendet eine API-Funktion namens ShellExecute, um die mit dem Parameter strPfad übergebene Datei zu öffnen (siehe Listing 2).
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nshowcmd As Long) As Long Public Const SW_NORMAL = 1 Public Function DateiOeffnen(strPfad As String) As Boolean Call ShellExecute(0, "open", strPfad, "", "", SW_NORMAL) End Function
Listing 2: Diese Prozedur öffnet ein neues Formular oder zeigt dieses an, wenn es bereits geöffnet ist.
Auswahl des Kunden, mit dem die Platzhalter gefüllt werden sollen
Das Listenfeld lstKunden dient der Anzeige aller Kunden der Abfrage qryKundenMitAnrede und der Auswahl des Kunden, für den die Platzhalter in der Vorlage ersetzt werden sollen. Dazu stellen Sie die Eigenschaft Datensatzherkunft auf den Namen der Abfrage qryKundenMitAnrede ein. Damit das Primärschlüsselfeld der Abfrage nicht angezeigt wird, sondern nur die ersten beiden Felder Vorname und Nachname, stellen Sie die Eigenschaft Spaltenanzahl auf den Wert 3 und die Eigenschaft Spaltenbreiten auf den Wert 0cm;4cm;4cm ein.
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: