Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2010.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erstellen Sie eine Datei, mit der Sie Lastschriften bequem per Datenträger zu Ihrem Kreditinstitut schicken können.

Techniken

Tabellen, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

Datentraegeraustausch.mdb

Shortlink

www.access-im-unternehmen.de/714

Ferngesteuerter Seriendruck mit Access und Word

André Minhorst, Duisburg

Eines der meistgefragten Themen im Office-Bereich ist immer wieder: Wie schaufle ich am einfachsten die Daten einer Access-Tabelle nach Word und fülle damit einen Serienbrief? Sie können dazu natürlich einfach eine Abfrage mit den relevanten Daten vorbereiten und den Rest von Word aus mit den entsprechenden Werkzeugen der Benutzeroberfläche erledigen. Wenn Sie dem Nutzer aber wirklich Arbeit ersparen möchten, zwingen Sie ihn nicht, seine geliebte Access-Anwendung zu verlassen ...

In der Regel verläuft das Erstellen eines Dokuments für den Seriendruck so:

  • Der Benutzer erstellt eine Abfrage, die alle für den Seriendruck zu verwendenden Daten enthält. Dies ist der Teil, den er von Access aus erledigen kann, das Filtern ist auch später in Word noch möglich.
  • Danach startet er Word, erzeugt ein Seriendruckdokument und wählt die Datenherkunft für die Adressaten und weitere Informationen aus - in diesem Fall aus der bereits vorbereiteten Access-Abfrage.
  • Dann fügt der Benutzer die Seriendruckfelder in das Dokument ein, die auf den in der Datenherkunft definierten Feldern basieren.
  • Nachdem er gegebenenfalls noch die Empfängerliste bearbeitet hat, sorgt ein Klick auf die Schaltfläche Fertig stellen und zusammenführen für das Erstellen des fertigen Seriendruckdokuments.

Details wollen wir uns an dieser Stelle ersparen, Anleitungen für den üblichen Weg gibt es wie Sand am Meer.

Optimaler Seriendruck mit Access und Word

Wir haben uns gefragt, wie man dem Benutzer die Seriendruckerstellung eines Serienbriefs so einfach wie möglich machen kann. Tatsache ist, dass er um die folgenden drei Aufgaben nicht herumkommt:

  • Festlegen der einzufügenden Daten, sprich: Welche Datenfelder und welche Datensätze sollen den Serienbrief füllen?
  • Erstellen eines Word-Dokuments, das irgendwie geartete Platzhalter für die einzufügenden Daten enthält.
  • Zuweisen der Inhalte der Datenherkunft zu den Platzhaltern im Dokument.

Der Seriendruck-Assistent

Der Seriendruck-Assistent dieses Beitrags kann auf zweierlei Arten eingesetzt werden: Erstens können Sie ihn natürlich in eigene Anwendungen einbauen, wenn diese eine Funktion zum Erstellen von Serienbriefen mitliefern soll. Zweitens können Sie ihn als Access-Add-In in Access integrieren, sodass dieser in jeder beliebigen Anwendung zur Verfügung steht. Sie können dann also beispielsweise Ihre Adressverwaltung öffnen, die bis dato gar keine Seriendruckfunktion enthielt, und auf Basis beliebiger Tabellen oder Abfragen Serienbriefdokumente füllen.

Add-In installieren

Schauen wir uns zunächst an, wie der Serienbrief-Assistent als Add-In funktioniert. Sie müssen dazu zunächst die Datei aiuSeriendruck.mda aus dem Download zu diesem Beitrag in ein beliebiges Verzeichnis kopieren. Dann starten Sie Access und öffnen eine Datenbank Ihrer Wahl. Unter Access 2007 finden Sie im Ribbon unter Datenbanktools|Datenbanktools|Add-Ins|Add-In-Manager das Werkzeug, um Add-Ins zu installieren. Im Dialog Add-In-Manager klicken Sie auf die Schaltfläche Hinzufügen... (s. Abb. 1) und wählen im folgenden Datei öffnen-Dialog die Datei aiuSeriendruck.mda aus.

pic005.png

Abb. 4: Diese Abfrage ist eine prima Datenquelle für einen Serienbrief.

Anschließend finden Sie unter Access 2007 in der Ribbon-Liste Add-Ins einen neuen Eintrag namens aiuSeriendruck (s. Abb. 2).

pic002.png

Abb. 1: Hinzufügen eines Access-Add-Ins

Unter Access 2003 und älter finden Sie die Möglichkeit zum Installieren und Aufrufen des Assistenten übrigens unter dem Menüeintrag Extras|Add-Ins.

Vorbereitung

