Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Unser Beitrag zum Thema Ferngesteuerter Seriendruck mit Access und Word hat soviel Feedback geliefert, dass wir Ihnen einige Verbesserungen und Erweiterungen liefern möchten. Der vorliegende Beitrag zeigt, welche Schwachstellen das Add-In noch enthielt und wie Sie diese beheben.
Fehler 5922 – Word konnte die Datenquelle nicht öffnen
Dieser Fehler trat speziell unter Access 2010 auf, und zwar in der folgende Zeile der Prozedur cmdSerienbriefErstellen_Click:
objMerge.OpenDataSource Name:=dbc.Name, LinkToSource:=True, Connection:=strConnection, SQLStatement:="SELECT * FROM [tblSerienbrief_Temp] WHERE [Serienbrief] = True", SubType:=1
Die Lösung war nicht einfach zu finden. Ein Tipp von Sascha Trowitzsch führte schließlich dazu, einmal den Makro-Editor unter Word zu starten und manuell einen Seriendruck auf Basis der betroffenen Tabelle der Add-In-Datenbank zu erstellen.
Fazit: Word kommt anscheinend nicht mit dem Datentyp .mda klar! Wenn Sie dort eine bestehende Datenquelle auswählen, müssen Sie Alle Dateien (*.*) als Filter festlegen, um überhaupt auf die .mda-Datei zugreifen zu können. Im nächsten Schritt zeigt sich dann, dass Word sich unter diesem Dateityp nichts vorstellen kann und beim Analysieren des Inhalts scheitert (s. Bild 1).
Bild 1: Versuch, Daten aus einer .mda-Datei als Quelle für einen Seriendruck zu verwenden
Ein kleiner Versuch brachte schließlich die Lösung dieses Problems: Der Dateiname wurde von .mda zurück in .mdb geändert und siehe da – Word liest die Daten problemlos ein. Die oben genannte und für den Fehler verantwortliche Zeile mit dem Aufruf der OpenDataSource-Methode funktioniert nun einwandfrei.
Allerdings lässt sich die .mdb-Datei nun nicht mehr direkt als Add-In installieren, da hier standardmäßig nur .mda– beziehungsweise .accdb-Dateien ausgewählt werden können. Das ist aber kein Problem, denn auch hier lässt sich der Filter auf alle Dateien einstellen.
Und zu guter Letzt müssen Sie noch die Tabelle USysRegInfo anpassen. Die Angabe der Library müssen Sie von aiuSeriendruck.mda auf aiuSeriendruck.mdb ändern, damit Access die umbenannte Datei weiterhin findet (s. Bild 2).
Bild 2: Anpassung der Tabelle USysRegInfo, damit Access das Add-In ordnungsgemäß starten kann
Kontextmenüeinträge bei mehreren Seriendrucken
Gelegentlich möchte man nicht nur ein, sondern mehrere verschiedene Dokumente im Seriendruck verarbeiten. Zum Hinzufügen der Platzhalter in Word hat aiuSeriendruck ja das Kontextmenü des Dokuments so angepasst, dass Sie alle Felder der Quelltabelle über die Auswahl eines Eintrags wie etwa [Vorname] einfügen können.
Leider behält das Kontextmenü diese Einträge bei, sodass das Kontextmenü mit jedem neuen Dokument länger wird. Die Lösung dieses Problems war ebenfalls nicht einfach zu finden. Eigentlich konnte man davon ausgehen, dass es reicht, beim Erstellen der Kontextmenüeinträge mit der Add-Methode den Temporary-Parameter auf True einzustellen. Dies würde bedeuten, dass die angelegten Einträge beim Schließen von Word wieder gelöscht würden:
Set cbc = m_Commandbar.Controls.Add(1, , , , True)
Aber dies reichte aus unerfindlichen Gründen nicht. Also griff ich zu weiteren Maßnahmen: Alle neu angelegten Kontextmenüeinträge wurden mit einem Wert für die Tag-Eigenschaft versehen, der das Tilde-Zeichen und die Beschriftung des Kontextmenüeintrags enthielt, also beispielsweise ~[Vorname]. Dies alles mit dem Zweck, eventuell verbleibende Einträge vor dem erneuten Anlegen des Kontextmenüs mit der Delete-Methode in einer Schleife über alle Einträge er jeweiligen Kontextmenüeinträge wieder zu löschen. Auch das brachte nicht die geringste änderung!
Die Lösung fand sich schließlich in Word selbst: Wenn Sie bei geöffnetem Word-Dokument Elemente zur CommandBars-Auflistung hinzufügen und das Dokument dann speichern, werden diese Elemente mit dem Dokument gespeichert.
Das Speichern des Dokuments tritt in aiuSeriendruck auf, wenn der Benutzer den letzten Kontextmenüeintrag mit der Beschriftung Alle Platzhalter gesetzt anklickt. Dies löst eine entsprechende Ereignisprozedur aus, die um zwei Anweisungen ergänzt werden muss – und zwar um den Aufruf der Methode Reset für die beiden um temporäre Einträge erweiterten Kontextmenüs. Reset setzt die Kontextmenüs wieder so zurück, dass diese nur noch eingebaute Elemente enthalten (s. Listing 1).
Listing 1: Speichern des um Platzhalter ergänzten Dokuments und vorheriges Zurücksetzen der Kontextmenüs
Private Sub m_cbc_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) Select Case Ctrl.Caption Case "Alle Platzhalter gesetzt" On Error Resume Next m_Document.CommandBars("Text").Reset m_Document.CommandBars("Table Text").Reset m_Document.Save If Err.Number = 0 Then strVorlage = m_Document.Path & "\" & m_Document.Name RaiseEvent VorlageErstellt(strVorlage) Else RaiseEvent VorlageErstellt("") End If Case Else m_Document.Application.Selection.Text = m_Text End Select End Sub
Seriendruck ersetzt Platzhalter nicht bei Wechsel von Datenquelle/Dokument
Wenn Sie mit der ersten Version von aiuSeriendruck eine Datenquelle auswählen, ein Seriendruckdokument vorbereiten und beide zusammenführen, klappt dies ohne Probleme. Wenn Sie dann allerdings eine andere Datenquelle auswählen und ein neues Dokument mit den entsprechenden Platzhaltern füllen, geht etwas schief: Word ersetzt dann die Platzhalter nicht mehr, wodurch dann zwar die der Anzahl der Datensätze entsprechende Anzahl Seiten erzeugt wird, aber nicht die gewünschten Daten angezeigt werden (s. Bild 3).
Bild 3: Beim Neuauswahl von Quelle und Seriendruck-Dokument gelingt das Ersetzen der Platzhalter nicht mehr.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo