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/2009.

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

Füllen Sie Berichte mit der Print-Anweisung und ohne Verwendung gebundener Steuerelemente

Techniken

Berichte, VBA

Voraussetzungen

Access 2000 oder höher

Beispieldateien

BerichteManuellFuellen.mdb

Shortlink

659

Berichte manuell füllen

André Minhorst, Duisburg

Auch wenn man Berichte meist erst gegen Ende eines Projekts programmiert und sie gegenüber der Benutzeroberfläche oft stiefmütterlich behandelt, weiß man doch, wie man Berichte mit Inhalt füllt: Nämlich durch Datenbindung des Berichts an eine Tabelle oder Abfrage und der in den verschiedenen Bereichen eingefügten Felder zur Anzeige der Daten. Es geht aber auch anders: Mit dem Print-Befehl des Report-Objekts drucken Sie Texte an beliebige Stellen der einzelnen Berichtsbereiche. Wie das funktioniert und was Sie damit anstellen können, lesen Sie in diesem Beitrag.

Wer in Access-Berichten die üblichen Pfade verlassen und ausgefallene Szenarien realisieren möchte, muss im Normalfall ein wenig Zeit mitbringen. Mal eben Text in einem Textfeld in unterschiedlichen Schriftarten darstellen, den Inhalt eines Textfelds mittig oder gar am unteren Rand ausrichten oder eine komplette Seite mit Informationen füllen, die nicht aus gebundenen Feldern stammen?

Mit Access-Berichten durchaus ein Problem - wenn es denn die Print-Methode des Report-Objekts nicht gäbe.

Mit dieser Methode können Sie Text in beliebigen Schriftarten an beliebigen Stellen in die einzelnen Bereiche eines Access-Berichts schreiben. Der kleine Nachteil ist, dass dies nicht bereichsübergreifend geschehen kann - das schmälert den Nutzen dieser Funktion für Berichte mit dem gewissen Etwas jedoch nicht.

Ereignisreich

Während Sie die Datenherkunft und die Position der gebundenen und ungebundenen Steuerelemente eines Access-Berichts normalerweise zur Entwurfszeit festlegen und diese dann von Access automatisch gefüllt werden, erfolgt der Aufruf des Print-Befehls erst zur Laufzeit, und zwar innerhalb bestimmter Ereignisse. Dabei handelt es sich um die beiden Ereignisse Beim Formatieren und Beim Drucken eines jeden Berichtsbereichs, die auch in dieser Reihenfolge pro Bereich einmal oder mehrmals ausgelöst werden.

Der Unterschied zwischen den beiden Ereignissen ist, dass beim Aufruf von Beim Formatieren noch keine Informationen über die Formatierung des aktuellen Bereichs vorliegen, beim Ereignis Beim Drucken jedoch schon.

Wenn Sie einem Bereich, der in Abhängigkeit vom Inhalt seiner gebundenen Steuerelemente eine unterschiedliche Höhe aufweisen kann, per Print Text hinzufügen möchten, ist es möglicherweise interessant, die endgültige Höhe des Bereichs zu kennen - und dies ist erst im Ereignis Beim Drucken möglich.

Print it

Probieren Sie das einfach mal aus, indem Sie beispielsweise für den Seitenkopf das Ereignis Beim Drucken anlegen und dort einen Print-Befehl unterbringen. Dazu öffnen Sie einen Bericht in der Entwurfsansicht, aktivieren den Seitenkopfbereich durch einen Klick auf den Balken mit der Beschriftung Seitenkopf, klicken auf die Eigenschaft Beim Drucken im Bereich Ereignisse des Eigenschaftsfensters und anschließend auf die nun erscheinende Schaltfläche mit den drei Punkten (...).

Wenn Sie im folgenden Dialog den Eintrag Code-Generator auswählen, öffnet sich der VBA-Editor und präsentiert den automatisch angelegten Rumpf einer Prozedur namens Seitenkopfbereich_Print.

Tragen Sie hier die folgende Anweisung ein und öffnen Sie den Bericht in der Seitenvorschau, um das Ergebnis aus Abb. 1 zu erhalten:

pic001.png

Abb. 1: Ein erster kleiner Beispieltext

Private Sub Seitenkopfbereich_Print(Cancel As µ

    Integer, PrintCount As Integer)

    Me.Print "Printed by Print"

    End Sub

Es kann sein, dass Sie nun keinen Text sehen, was zum Beispiel daran liegen kann, dass Sie Access 2007 verwenden und den Bericht in der Berichtsansicht geöffnet haben. Diese löst aber weder das Beim Formatieren- noch das Beim Drucken-Ereignis aus. Sie müssen also zur Seitenansicht wechseln. Es kann auch sein, dass der Bereich, in dem der Text gedruckt werden soll, schlicht zu klein bemessen ist. Die Print-Anweisung nimmt keine Rücksicht darauf, ob der auszugebende Inhalt im Zielbereich Platz findet; gegebenenfalls erhalten Sie hier sogar abgeschnittene Zeilen.

Auf die oben angegebene Weise können Sie Texte in alle Berichtsbereiche drucken. Der Text im Detailbereich erscheint auf jeden Fall mindestens einmal, auch wenn die Datenherkunft keine Datensätze enthält.

Von Zeile zu Zeile

Wenn Sie nicht nur eine, sondern mehrere Zeilen drucken möchten, geben Sie einfach mehrere Print-Anweisung hintereinander ein:

Me.Print "Zeile 1"

