Diagramme formatieren per VBA

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Diagramme formatieren per VBA

Access bietet mit Microsoft Graph die Möglichkeit, Daten in Diagrammen darzustellen. Dieses Diagramm können Sie über den Assistenten mit Daten füllen. Üblicherweise müssen Sie dann aber noch an einigen Schrauben drehen, damit das Diagramm Ihren Anforderungen entspricht – zum Beispiel, um den Inhalt und die Formatierung von Beschriftungen anzupassen. Das Graph-Objekt können Sie allerdings auch per VBA steuern – wie das gelingt, zeigt der vorliegende Beitrag.

Ein Diagramm fügen Sie üblicherweise über den entsprechenden Eintrag in der Werkzeugleiste (im Ribbon von Access 2010 etwa unter Ent­wurf|Steuer­ele­men­te|Dia­gramm zu finden). Nach dem Platzieren des Steuerelements im Formular erscheint wie in Bild 1 der Diagramm-Assistent, der Ihnen beim Einrichten des Diagramms hilft.

Hinzufügen eines Diagramms per Assistent

Bild 1: Hinzufügen eines Diagramms per Assistent

Dieser Assistent lässt sich leider nicht umgehen, um beispielsweise einfach ein leeres Diagramm zum Formular hinzuzufügen, das Sie dann schrittweise anpassen – wir müssen also den Assistenten durchlaufen und die notwendigsten Einstellungen vornehmen. In diesem Fall wählen Sie einfach die Tabelle tblArtikel als Datenherkunft aus und fügen die beiden Felder Artikelname und Einzelpreis zum Diagramm hinzu. Wählen Sie als Diagrammtyp Säulendiagramm aus und stellen Sie die Felder für das Layout wie in Bild 2 ein. Behalten Sie den Titel bei und lassen Sie auch die Anzeige einer Legende vorerst aktiviert. Klicken Sie dann auf Fertigstellen.

Einstellen der Daten für das Diagramm

Bild 2: Einstellen der Daten für das Diagramm

Das fertige Diagramm sieht nun, nach Einstellen der entsprechenden Breite, etwa wie in Bild 3 aus. Nun schauen wir uns an, wie wir das Diagramm per VBA tunen können.

Erste Version des Diagramms

Bild 3: Erste Version des Diagramms

Verweis setzen

Dummerweise zeigt der VBA-Editor gar keine Objekte zum Chart-Objekt an.

Das liegt daran, dass dieses Objekt einerseits nicht zum eingebauten Umfang von Access gehört und andererseits nicht automatisch ein Verweis auf die entsprechende Bibliothek hinzugefügt wird.

Dies holen Sie nun nach, indem Sie im VBA-Editor den Menübefehl Extras|Verweise ausführen und im Dialog aus Bild 4 den Eintrag Microsoft Chart x.0 Object Library aktivieren.

Hinzufügen eines Verweises auf die Bibliothek zum Graph-Diagramm

Bild 4: Hinzufügen eines Verweises auf die Bibliothek zum Graph-Diagramm

Steuerelementname anpassen

Um gleich komfortabel auf das Chart-Objekt zugreifen zu können, ändern Sie den Namen des soeben zum Formular hinzugefügten Steuerelements auf ctlChart.

Diagrammtitel ändern

Als Erstes wollen wir per VBA den Titel des Diagramms ändern. Dazu fügen Sie dem Formular ein Textfeld zum Eingeben des neuen Titels namens txtTitel sowie eine Schaltfläche namens cmdTitelAendern hinzu, welche den Titel im Chart-Objekt ändern soll – etwa so, wie in Bild 5.

Chart-Objekt mit geändertem Titel

Bild 5: Chart-Objekt mit geändertem Titel

Die Prozedur, die durch die Schaltfläche ausgelöst wird, finden Sie in Listing 1. Wenn Sie versuchen, eine Eigenschaft zum Ändern des Titels des Diagramms für das Objekt Me!ctlChart zu finden, werden Sie Probleme bekommen – dort sind keine für das Steuerelement spezifischen Eigenschaften zu finden. Stattdessen greifen Sie auf das Objekt selbst über die Eigenschaft Object zu – genau so, wie Sie es auch etwa beim TreeView-Steuerelement erledigen.

Private Sub cmdTitelAendern_Click()
     Dim objChart As Chart
     Set objChart = Me!ctlChart.Object
     objChart.ChartTitle.Caption = Nz(Me!txtTitel)
End Sub

Listing 1: Prozedur zum Ändern des Titels des Diagramms

Nun bietet Me!ctlChart.Object keine IntelliSense-Unterstützung an, sodass wir zunächst noch eine Objektvariable deklarieren, die das in ctlChart enthaltene Objekt referenziert. Dieses deklarieren wir mit dem Namen objChart und dem Typ Chart. Nun können Sie über die Eigenschaft Caption des Objekts ChartTitle auf die für die Beschriftung zuständige Eigenschaft zugreifen.

Tragen Sie nun einen neuen Titel in das Textfeld ein und klicken auf die Schaltfläche, ändert sich auch der Titel im Chart-Objekt.

Diagrammtyp einstellen

Die nächste Änderung, die wir vornehmen möchten, betrifft den Diagrammtyp. Diesen legen Sie mit der Eigenschaft ChartType des Chart-Objekts fest.

Die einzelnen Werte können Sie unter VBA über die Enumeration XlChartType ermitteln, wie etwa in Bild 6 im Direktbereich des VBA-Editors.

Diagrammtyp-Enumeration per VBA

Bild 6: Diagrammtyp-Enumeration per VBA

Wenn wir aber nun nicht direkt im Code arbeiten, sondern die Diagramm-Art etwa per Kombinationsfeld auswählen möchten, benötigen wir die entsprechenden Zahlenwerte und Bezeichnungen/Konstanten als Datensatzherkunft für das entsprechende Steuerelement. Also legen wir schnell eine Tabelle an und tragen dort die benötigten Datensätze ein – jeweils mit dem Zahlenwert im Feld CharttypeID und der Konstanten in den Feldern Charttype und Bezeichnung einer Tabelle namens tblCharttypes (s. Bild 7).

Tabellen mit den Diagrammtypen

Bild 7: Tabellen mit den Diagrammtypen

Diese Tabelle dient dann auch als Datensatzherkunft eines neuen Kombinationsfeldes im Formular frmDiagramme namens cboDiagrammtyp (s. Bild 8) – genau genommen die folgende Abfrage auf Basis dieser Tabelle:

Auswahl von Diagrammtypen

Bild 8: Auswahl von Diagrammtypen

SELECT CharttypeID, ­Bezeichnung FROM tblCharttypes;

Mit dem Kombinationsfeld können Sie nun einen der Diagrammtypen auswählen. Damit dieser auch auf das Chart-Objekt angewendet wird, fügen Sie der Ereigniseigenschaft Nach Aktualisierung die Ereignisprozedur aus Listing 2 hinzu.

Private Sub cboDiagrammtyp_AfterUpdate()
     Dim objChart As Chart
     Set objChart = Me!ctlChart.Object
     objChart.ChartType = Me!cboDiagrammtyp
End Sub

Listing 2: Prozedur zum Ändern des Diagrammtyps

Diese stellt die Eigenschaft ChartType auf den im Kombinationsfeld ausgewählten Wert ein. Auf diese Weise können Sie sich schnell die verschiedenen Typen ansehen.

Position der Beschriftung

Neben der ersten Schaltfläche fügen wir noch zwei weitere Schaltflächen hinzu, mit denen wir die Beschriftung des Diagramms schrittweise nach links oder rechts bewegen.

Für diese beiden Schaltflächen hinterlegen wir die folgenden Prozeduren:

Private Sub cmdTitelNachLinks_Click()
     ...
     objChart.ChartTitle.Left = objChart.ChartTitle.Left - 10
End Sub
Private Sub cmdTitelNachRechts_Click()
     ...
     objChart.ChartTitle.Left = objChart.ChartTitle.Left + 10
End Sub

Die erste verschiebt das Objekt mit der Beschriftung um zehn Schritte gegenüber der vorherigen Position nach links, die zweite verschiebt es nach rechts.

Legende bearbeiten

In manchen Diagrammen ist eine Legende sinnvoll, in anderen nicht.

Daher schauen wir uns zunächst an, wie Sie die Legende ein- und ausblenden können. Dazu legen wir ein passendes Kontrollkästchen namens chkLegendeAnzeigen an.

Dieses füllen wir, genau wie das Textfeld txtTitel, von nun an direkt beim Öffnen des Formulars, genau genommen in der Ereignisprozedur Form_Load, mit der aktuellen Einstellung des Chart-Objekts. Die Prozedur finden Sie in Listing 3.

Private Sub Form_Load()
     Dim objChart As Chart
     Set objChart = Me!ctlChart.Object
     Me!txtTitel = objChart.ChartTitle.Caption
     Me!chkLegendeAnzeigen = objChart.HasLegend
End Sub

Listing 3: Einlesen einiger Chart-Eigenschaften

Das Kontrollkästchen chkLegende statten wir mit einer Prozedur aus, die durch das Ereignis Nach Aktualisierung ausgelöst wird:

Private Sub chkLegendeAnzeigen_Click()
     Dim objChart As Chart
     Set objChart = Me!ctlChart.Object
     objChart.HasLegend = Me!chkLegendeAnzeigen
End Sub

Mit dieser Prozedur können Sie durch einen einfachen Klick auf das Kontrollkästchen die Legende ein- und ausschalten – siehe Bild 9.

Ein- und Ausblenden der Legende des Chart-Objekts per Kombinationsfeld

Bild 9: Ein- und Ausblenden der Legende des Chart-Objekts per Kombinationsfeld

Weitere Eigenschaften der Legende

Das Legend-Objekt bietet noch weitere Eigenschaften:

  • Border: Liefert Eigenschaften zum Einstellen des Rahmens
  • Fill: Objekt, mit dem Sie weitere Eigenschaften bezüglich des Aussehens festlegen können
  • Font: Liefert alle notwendigen Eigenschaften zum Einstellen der Schriftart
  • Height, Width: Höhe und Breite der Legende
  • Interior: Legt die Eigenschaften des Hintergrunds fest.
  • Left, Top: Position der Legende
  • Name: Name des Objekts
  • Parent: Verweis auf das übergeordnete Objekt
  • Position: Bestimmt die Position der Legende – Konstanten siehe unten
  • Shadow: Aktiviert oder deaktiviert einen Schatten.

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zahlenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Aktuell im Blog
Onlinebanking mit Access

Es ist geschafft: Endlich ist das Buch Onlinebanking mit Access fertiggeschrieben. Das war... [mehr]

Direktzugriff auf Tabellen und Felder

Die IntelliSense-Erweiterung für Tabellen und Felder hat mir soviel Spaß gemacht, dass ich gleich... [mehr]

IntelliSense für Tabellen und Felder

Wenn Sie mit dem VBA-Editor arbeiten und dort gelegentlich SQL-Anweisungen eingeben, müssen Sie... [mehr]

Download Access und SQL Server

Erfahren Sie, welche Schritte zum Download des aktuellen Stands des Buchs "Access und SQL Server"... [mehr]

Bilder in Access 2013

Wer die Bibliothek mdlOGL0710 von Sascha Trowitzsch oder ein ähnliches Modul aus meinen... [mehr]

Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit... [mehr]

Die Blogmaschine

Einen kleinen Blog zusätzlich zum Shop zu betreiben ist eine tolle Sache. Hier lassen sich... [mehr]

Wegwerfadressen für die Newsletteranmeldung

Die Verwendung von Wegwerf-Adressen für die Nutzung aller möglichen Online-Dienste nimmt... [mehr]

Access und Facebook

Facebook und Access - das ist eine der wenigen Kombinationen, die ich noch nicht in die Mangel... [mehr]

Access und SQL Server - das Projekt

Mein neues Buch Access und SQL Server (gemeinsam mit Bernd Jungbluth) geht in die Endphase. Wer... [mehr]