Malen nach Zahlen

André Minhorst, Duisburg

Was wäre eine Rechnung ohne die Linie zur Trennung von Einzelpositionen und Rechnungssumme oder zum Unterstreichen der überschrift Oder ein optisch schöner Bericht, in dem der Briefkopf durch eine Linie vom Inhalt getrennt ist Die meisten dieser Linien können Sie statisch in den Bericht einfügen, doch mit ein wenig VBA können Sie noch wesentlich mehr für die Optik Ihrer Berichte tun. Im vorliegenden Beitrag erfahren Sie, wie es geht.

Die nachfolgenden Beispiele für die optische Aufbereitung von Berichten basieren alle auf der Anwendung der Line-Methode von VBA. Um nachfolgende Unklarheiten bezüglich der Anwendung dieser Methode im Voraus zu beiseitigen, erfahren Sie erst einmal alles über das einzige Werkzeug, mit dem Sie Ihre künstlerische Ader in Access ausleben können (mit Ausnahme der Circle-Methode).

Die Line-Methode kann mehr, als der Name verrät: Mit ihr können Sie nämlich nicht nur Linien, sondern auch Rechtecke in einen Bericht zaubern. Das Ganze funkioniert nur in den Prozeduren, die durch die Ereigniseigenschaft Beim Drucken der verschiedenen Berichtsbereiche ausgelöst wird. Eine Ausnahme bildet die Bei Seite-Ereigniseigenschaft, die man auch zum Zeichnen von Linien und Rechtecken verwenden kann.

Um vernünftig mit der Line-Methode arbeiten zu können, legen Sie erstmal die Maßeinheit für den Bericht fest. Dazu stellen Sie den Wert der Eigenschaft ScaleMode ein – in Deutschland kommt hier vermutlich der Wert 6 (Millimeter) oder 7 (Zentimeter) zum Einsatz. Es stehen auch Werte wie Twips, Punkte oder Pixel zur Verfügung, die aber in diesem Fall eher unhandlich sind. Wenn Sie ohnehin nur die Eigenschaften wie Koordinaten von Berichtsbereichen oder Steuerelementen als Grundlage für das Zeichnen von Linien und Rechtecken verwenden, können Sie die Eigenschaft ScaleMode unberührt lassen. Ebenfalls interessant sind die vier Eigenschaften ScaleTop, ScaleLeft, ScaleHeight und ScaleWidth, die der Ausgabe der Koordinaten und der Abmessungen der einzelnen Bereiche dienen. Die folgende Prozedur, die Sie für die Ereigniseigenschaft Bei Seite hinterlegen, gibt beispielsweise die kompletten Maße einer Seite aus:

Private Sub Report_Page()
  Me.ScaleMode = 7
  Debug.Print "Left: " & Me.ScaleLeft
  Debug.Print "Top: " & Me.ScaleTop
  Debug.Print "Width: " & Me.ScaleWidth
  Debug.Print "Height: " & Me.ScaleHeight
End Sub

Für einen jungfräulichen Bericht zeigt die Prozedur Folgendes im Testfenster an:

Left: 0
Top: 0
Width: 15,86796
Height: 24,56394

Die Paramter der Line-Methode können auf unterschiedliche Art übergeben werden. Im nachfolgenden Beitrag kommt die folgende zum Zuge:

object.Line [[Step](x1, y1)] - [Step](x2, y2)[, [color][, B[F]]]

Dabei geben x1 und y1 den Startpunkt der Linie beziehungsweise den ersten Eckpunkt des Rechtecks an. x2 und y2 enthalten die Koordinate des Endpunktes der Linie beziehungsweise des gegenüberliegenden Punktes des Rechtecks. Unter Farbe geben Sie eine unter Access übliche Farbkonstante an und für Konstante geben Sie entweder keinen Wert für eine Linie oder den Buchstaben B für ein Rechteck an. Zusätzlich können Sie den Parameter B zu BF ergänzen, um ein gefülltes Rechteck anzuzeigen. Wenn Sie den Parameter Step verwenden, werden die Parameter x1, y1, x2 und y2 relativ zu dem Punkt ermittelt, der durch die Eigenschaften CurrentX und CurrentY des jeweiligen Bereichs angegeben ist.

Hinweis

Versuchen Sie es nicht mit der in der Online-Hilfe neuerer Access-Versionen angegebenen Fassung der Line-Methode. Sie ist schlichtweg falsch.

Ein einfaches Beispiel zum Start ist das Einrahmen einer kompletten Berichtsseite inklusive Berichtskopf und -fuß. Diese Aufgabe handeln Sie in einer einzigen Zeile ab, indem Sie die Eigenschaften ScaleTop, ScaleLeft, ScaleHeight und ScaleWidth in die Line-Methode einfließen lassen.

Eigentlich sollte die folgende Anweisung in der Ereignisprozedur Bei Seite des Berichts alles Notwendige erledigen und beispielsweise einen roten Rahmen um den Bericht legen:

Me.Line (Me.ScaleLeft, Me.ScaleTop)-(Me.ScaleWidth, Me.ScaleHeight), &HFF, B

Da aber zwischen Theorie und Praxis immer noch ein kleiner Unterschied besteht, erscheinen dann die rechte und die untere Linie des Rechtecks nicht mehr im Bericht. Wenn Sie die Anweisung um wenige Millimeter anpassen wie in folgender Prozedur, sieht das Ergebnis wie in Bild 1 aus:

Bild 1: Ein komplett eingerahmter Bericht

Private Sub Report_Page()
    Me.ScaleMode = 7
    Me.Line (Me.ScaleLeft, _        Me.ScaleTop)-(Me.ScaleWidth, _        Me.ScaleHeight), &HFF, B
End Sub

Interessanter wird das Einrahmen, wenn Sie eine Tabelle mit Daten komplett mit einem Gitternetz versehen möchten. Im folgenden Beispiel soll das in einem Bericht mit einer Artikelliste passieren.

Erstellen Sie zunächst einen Bericht, dessen Entwurfsansicht wie in Bild 2 aussieht. Der Bericht selbst enthält noch kein einziges grafisches Element wie eine Linie über- oder unterhalb des Detailbereichs. Sämtliche Linien, die in der Druckansicht des Berichts wie in Bild 3 zu erkennen sind, werden per VBA-Code erstellt.

Die dafür zuständige Prozedur finden Sie in Quellcode 1. Für ihren Aufruf ist die Ereigniseigenschaft Beim Drucken des Detailbereichs zuständig. Die Funktion erstellt das Gitternetz in zwei Schritten: Zunächst zeichnet sie für jedes Steuerelement außer dem rechts außen liegenden eine Linie rechts von dem Steuerelement, die der Höhe des Detailbereichs entspricht. Anschließend zieht sie einen Rahmen um den kompletten Detailbereich, der die bereits bestehenden Linien zu einem Gitternetz ergänzt.

Bild 2: Entwurfsansicht einer Artikelliste

Bild 3: Artikelliste mit Gitternetz

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar