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 4/2004.

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

Adressverwaltung plus Serienbrief

André Minhorst, Duisburg

Die Adressverwaltung von Access im Unternehmen erhält eine weitere neue Funktion: Nach dem Drucken von Etiketten ist nun die Erstellung von Serienbriefen die nächste Erweiterung der Musterlösung, die auf die gespeicherten Adressdaten zugreift. Die nachfolgenden Seiten enthalten eine Beschreibung, wie man die im Beitrag Serienbriefe mit Word und Access vorgestellten Methoden in die Adressverwaltung integriert.

Versionen der Adressverwaltung

Die auf der Heft-CD befindlichen und im Internet unter der Adresse www.access-im-unternehmen.de herunterzuladenden Datenbankdateien AdressSB97.mdb (für Access 97) und AdressSB00.mdb (für Access 2000 und höher) enthalten die komplette Adressverwaltung inklusive der Funktionen zum Erstellen von Serienbriefen auf Basis der gespeicherten Adressdaten.

Neueinsteiger bezüglich dieser Adressverwaltung können direkt die aktuelle Version verwenden und mit den im Kapitel 2 vorgestellten Funktionen beginnen. Wer genauere Informationen zur Herstellung und zu den verschiedenen Techniken des zur Auswahl der Serienbriefadressaten dienenden Formulars sucht, wird in Kapitel 3 und 4 fündig werden.

Abb. 1: Aufruf des Formulars frmSerienbriefe

Wer schon vorher mit der Adressverwaltung gearbeitet hat, möchte möglicherweise die vorhandenen Adressen weiterbenutzen - in dem Fall kann man einfach die relevanten Tabellen löschen und aus der alten Datenbank importieren.

Serienbriefe mit der
Adressverwaltung

Nach der Erstellung einer Adressverwaltung mit den grundlegenden Funktionen und Schnittstellen für den Austausch von Adressdaten mit Outlook in Ausgabe 4/2003 und 6/2003 und der Erweiterung um die Fähigkeit, individuelle Adressetiketten zu drucken in Ausgabe 3/2004, stellt der vorliegende Artikel die Möglichkeit vor, die gespeicherten Adressen als Grundlage für die Erstellung von Serienbriefen zu verwenden. Dabei beschreibt dieser Beitrag nicht die eigentliche Erstellung der Serienbriefe, sondern speziell die Auswahl der gewünschten Adressaten.

Die Grundlagen für die Verwendung von Serienbriefen und für den Aufbau der notwendigen Routinen für die Fernsteuerung von Word durch eine Access-Anwendung vermittelt der Beitrag Serienbriefe mit Word und Access, der ebenfalls in der vorliegenden Ausgabe von Access im Unternehmen enthalten ist.

Abb. 2: Dialog zum Erstellen von Serienbriefen

Vorgehensweise zur Erstellung von Serienbriefen mit der
Adressverwaltung

Für die Erstellung von Serienbriefen bringt die aktuelle Version der Adressverwaltung einen neuen Menüeintrag mit, über den man das Formular zur Durchführung der weiteren Schritte öffnen kann (s. Abb. 1).

Anschließend erscheint direkt das Formular aus Abb. 2. Es beinhaltet als Hauptsteuerelement ein Unterformular, das alle vorhandenen Personen, Unternehmen sowie Kombinationen aus Unternehmen und Personen als Ansprechpartner anzeigt. Dabei kann man die unterschiedlichen Kategorien nur dadurch unterscheiden, dass eine Person keinen Eintrag in der Spalte Unternehmen aufweist, dass ein Unternehmen ohne Ansprechpartner keinen Ansprechpartner aufweist und dass für Unternehmen mit Ansprechpartner beide Versionen vorhanden sind.

Die Unterschiede treten deutlicher zu Tage, wenn man mit den entsprechenden Kontrollkästchen die einzelnen Kontaktarten herausfiltert. Die jeweiligen Einträge haben in der letzten Zeile je ein Feld, in dem man durch Setzen eines Häkchens festlegen kann, ob der aktuelle Eintrag als Adressat für den zu erstellenden Serienbrief in Frage kommt. Mit den Optionen unter der Überschrift Ein-/
Ausblenden von Kontaktarten kann man jeweils alle, nur die aktivierten oder nur die nicht aktivierten Einträge anzeigen lassen.

Die beiden Schaltflächen Alle markieren und Keinen markieren dienen jeweils den der Aufschrift zu entnehmenden Aktionen.

Nach erfolgter Auswahl der zu verwendenden Adressaten legt man über die beiden Textfelder im unteren Bereich zwei Pfade fest. Der erste gibt an, aus welchem Verzeichnis man die Vorlage auswählt und im zweiten wird das Ergebnis gespeichert - sprich die Steuerungsdatei für den Serienbrief sowie der resultierende Serienbrief.

Nach einem Klick auf die Schaltfläche Serienbrief erstellen geht es dann rund: Access fragt zunächst, ob man eine vorhandene Vorlage verwenden oder eine neue Vorlage erstellen möchte (s. Abb. 3).

Abb. 3: Neue oder vorhandene Vorlage?

Nach der Auswahl einer neuen Vorlage mit Hilfe eines Datei öffnen-Dialoges öffnet die Adressverwaltung eine Instanz von Microsoft Word mit der gewünschten Serienbriefvorlage (s. Abb. 4). Genau genommen passiert im Hintergrund eine Menge mehr. Access erledigt nämlich alle Schritte, die bis zum eigentlichen Ausgeben der einzelnen Briefe an den Drucker oder in ein neues Dokument erforderlich sind. Der Benutzer muss an dieser Stelle nur noch auf die Schaltfläche Seriendruck in neues Dokument oder auf eine der anderen möglichen Schaltflächen klicken, dann erstellt Word die gewünschten Dokumente.

Abb. 4: Erstellen des Serienbriefes

Das Formular zum Auswählen der Empfänger

Das Formular mit der Entwurfsansicht aus Abb. 5 dient der Auswahl der Adressaten eines Serienbriefes und dem anschließenden Starten der Serienbrieferstellung. Die nachfolgenden Abschnitte erläutern die Erstellung dieses Formulars. Das Hauptsteuerelement des Formulars ist das Unterformular sfmSerienbriefe zur Anzeige der Adressaten eines Serienbriefes. Das Unterformular ist wie in Abb. 6 aufgebaut.

Datenherkunft des Unterformulars sfmSerienbriefe

Die im Unterformular sfmSerienbriefe anzuzeigenden Daten stammen aus zwei Tabellen: der Tabelle tblPersonen und der Tabelle tblUnternehmen.

Die nachfolgend beschriebene Vorgehensweise ermöglicht es, die Daten aus den beiden Tabellen gleichzeitig als Adressaten eines Serienbriefes zu
verwenden. Um aus den bei-
den Tabellen die drei unterschiedlichen Kontaktarten Per-
sonen, Unternehmen ohne und Unternehmen mit Ansprechpartnern zu ermitteln, benötigt man zunächst drei Abfragen namens qrySerienbriefPersonen, qrySerienbriefUnternehmen und qrySerienbriefUnternehmenAnsprechpartner.

Diese drei Abfragen sind völlig gleich aufgebaut, damit man ihre Daten in einer weiteren Abfrage namens qrySerienbriefeAlle per UNION-Schlüsselwort zusammenführen kann. Zuletzt fasst die Abfrage qrySerienbriefeQuelle den Inhalt dieser Abfrage mit der Tabelle tblSerienbriefeJaNein zusammen, die Informationen darüber speichert, ob der jeweilige Kontakt den entsprechenden Serienbrief erhalten soll oder auch nicht.

Die Abfragen im Detail

Die Abfrage qrySerienbriefPerson enthält die Daten aller Einzelpersonen aus der Tabelle tblPersonen sowie - falls vorhanden - die ausgewählte Anrede und Briefanrede (s. Abb. 7).

Abb. 5: Entwurfsansicht des Formulars zur Auswahl von Serienbriefadressaten

Abb. 6: Aufbau des Unterformulars sfmSerienbriefe

Der komplette SQL-Ausdruck der Abfrage ist in Quellcode 1 dargstellt, da die Abbildung nicht alle vorhandenen Felder anzeigt.

Der Grund für den neu kreierten eindeutigen Index besteht darin, dass man später zu jeder Person, zu jedem Unternehmen ohne und jedem Unternehmen mit Ansprechpartner einen Eintrag in der Tabelle tblSerienbriefJaNein erstellen können soll.

