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 Entwurf|Steuerelemente|Diagramm zu finden). Nach dem Platzieren des Steuerelements im Formular erscheint wie in Bild 1 der Diagramm-Assistent, der Ihnen beim Einrichten des Diagramms hilft.
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.
Bild 2: Einstellen der Daten für das DiagrammDas 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.
Bild 3: Erste Version des DiagrammsVerweis 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.
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.
Bild 5: Chart-Objekt mit geändertem TitelDie 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.
Bild 6: Diagrammtyp-Enumeration per VBAWenn 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).
Bild 7: Tabellen mit den DiagrammtypenDiese 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:
Bild 8: Auswahl von DiagrammtypenSELECT 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.
Bild 9: Ein- und Ausblenden der Legende des Chart-Objekts per KombinationsfeldWeitere 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.