Etiketten mehrfach drucken
Versionen: Access 97, 2000 und 2002/XP
Es gibt verschiedene Bereiche, in denen die Informationen aus einem einzelnen Datensatz mehrfach hintereinander ausgedruckt werden müssen. Wenn beispielsweise neue Artikel im Lager eingehen, sind diese einzeln mit einem Aufkleber zu versehen, der Auskunft über Artikelnummer, Bezeichnung, Eingangsdatum und Preis gibt. Wer einmal versucht hat, das über einen normalen Bericht unter Access zu realisieren, kennt die Problematik. Ein möglicher Lösungsansatz wäre, den Bericht so anzulegen, dass er von der Größe her genau einem Etikett entspricht. Sie geben dann im Druckerdialog über die Anzahl der zu druckenden Kopien die gewünschte Etikettenzahl an.
Das Problem dabei: die Etikettenbögen für Laser- und Tintenstrahldrucker lassen sich nicht nutzen. Sie in jedem Fall Endlospapier einsetzen. Unser Tipp der Woche hilft weiter: In einem Formular, für dessen Datensätze bei Bedarf mehrere Etiketten gedruckt werden sollen, legen Sie eine Schaltfläche an. Eine VBA-Routine in der Ereignisprozedur "Beim Klicken" schreibt pro benötigtes Etikett eine Kopie des aktuellen Datensatzes in eine temporäre Tabelle. Diese temporäre Tabelle liegt dann einem Bericht für den gewünschten Etikettenbogen zugrunde. Die gewünschte Etikettenzahl geben Sie vorher direkt im Formular in ein ungebundenes Textfeld "Anzahl Kopien" ein, das von der VBA-Routine ausgewertet wird.
Im ersten Schritt müssen Sie also zunächst eine Tabelle anlegen, die die zu druckenden Datensätze temporär aufnimmt. Dazu gehen Sie wie folgt vor:
Markieren Sie im Datenbankfenster die Tabelle mit den Basisdaten, also zum Beispiel "Artikel", "Kunden" oder ähnlich.
Wählen Sie das Menü Bearbeiten-Kopieren an oder drücken Sie Strg+C.
Wählen Sie das Menü Bearbeiten-Einfügen an oder drücken Sie Strg+V, geben Sie als Namen "TmpDruck" ein und aktivieren Sie die Option Nur Struktur.
Öffnen Sie die neue Tabelle "TmpDruck" im Entwurfsmodus und löschen Sie alle Felder bis auf die, die auf den Etiketten ausgedruckt werden sollen.
Bitte beachten Sie: Wenn eines der Felder ein Primärschlüssel oder vom Datentyp "Zähler/AutoWert" ist, muss der Primärschlüssel gelöscht und der Datentyp gegebenenfalls auf "Zahl/Long Integer" umgestellt werden!
Nach dem Ausdruck wird der Inhalt der temporären Tabelle übrigens mit dem Schließen des Berichts automatisch aus gelöscht, so dass die Tabelle wieder für zukünftige Druckvorgänge bereit ist.
Der Aufruf der neuen Funktion erfolgt am besten über das Formular, aus dem eine bestimmte Anzahl von Etiketten gedruckt werden soll. In unserem Beispiel wäre das ein Formular, über das die Artikel verwaltet werden und in dem auch die Anzahl zu druckender Etiketten festgelegt wird. Um den Ausdruck gleich für mehrere Artikel starten zu können, ist eine Schaltfläche An Warteschlange vorgesehen, über die die Datensätze nur in die temporäre Tabelle geschrieben werden. Eine weitere Schaltfläche Warteschlange Drucken startet dann den eigentlichen Druckvorgang. Sicherheitshalber ist eine dritte Schaltfläche Warteschlange Löschen vorgesehen. Schließlich kann es passieren, dass der Rechner abstürzt oder der letzte Ausdruck wegen Papierstau abgebrochen wurde und die Tabelle somit nicht automatisch geleert werden konnte.
Legen Sie also zunächst drei Schaltflächen im Formularfuß des betreffenden Formulars an, deren Namen und Bezeichnungen Sie auf "btnAnWS" (An Warteschlange), "btnWSDrucken" (Warteschlange drucken) und "btnWSLoeschen" (Warteschlange löschen) setzen. Den Ereignisprozeduren "Beim Klicken" ordnen Sie die im Folgenden erläuterten Anweisungen zu. Um die VBA-Routinen einzugeben, setzen Sie die Eigenschaft "Beim Klicken" der Schaltflächen jeweils auf den Eintrag "[Ereignisprozedur]" und klicken auf die Schaltfläche mit den drei Punkten.
Über die Schaltfläche An Warteschlange wird der aktuelle Datensatz entsprechend der eingegeben Anzahl in die Tabelle "TmpDruck" kopiert. Da die dazugehörige Routine nur in diesem Formular zu gebrauchen ist, wird sie direkt der Ereignisprozedur "Beim Klicken" der Schaltfläche zugeordnet:
Sub btnAnWS_Click ()
Dim db As Database
Dim rs As Recordset, I As Integer
Set db = CurrentDB()
Set rs = db.OpenRecordset("TmpDruck", dbOpenDynaset)
DoCmd Hourglass True
For I = 1 To Me.[AnzahlKopien]
rs.AddNew
rs("Artikel-Nr") = [Artikel-Nr]
rs("ArtikelName") = [ArtikelName]
rs("Einzelpreis") = [Einzelpreis]
rs.Update
Next I
DoCmd Hourglass False
rs.Close
MsgBox "Artikel für den Ausdruck von" + _
Str$(Me.[AnzahlKopien]) + _
" Aufklebern in Warteschlange gestellt!", vbOkOnly
End Sub
Zunächst öffnen wir hier die Tabelle "TmpDruck" als Recordset. In einer For-Next-Schleife wird dann für jeden Aufkleber jeweils ein neuer Datensatz mit "rs.AddNew" angelegt, mit den Daten aus den Feldern des Formulars gefüllt und per "rs.Update" in die Tabelle geschrieben. Abschließend erhält der Anwender noch einen Hinweis, dass die Routine hat ihre Arbeit erledigt.
Der Ausdruck wird über die Schaltfläche Warteschlange Drucken gestartet, der über die Ereignisprozedur "Beim Klicken" folgende Anweisung zugeordnet ist:
Sub btnWSDrucken_Click ()
DoCmd OpenReport "Artikel-Aufkleber", acViewPreview
End Sub
Mit dieser Anweisung wird der Bericht zunächst in der Seitenansicht geöffnet. Sie können ihn daraufhin noch einmal prüfen und dann per Mausklick ausgeben. Ist keine Prüfung notwendig, geben Sie anstelle der Konstanten "acViewPreview" die Konstante "acViewNormal" an, wodurch der Ausdruck sofort ohne Seitenansicht auf dem Standard-Drucker gestartet wird.
Die für das Löschen der temporären Tabelle zuständige Routine ist - damit man sie von beliebigen Stellen aus aufrufen kann - als globale Funktion "WSLoeschen()" am besten in einem Modul "modEtikDruck" untergebracht und beinhaltet folgende Anweisungen:
Function WSLoeschen ()
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from TmpDruck", False
DoCmd.SetWarnings True
MsgBox "Warteschlange istgelöscht!", vbOkOnly
End Function
Die Funktionsweise ist recht einfach: Zunächst schalten wir die Ausgabe von Warnmeldungen aus. Dann löschen wir über eine SQL-Anweisung alle Datensätze in der Tabelle "TmpDruck". Im Anschluss wird die Anzeige von Warnmeldungen wieder eingeschaltet. Der Anwender erhält zum Schluss noch einen Hinweis. Die Anbindung dieser Routine an die Schaltfläche Warteschlange Löschen erfolgt über die Eigenschaft "Beim Klicken" der Schaltfläche durch den Eintrag der Anweisung "=WSLoeschen()".
Im Formular benötigen Sie nun noch ein ungebundenes Textfeld mit Namen "AnzahlKopien", in das die gewünschte Etikettenzahl eingegeben wird. Den Inhalt dieses Feldes liest später die Ereignisprozedur "Beim Klicken" der Schaltfläche "btnAnWS" wie oben erläutert aus.
Außerdem müssen Sie einen Bericht auf Basis der Tabelle "TmpDruck" anlegen, der den gewünschten Etikettenbogen bedruckt. Es bietet sich an, hier den entsprechenden Assistenten von Access zu nutzen, in dem bereits alle gängigen Etikettenformate vorgegeben sind.
Eine Automatik sorgt schließlich dafür, dass die Datensätze in der Tabelle "TmpDruck" nach dem Abschluss des Ausdrucks gelöscht werden und die Tabelle wieder für weitere Druckvorgänge bereit ist. Die Anbindung erfolgt durch einen einfachen Aufruf der Funktion "WSLoeschen()" über die Ereignisprozedur "Beim Schließen" des Berichtes:
Sub Report_Close ()
Dim X As Variant
X = WSLöschen()
End Sub
© 1996-2024 Tibe Services Tim Berlebach, Zangerstraße 22, 65375
Oestrich-Winkel,
Tel: 06723
889005, Fax: 06723 889006, E-Mail: info(at)tibe.de, Internet: www.tibe.de