Abb. 7: Aufbau der Abfrage qrySerienbriefPersonen

Da jeweils die Autowert-Funktion für die Erstellung der Primärschlüsselwerte der beiden zugrunde liegenden Tabellen tblPersonen und tblUnternehmen verantwortlich ist, kann es dazu kommen, dass ein Index in beiden Tabellen vorkommt. Damit man für jede Person, jedes Unternehmen und die unterschiedlichen Kombinationen aus Unternehmen und Ansprechpartnern einen Eintrag in der Tabelle tblSerienbriefJaNein erzeugen kann, bilden die drei Abfragen qrySerienbriefPersonen, qrySerienbriefUnternehmen und qrySerienbriefUnternehmenAnsprechpartner jeweils einen eigenen, eindeutigen Index. Dieser stammt aus einem Kürzel für die jeweilige Art und aus dem Primärindex aus der Tabelle tblPersonen oder tblUnternehmen.

SELECT "P" & [tblAdressen].[AdressID] AS UniqueID, tblAdressen.AdressID AS ID,
"tblAdressen" AS Herkunftstabelle, "" AS Unternehmen, tblAnreden.Anrede, 
tblBriefanreden.Briefanrede, tblAdressen.Vorname, tblAdressen.Nachname, 
tblAdressen.Strasse, [PLZ] & " " & [Ort] AS PLZUndOrt, tblAdressen.Land
FROM tblBriefanreden RIGHT JOIN 
    (tblAnreden RIGHT JOIN tblAdressen ON tblAnreden.AnredeID = tblAdressen.AnredeID) 
ON tblBriefanreden.BriefanredeID = tblAdressen.BriefanredeID;

Quellcode 1

SELECT "U" & [tblUnternehmen].[UnternehmenID] AS UniqueID, 
tblUnternehmen.UnternehmenID AS ID, "tblUnternehmen" AS Herkunftstabelle, 
tblUnternehmen.Unternehmen, "" AS Anrede, "" AS Briefanrede, "" AS Vorname, 
"" AS Nachname, tblUnternehmen.Strasse, [PLZ] & " " & [Ort] AS PLZUndOrt, 
tblUnternehmen.Land

FROM tblUnternehmen;

Quellcode 2

SELECT "U" & [tblUnternehmen].[UnternehmenID] & "A" & [tblAdressen].[AdressID] AS UniqueID, tblAdressen.AdressID AS ID, "tblAdressen" AS Herkunftstabelle, 
tblUnternehmen.Unternehmen, tblAnreden.Anrede, tblBriefanreden.Briefanrede, 
tblAdressen.Vorname, tblAdressen.Nachname, tblUnternehmen.Strasse, 
[tblUnternehmen].[PLZ] & " " & [tblUnternehmen].[Ort] AS PLZUndOrt, 
tblUnternehmen.Land

FROM tblBriefanreden RIGHT JOIN 

    (tblAnreden RIGHT JOIN 

        (tblUnternehmen INNER JOIN tblAdressen ON tblUnternehmen.UnternehmenID = _
        tblAdressen.UnternehmenID) 

    ON tblAnreden.AnredeID = tblAdressen.AnredeID) 

ON tblBriefanreden.BriefanredeID = tblAdressen.BriefanredeID;

Quellcode 3

Abb. 8: Zusammenfassung der Personen, Unternehmen ohne und Unternehmen mit Ansprechpartner

Um das zu veranschaulichen, zeigt Abb. 8 vorab die Datenblattansicht der Abfrage qrySerienbriefAlle. Wie deutlich zu erkennen ist, enthält das Ergebnis drei unterschiedliche Arten von Werten für das Feld UniqueID, das entweder den Primärindex der Tabelle tblPersonen, der Tabelle tblUnternehmen oder beide enthält. Die beiden weiteren Abfragen zur Auswahl der Unternehmen und der Unternehmen mit den unterschiedlichen Ansprechpartnern sind genauso wie die Abfrage qrySerienbriefPersonen aufgebaut, enthalten aber mitunter andere Werte für die Felder Unternehmen, Anrede, Briefanrede, Vorname und Nachname. Die Quellcodes 2 und 3 enthalten die entsprechenden SQL-Ausdrücke.