Bevor Sie den Seriendruck-Assistenten aufrufen, müssen Sie nur eine Voraussetzung schaffen: Sie benötigen eine Tabelle oder Abfrage, die alle zum Füllen des Seriendruck-Dokuments nötigen Daten enthält. Insbesondere gilt das für Tabellen, die Daten aus verknüpften Tabellen enthalten. Dies betrifft etwa den klassischen Fall der Anrede: Diese wird oft in einer Lookup-Tabelle namens tblAnreden gespeichert, in der eigentlichen Adresstabelle befindet sich dann ein Nachschlagefeld zur Auswahl der richtigen Anrede (s. Abb. 3). Die Tabelle tblAdressen allein ist hier nicht als Datenquelle für den Seriendruck zu gebrauchen, da das Feld AnredeID nur eine Zahl, aber keinen Ausdruck wie Herrn oder Frau enthält. Dem Seriendruck-Assistenten ist aber schon Genüge getan, wenn Sie die Daten der beiden Tabellen in einer einfachen Abfrage wie in Abb. 4 zusammenfassen.

pic003.png

Abb. 2: Aufrufen des Seriendruck-Assistenten

pic004.png

Abb. 3: Typischer Fall einer Adressen- und einer Anreden-Tabelle

Seriendruck durchführen

Nun kann es endlich losgehen: Starten Sie aiuSeriendruck und schauen Sie sich das einzige Formular des Assistenten an, das wie in Abb. 5 aussieht.

pic006.png

Abb. 6: Auswahl der Datenquelle für den Serienbrief

Im ersten Schritt des Assistenten wählen Sie die Datenquelle für den Seriendruck aus. Der Assistent bietet alle Tabellen und Abfragen in einer Auswahlliste an - lediglich eventuell zur Ansicht freigegebene Systemtabellen, die mit MSys... beginnen, werden ausgeblendet (s. Abb. 6).

pic001.png

Abb. 5: Der Serienbrief-Assistent

Nach der Auswahl der Datenquelle geschieht etwas im Hintergrund: aiuSeriendruck speichert die Daten der Datenquelle in einer temporären Tabelle, ergänzt diese um ein Feld zur manuellen Auswahl der Datensätze und zeigt diese im Bereich Schritt 2 des Assistenten an (s. Abb. 7).

pic007.png

Abb. 7: Auswahl der Datensätze, mit denen der Serienbrief gefüllt werden soll

Hier liefert aiuSeriendruck deutlich mehr Möglichkeiten als die Seriendruck-Funktion von Word. Sie können Folgendes erledigen:

  • Einzelne Einträge per Klick auf das jeweilige Kontrollkästchen aus- oder abwählen,
  • die angezeigten Einträge filtern, indem Sie die bekannten Filtermöglichkeiten der Datenblattansicht verwenden,
  • die jeweils angezeigten (und gegebenenfalls gefilterten) Datensätze mit einem Klick auf die Schaltfläche Auswahl markieren als ausgewählt markieren,
  • die jeweils angezeigten (und gegebenenfalls gefilterten) Datensätze mit einem Klick auf die Schaltfläche Ausgewählte abwählen als nicht ausgewählt markieren,
  • mit den Schaltflächen Alle auswählen oder Alle abwählen alle Datensätze als ausgewählt beziehungsweise nicht ausgewählt markieren.

Außerdem können Sie mit der Optionsgruppe Anzeigen festlegen, ob das Datenblatt alle Datensätze anzeigen soll oder nur die markierten oder nur die nicht markierten.

Word-Dokument vorbereiten

Nachdem der Benutzer die Daten für den Serienbrief mit den vorhandenen Hilfsmitteln vorbereitet hat, kann er sich dem Ausgangsdokument zuwenden. Hier gibt es zunächst drei Möglichkeiten, ein Dokument auszuwählen (s. Abb. 8). Diese drei sind über die folgenden Schaltflächen zu erreichen:

pic010.png

Abb. 8: Auswahl einer Option zum Erstellen oder Öffnen eines Dokuments als Seriendruck-Vorlage

  • Ein bestehendes Dokument auswählen: Öffnet einen Datei öffnen-Dialog und erlaubt die Auswahl einer beliebigen Word-Datei.
  • Leeres Dokument erstellen: Diese Schaltfläche öffnet Word und erstellt ein neues, leeres Dokument auf Basis der Vorlage Normal.dot beziehungsweise Normal.dotx. Sie können gleich an Ort und Stelle beginnen, die gewünschten Platzhalter für den Seriendruck einzufügen. Wie das geht, besprechen wir weiter unten.
  • Dokument auf Basis einer Vorlage erstellen: Natürlich können Sie auch eine Dokumentvorlage als Ausgangspunkt für den Seriendruck verwenden. Auch dieses wählen Sie zunächst mit einem entsprechenden Dialog aus, und auch hier fügen Sie gleich die Platzhalter für den Seriendruck ein (Sie können dies aber auch später noch erledigen).

Nachdem Sie auf eine der drei Arten das gewünschte Dokument ausgewählt haben, sehen Sie dieses entweder schon vor sich (bei Betätigung der zweiten oder dritten Schaltfläche) oder Sie können das Dokument, dessen Dateiname nun im Textfeld Ausgangsdokument angezeigt wird, mit einem Klick auf die Schaltfläche Bearbeiten in Word öffnen.

Platzhalter einfügen

Für das nun geöffnete Word-Dokument gibt es eine ganz wichtige Regel: Sie müssen es mit dem Kontextmenüeintrag Alle Platzhalter gesetzt wieder schließen.

Davon abgesehen brauchen Sie eigentlich nur die Einfügemarke an der Stelle zu positionieren, an der Sie einen Platzhalter einfügen möchten, mit der rechten Maustaste das Kontextmenü aufzurufen und den einzufügenden Platzhalter auszuwählen (s. Abb. 9).

pic009.png

Abb. 9: Einfügen von Platzhaltern per Kontextmenü

Dort finden Sie nach getaner Arbeit auch den Eintrag Alle Platzhalter gesetzt, mit dem die Arbeiten am Dokument beendet werden müssen.

Seriendruck starten

Nach getaner Arbeit brauchen Sie, wenn Sie möchten, nur noch ein Zieldokument für den Seriendruck auszuwählen. Dies erledigen Sie mit der Schaltfläche mit den drei Punkten (...). Der Name der per Datei speichern-Dialog ermittelten Datei wird anschließend in das Textfeld Zieldatei eingetragen. Mit einem Klick auf die Schaltfläche Seriendruck starten stoßen Sie den Seriendruck schließlich an. Sollten Sie nicht vorab einen Speichernamen für die zu erstellende Datei angegeben haben, bleibt das erstellte Dokument einfach geöffnet, sodass Sie selbst das Speichern übernehmen können (s. Abb. 10).

pic011.png

Abb. 10: Anstoßen des Seriendrucks

Als Ergebnis erhalten Sie je nach der Anzahl der ausgewählten Datensätze ein Dokument mit der entsprechenden Anzahl Seiten - fertig!

Technische Hintergründe

Die Beispielanwendung enthält einige interessante Techniken, die wir uns auf den folgenden Seiten ansehen werden. Beginnen wir mit dem Datenmodell der Datenbank: Das geht schnell, denn die Anwendung kommt als Add-In fast ohne Tabellen aus. Die einzige, die wir benötigen, wird temporär angelegt und mit der Auswahl einer neuen Datenquelle wieder gelöscht.

Nur für die Installation des Add-Ins ist die Tabelle USysRegInfo interessant, die wie in Abb. 11 aussieht und beim Installieren des Add-Ins entsprechend der obigen Beschreibung ausgelesen wird. Die erste Zeile gibt an, welche VBA-Funktion beim Anklicken des Menüeintrags unter Add-Ins aufgerufen wird, die zweite Zeile den Namen der Add-In-Datei und die dritte den Text, der im Add-In-Manager angezeigt wird.

pic012.png

Abb. 11: Diese Informationen werden zur Installation des Add-Ins benötigt.

Die Funktion Autostart() öffnet schlicht und einfach das Hauptformular des Add-Ins:

Public Function Autostart()

    DoCmd.OpenForm "frmSerienbrief", _

    WindowMode:=acDialog

End Function

Quelltabelle auswählen

Beim Öffnen des Formulars frmSerienbrief löst das Ereignis Beim Öffnen die folgende Ereignisprozedur aus. Diese weist der Datensatzherkunft des Kombinationsfeldes cboSourceObject eine Abfrage zu, die alle als Datenquelle für den Seriendruck infrage kommenden Tabellen und Abfragen aus der Systemtabelle MSysObjects ausliest. Die zweite Anweisung dieser Prozedur ruft die Routine SteuerelementAktualisieren auf, die den Inhalt einiger Steuerelemente prüft und in Abhängigkeit davon andere Steuerelemente aktiviert oder deaktiviert (s. Listing 1).

Listing 1: Füllen der Datenquellen-Liste beim Öffnen des Formulars

Private Sub Form_Open(Cancel As Integer)

    Me!cboSourceObject.RowSource = "SELECT Name FROM MSysObjects IN '" & dbs.Name _

    & "' WHERE (Type=1 Or Type=5) AND Name NOT LIKE 'MSys*' AND Name NOT LIKE '~*' "

    SteuerelementeAktualisieren

    End Sub

Daten der Quelltabelle anzeigen

Wenn der Benutzer die Quelle für den Seriendruck ausgewählt hat, beginnt die Anwendung mit einer Menge Arbeit. Den Startschuss markiert das Auslösen der Ereignisprozedur cblSourceObject_AfterUpdate. Diese leert als Erstes das Unterformularsteuerelement sfmAdressen, das später die Daten anzeigen soll (nur für den Fall, dass zuvor schon eine andere Quelle ausgewählt wurde).

Nach einer Prüfung, ob tatsächlich ein Eintrag ausgewählt wurde, ruft die Prozedur eine weitere Prozedur namens TempTabelleErstellen auf und übergibt als einzigen Parameter den Namen der Quelltabelle oder -abfrage. Nachdem diese ihren Dienst verrichtet hat (mehr dazu weiter unten), liegt eine temporäre Tabelle namens tblSerienbrief_Temp vor.

Unterformularen kann man auch eine Tabelle oder Abfrage als Herkunftsobjekt zuweisen, man muss dann allerdings je nach Typ den Ausdruck Table.<Tabellenname> beziehungsweise Query.<Tabellenname> voranstellen. In unserem Fall ist dies einfach: Wir wissen, dass wir mit einer Tabelle namens tblSerienbrief_Temp arbeiten, also lautet das neue Herkunftsobjekt Table.tblSerienbrief_Temp.

Anschließend geschehen noch zwei wichtige Schritte: Die per Code in der Prozedur TempTabelleErstellen erzeugte Tabelle besitzt unter anderem ein Ja/Nein-Feld, mit dem der Benutzer individuell auswählen soll, welche Datensätze beim Seriendruck berücksichtigt werden sollen. Dieses ist das letzte Feld der dynamisch erzeugten temporären Tabelle, soll aber als erste Spalte angezeigt werden, damit der Benutzer nicht unnötig scrollen muss. Dazu stellen wir die Eigenschaft ColumnIndex dieses Feldes auf den Wert 0 ein - alle anderen Felder rutschen so einen Platz weiter nach rechts. Außerdem zeigt Access die Daten in Datenblättern standardmäßig in Schriftgröße 11 an. Damit das Datenblatt zu den übrigen Steuerelementen passt, stellen wir diese mit der Eigenschaft DatasheetFontHeight auf Schriftgröße 9 ein (da wir mit einer Tabelle als Herkunftsobjekt des Unterformulars arbeiten, lässt sich dies nicht anderweitig festlegen). Schließlich ruft auch diese Prozedur die Routine SteuerelementeAktualisieren auf.

Temporäre Tabelle erstellen

Das Erstellen der temporären Tabelle erfolgt in der Prozedur TempTabelleErstellen, welche den Namen der ausgewählten Tabelle oder Abfrage als Parameter erwartet. Im ersten Schritt löscht diese Prozedur eine eventuell noch vorhandene Tabelle namens tblSerienbrief_Temp, da diese gleich neu erstellt wird. Dies erledigt eine einfache SELECT INTO-Abfrage, die eine neue Tabelle auf Basis der angegebenen Tabelle oder Abfrage erstellt. Wichtig ist hier, da wir das erste Mal in dieser Anwendung DAO-Elemente einsetzen, dass wir sowohl auf die Tabellen beziehungsweise Abfragen der Datenbank zugreifen, die das Add-In aufgerufen hat, als auch auf die in der Add-In-Datenbank erstellte Tabelle tblSerienbrief_Temp zugreifen müssen. Dazu haben wir zwei kleine Funktionen namens dbc und dbs im Modul mdlDatabase untergebracht, welche über die Eigenschaften CodeDB und CurrentDB den Verweis auf die jeweils benötigte Datenbank liefern und diesen für weitere Zugriffe zwischenspeichern:

Dim m_dbc As DAO.Database

Dim m_dbs As DAO.Database

Public Function dbc() As Database

    If m_dbc Is Nothing Then

        Set m_dbc = CodeDb

    End If

    Set dbc = m_dbc

End Function

Public Function dbs() As Database

    If m_dbs Is Nothing Then

        Set m_dbs = CurrentDb

    End If

    Set dbs = m_dbs

End Function

Diese beiden Funktionen kommen gleich in der Prozedur TempTabelleErstellen zum Einsatz. Die Tabelle wird zunächst über die Execute-Methode des von der Funktion dbc zurückgelieferten Verweises auf das Database-Objekt des Add-Ins gelöscht. Die erneute Erstellung dieser Tabelle über die SELECT INSERT-Abfrage verwendet gleich beide Database-Objekte: Das erste führt die Abfrage aus, das andere liefert den Namen der Datenbank, aus der die Daten stammen.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Excel-Import-Assistent im Eigenbau

Word, Excel und Co. im Griff

Access-Add-Ins

Der DBMS-Connection-Wizard

Serienbriefe mit Word und Access

Registry-Zugriff per Word-Bibliothek

Automatisierter Seriendruck mit ausgewählten Datensätzen

Adressverwaltung plus Serienbrief

Access 2007: Bilder und Schaltflächen

Suchformularassistent

© 2003-2015 André Minhorst Alle Rechte vorbehalten.