Me.Print "Zeile 2"

Entgegen der Angabe in der Online-Hilfe führt dies allerdings nur zu einem Wagenrücklauf, nicht jedoch zu einem Zurücksetzen der X-Position auf den Beginn der Zeile. Stattdessen erhalten Sie die Ausgabe aus Abb. 2.

pic002.png

Abb. 2: Zwei aufeinanderfolgende Print-Anweisungen liefern einen Wagenrücklauf, aber keinen Start am Zeilenbeginn.

Wenn Sie zwei Zeilen direkt untereinander drucken möchten, müssen Sie die X-Position zuvor mit folgender Anweisung auf 0 einstellen:

Me.CurrentX = 0

Damit kommen wir zum Einstellen der Startposition von Texten, die per Print in Berichte geschrieben werden sollen: Neben der Eigenschaft CurrentX gibt es nämlich auch noch die Eigenschaft CurrentY zum Einstellen der y-Koordinate.

Wenn Sie den Text also nicht ganz oben im betroffenen Bereich drucken möchten, sondern weiter unten, müssen Sie den Abstand zum oberen Rand des Bereichs mit der CurrentY-Eigenschaft angeben. Das Gleiche gilt natürlich für den Abstand zum linken Rand; hier kommt die CurrentX-Eigenschaft zum Zuge.

Diese beiden Eigenschaften behalten ihren Wert nach einmaligem Einstellen jedoch nicht, sondern ändern sich mit jedem erneuten Aufruf der Print-Anweisung und definieren die neue Position des Startpunkts für weitere Print-Aufrufe. Als Beispiel geben die folgenden Zeilen die x- und y-Position vor und nach dem Drucken einer Textzeile aus:

Debug.Print Me.CurrentX, Me.CurrentY

Me.Print "Zeile 1"

Debug.Print Me.CurrentX, Me.CurrentY

Das Ergebnis im Direktfenster sieht so aus:

0 0

588 269

Auf diese Weise können Sie gleichzeitig die Höhe und die Breite des soeben ausgedruckten Textes bestimmen. Aber um welche Einheit handelt es sich denn hier überhaupt? Normalerweise um Twips. Die Einheit stellen Sie auf zwei Arten ein:

  • Sie legen mit der Eigenschaft ScaleMode einen der gängigen Werte 1 (Twips), 2 (Punkt) oder 3 (Pixel) fest (übrige Werte siehe Online-Hilfe).
  • Sie bestimmen eine eigene Einheit, indem Sie den Bereich durch Angabe von Werten für die Eigenschaften ScaleWidth und ScaleHeight in die gewünschte Anzahl Einheiten aufteilen - die Gesamtbreite und die Gesamthöhe des Bereichs, geteilt durch die für ScaleWidth und ScaleHeight angegebenen Werte, ergibt die Breite beziehungsweise Höhe der neuen Einheit. Wenn der Bereich 15 Zentimeter breit ist und Sie geben für ScaleWidth den Wert 10 an, ist jede Einheit 1,5 Zentimeter breit.

Zusätzlich zur Länge/Breite einer Einheit können Sie deren Ursprung relativ zum bestehenden linken und oberen Seitenrand verändern, und zwar mit den beiden Eigenschaften ScaleLeft und ScaleTop.

Texte aneinanderreihen

Wenn Sie Texte ohne Zeilenumbruch aneinanderreihen möchten, können Sie dem Argument der Print-Anweisung ein Semikolon anhängen:

Me.Print "Text 1 ";

Me.Print "Text 2"

liefert beispielsweise folgende Ausgabe im Bericht:

Text 1 Text 2

Kreuzweise

Mit den hier vorgestellten Befehlen können Sie etwa Kreuztabellen in Berichten realisieren. Ein einfaches Beispiel ist die Darstellung des kleinen 1x1. Dafür ist der Code aus Listing 1 erforderlich und das Ergebnis sieht wie in Abb. 3 aus. Beachten Sie, dass der Bereich, in dem diese Matrix gedruckt werden soll, hoch genug ist - anderenfalls wird diese nicht komplett dargestellt. Die Routine durchläuft zwei Schleifen und füllt so zunächst die Spalten der Matrix und dann die Zeilen.

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:

Benutzerdefinierte Formatierung

Gruppensummen ohne Gruppen im Berichtsfuß

Termine in Berichten darstellen

Spaltenüberschriften in Berichten

Charts mit Access und Google

Falzmarken in Berichten

Kreuztabellen in Berichten

Mehrseitige Unterberichte mit Seitenkopf

Access-FAQ: Rund um Access

Malen nach Zahlen

Tipps und Tricks

OPOS – Barcodes scannen

Verwaltung von Projekten des Handwerks

Mit Zeiten rechnen

Datenbank nach Vorlage

Briefe erstellen und verwalten

Formatierte Texte in Berichten

Etikettendruck mit der Adressverwaltung

Berichte modal öffnen unter Access 97/2000

Rechnungen mit Berichten ausgeben

Dynamisches Hilfe- und Dokumentationssystem

Quellcode-Versionsverwaltung inside

Inhaltsverzeichnisse für Access-Berichte

Sortieren und Gruppieren in Berichten

Export von Access-Berichten

Erstellen von Abfragen als Datenherkunft oder Datensatzherkunft

Formatvorlagen für Formulare und Berichte

Berichte zur Laufzeit anpassen

Tipps und Tricks zu Berichten

© 2003-2015 André Minhorst Alle Rechte vorbehalten.