Zusammenfassen der
unterschiedlichen Kontakte

SELECT * FROM qrySerienbriefPersonen UNION

SELECT * FROM qrySerienbriefUnternehmen UNION
SELECT * FROM qrySerienbriefUnternehmenAnsprechpartner;

Quellcode 4

Abb. 9: Auswahl der richtigen Verknüpfungsart

Die Abfrage qrySerienbriefAlle fasst die drei Abfragen qrySerienbriefPersonen, qrySerienbriefUnternehmen und qrySerienbriefUnternehmenAnsprechpartner zusammen. Wie Quellcode 4 zeigt, ist die Abfrage relativ einfach aufgebaut.

Markieren der Daten für den
Serienbrief

Im letzten Schritt verknüpft die Abfrage qrySerienbriefe die Abfrage qrySerienbriefeAlle mit der Tabelle tblSerienbriefJaNein. Wichtig ist dabei die Art der Verknüpfung, wie Abb. 9 zeigt.

Durch den hier verwendeten LEFT JOIN erreicht man, dass die Abfrage alle Datensätze der Abfrage qrySerienbriefe anzeigt, egal ob eine Verknüpfung zur Tabelle tblSerienbriefJaNein besteht oder nicht.

Dadurch ist das Ja/Nein-Feld der Tabelle tblSerienbriefJaNein immer sichtbar, sodass man in dieser Abfrage leicht festlegen kann, welcher Kontakt beim Serienbrief berücksichtigt werden soll und welcher nicht.

Die Frage, warum man nicht einfach ein Ja/Nein-Feld an die beiden Tabellen tblPersonen und tblUnternehmen anhängen kann und statt dessen diesen komplizierten Weg geht, ist leicht beantwortet:

Es wäre kein Problem, wenn jeder Datensatz der beiden Tabellen nur je einmal in der resultierenden Abfrage vorkäme.

Durch die mögliche Kombination aus Unternehmen und Personen als Ansprechpartner können aber Datensätze aus beiden Tabellen theoretisch mehrmals auftreten, sodass es für jede Kombination die Möglichkeit geben muss, diese entweder dem Serienbrief hinzuzufügen oder auch nicht.

Private Sub ctlUnternehmen_AfterUpdate()

    KontakteFiltern

End Sub

Quellcode 5

Private Sub KontakteFiltern()

    Dim strFilter As String

    If Me!ctlPerson = False Then

        strFilter = "AND NOT (UNIQUEID LIKE 'P*' AND Herkunftstabelle = " _
            & "'tblAdressen')"

    End If

    If Me!ctlUnternehmen = False Then

        strFilter = strFilter & "AND NOT (UNIQUEID LIKE 'U*' AND Herkunftstabelle " _
            & "= 'tblUnternehmen')"

    End If

    If Me!ctlUnternehmenMitAnsprechpartner = False Then

        strFilter = strFilter & "AND NOT (UNIQUEID LIKE 'U*' AND Herkunftstabelle " _
            & "= 'tblAdressen')"

    End If

    strFilter = Mid(strFilter, 5)

    Me!sfmEtiketten.Form.Filter = strFilter

    Me!sfmEtiketten.Form.FilterOn = True

End Sub

Quellcode 6

Private Sub ogrEinAusblenden_AfterUpdate()

    Select Case Me!ogrEinAusblenden

        Case 1

            Me!sfmEtiketten.Form.FilterOn = False

        Case 2

            Me!sfmEtiketten.Form.Filter = "Serienbrief = True"

            Me!sfmEtiketten.Form.FilterOn = True

        Case 3

            Me!sfmEtiketten.Form.Filter = "Serienbrief = false OR Serienbrief IS NULL"

            Me!sfmEtiketten.Form.FilterOn = True

    End Select

    Me!sfmEtiketten.Form.Requery

End Sub

Quellcode 7

Weitere Steuerelemente des
Formulars

Mit dem Formular kann man nicht nur eine manuelle Auswahl der Adressaten treffen, sondern auch nach der Kontaktart filtern oder Kontakte ein- oder ausblenden.

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:

Ferngesteuerter Seriendruck mit Access und Word

© 2003-2015 André Minhorst Alle Rechte vorbehalten.