Microsoft Access ist eine leistungsstarke Plattform für die Verwaltung und Analyse von Daten. Eine ihrer Stärken liegt in der Fähigkeit, komplexe Daten in übersichtlichen Berichten und Formularen darzustellen. Diagramme spielen hierbei eine zentrale Rolle, um Trends, Verteilungen und Vergleiche auf einen Blick sichtbar zu machen. Doch oft reicht die Standardfunktionalität der Diagramm-Assistenten nicht aus, um wirklich dynamische, interaktive oder spezifisch formatierte Diagramme zu erstellen. Genau hier setzt die „Access-Trickkiste” an: Wir zeigen Ihnen, wie Sie das Steuerelement eines Diagramms in Access gezielt abgreifen und über VBA feinste Anpassungen vornehmen können. Bereiten Sie sich darauf vor, Ihre Access-Diagramme auf ein völlig neues Niveau zu heben!
Für viele Access-Benutzer ist ein Diagramm einfach ein Objekt, das Daten visualisiert. Sie ziehen es auf ein Formular oder einen Bericht, binden es an eine Datenquelle und lassen Access den Rest erledigen. Und das funktioniert auch hervorragend – bis zu dem Punkt, an dem Sie etwas Spezifisches ändern möchten, das im Eigenschaftsfenster nicht direkt verfügbar ist: die Farbe eines einzelnen Datenpunkts, die dynamische Anpassung einer Achsenskala basierend auf externen Werten oder das Ändern des Diagrammtyps auf Knopfdruck. Hier wird es knifflig, denn das sichtbare Diagramm-Steuerelement in Access ist eigentlich nur ein „Container” für ein tiefer liegendes Microsoft Office Chart-Objekt. Der Schlüssel zum Erfolg liegt darin, diesen Container zu öffnen und direkt mit dem darin enthaltenen Diagramm zu kommunizieren.
Grundlagen – Das Diagramm-Steuerelement in Access verstehen
Bevor wir uns ins Eingemachte stürzen, lassen Sie uns die grundlegende Struktur klären. Wenn Sie in Access ein Diagramm zu einem Formular oder Bericht hinzufügen, verwenden Sie in der Regel das Diagramm-Steuerelement aus der Steuerelement-Toolbox. Dieses Steuerelement ist, technisch gesehen, ein ActiveX-Steuerelement. Es fungiert als Hülle für das eigentliche Diagramm, das im Hintergrund von der Microsoft Office Chart-Engine (manchmal auch als MSGraph bezeichnet, abhängig von der Office-Version) gerendert wird. Dieses Design ermöglicht es Access, die leistungsstarke Diagrammfunktionalität von Office zu nutzen, ohne sie komplett neu implementieren zu müssen.
Im Eigenschaftenfenster des Diagramm-Steuerelements in Access finden Sie bekannte Eigenschaften wie „Steuerelementquelle” (RowSource), „Diagrammtyp” (ChartType) und grundlegende Formatierungsoptionen. Diese Eigenschaften sind bequem, aber auch begrenzt. Sie steuern die allgemeinen Aspekte des Diagramms. Um jedoch in die Tiefe zu gehen und beispielsweise einzelne Datenreihen, Achsenbeschriftungen, Legendenpositionen oder sogar das Verhalten bei Mausklicks auf dem Diagramm selbst zu beeinflussen, müssen wir das „innere” Diagrammobjekt direkt ansprechen.
Der Schlüssel zur Manipulation – Die `Object`-Eigenschaft
Der zentrale Dreh- und Angelpunkt, um das eigentliche Microsoft Office Chart-Objekt zu erreichen, ist die `Object`-Eigenschaft des Access-Diagramm-Steuerelements. Jedes OLE-Objekt (und dazu gehören die Diagramm-Steuerelemente) in Access verfügt über diese Eigenschaft. Sie gibt eine Referenz auf das externe Objekt zurück, das im Steuerelement eingebettet oder verknüpft ist.
Die Syntax ist erstaunlich einfach:
Set objMeinChart = Me!IhrDiagrammSteuerelementName.Object
Nachdem Sie diese Zeile ausgeführt haben, ist `objMeinChart` nicht mehr das Access-Steuerelement selbst, sondern das eigentliche Microsoft Office Chart-Objekt. Von diesem Zeitpunkt an können Sie auf die gesamte Objektmodell-Hierarchie des Office-Diagramms zugreifen, genau wie Sie es vielleicht aus Excel VBA kennen würden. Dies öffnet die Tür zu einer nahezu unbegrenzten Anpassung.
Ein wichtiger Hinweis: Stellen Sie sicher, dass in Ihrem VBA-Projekt die entsprechende Referenz aktiviert ist. Meistens ist dies die „Microsoft Office XX.X Object Library” (wobei XX.X Ihre Office-Version angibt). Ohne diese Referenz ist VBA nicht in der Lage, die Typbibliothek des Diagrammobjekts zu verstehen und würde Fehler wie „Benutzerdefinierter Typ nicht definiert” oder „Methode oder Datenobjekt nicht gefunden” ausgeben.
Das Diagramm-Objektmodell erkunden
Sobald Sie Zugriff auf das Chart-Objekt haben (`objMeinChart`), können Sie dessen reiches Objektmodell nutzen. Dieses Modell ist hierarchisch aufgebaut und ermöglicht es Ihnen, auf spezifische Teile des Diagramms zuzugreifen. Hier sind einige der wichtigsten Objekte, auf die Sie stoßen werden:
- `Chart`: Das oberste Objekt, das das gesamte Diagramm repräsentiert.
- `SeriesCollection`: Eine Auflistung aller Datenreihen im Diagramm.
- `Series`: Eine einzelne Datenreihe.
- `Point`: Ein einzelner Datenpunkt innerhalb einer Reihe.
- `Axis`: Eine Achse des Diagramms (Kategorieachse, Werteachse, etc.).
- `ChartArea`: Der gesamte Bereich des Diagramms, einschließlich Titel, Legende und PlotArea.
- `PlotArea`: Der Bereich, in dem die Datenpunkte tatsächlich gezeichnet werden.
- `Legend`: Die Legende des Diagramms.
- `Title`: Der Titel des Diagramms.
- `DataLabel`: Eine Beschriftung für einen Datenpunkt oder eine Reihe.
Die beste Methode, dieses Objektmodell zu erkunden, ist der Objektkatalog (Object Browser) in der VBA-Entwicklungsumgebung (Alt+F11, dann F2). Wählen Sie im Dropdown-Menü die „Microsoft Office XX.X Object Library” (oder „Microsoft Graph XX.X Object Library”) aus und suchen Sie nach dem `Chart`-Objekt. Sie werden eine Fülle von Eigenschaften, Methoden und Ereignissen entdecken, die alle auf Ihre Manipulation warten.
Praktische Anwendungsbeispiele – Wie Sie das Diagramm gezielt abgreifen und anpassen
Lassen Sie uns nun einige konkrete Beispiele durchgehen, wie Sie das Gelernte anwenden können. Nehmen wir an, Ihr Access-Diagramm-Steuerelement heißt „MeinDiagramm”.
Beispiel 1: Dynamisches Ändern des Diagrammtyps
Stellen Sie sich vor, Sie möchten dem Benutzer die Möglichkeit geben, zwischen einem Säulendiagramm und einem Liniendiagramm zu wechseln. Das lässt sich einfach über die `ChartType`-Eigenschaft des `Chart`-Objekts realisieren:
Private Sub cmdDiagrammTypWechseln_Click()
Dim objChart As Object
Set objChart = Me!MeinDiagramm.Object
If objChart.ChartType = xlColumnClustered Then
objChart.ChartType = xlLine
Else
objChart.ChartType = xlColumnClustered
End If
Set objChart = Nothing
End Sub
Hier verwenden wir die integrierten Konstanten aus dem Office-Objektmodell (z.B. `xlColumnClustered` für ein gruppiertes Säulendiagramm, `xlLine` für ein Liniendiagramm). Im Objektkatalog finden Sie eine lange Liste weiterer `xlChartType`-Konstanten für alle erdenklichen Diagrammtypen.
Beispiel 2: Anpassen von Reihen und Datenpunkten
Sie möchten eine bestimmte Datenreihe hervorheben oder die Farbe einzelner Datenpunkte ändern, basierend auf einem Schwellenwert?
Private Sub btnFarbeAnpassen_Click()
Dim objChart As Object
Dim objSeries As Object
Dim i As Long
Set objChart = Me!MeinDiagramm.Object
' Die erste Datenreihe ansprechen (Index 1)
Set objSeries = objChart.SeriesCollection(1)
' Farbe der gesamten Reihe ändern (z.B. auf Rot)
objSeries.Interior.Color = RGB(255, 0, 0) ' Rot
' Beispiel: Einzelne Datenpunkte basierend auf Wert einfärben
For i = 1 To objSeries.Points.Count
If objSeries.Points(i).Value > 100 Then
objSeries.Points(i).Interior.Color = RGB(0, 0, 255) ' Blau für Werte > 100
' Datenbeschriftung hinzufügen
objSeries.Points(i).ApplyDataLabels Type:=xlDataLabelsShowValue
Else
objSeries.Points(i).Interior.Color = RGB(0, 255, 0) ' Grün für Werte <= 100
End If
Next i
Set objSeries = Nothing
Set objChart = Nothing
End Sub
Dieses Beispiel demonstriert die Macht des Zugriffs auf `SeriesCollection` und `Points`. Sie können nicht nur Farben, sondern auch Muster, Rahmen, Schatten und vieles mehr anpassen.
Beispiel 3: Achsenformatierung und Beschriftung
Oftmals müssen Achsen skaliert oder beschriftet werden, um die Lesbarkeit zu verbessern oder einen bestimmten Fokus zu legen.
Private Sub btnAchsenAnpassen_Click()
Dim objChart As Object
Set objChart = Me!MeinDiagramm.Object
With objChart.Axes(xlValue) ' Werteachse (Y-Achse) ansprechen
.HasTitle = True
.AxisTitle.Text = "Umsatz in Euro"
.AxisTitle.Font.Size = 12
.MinimumScale = 0 ' Mindestwert der Achse setzen
.MaximumScale = 2000 ' Maximalwert der Achse setzen
.MajorUnit = 500 ' Hauptintervalle
.MinorUnit = 100 ' Nebenintervalle
.TickLabels.Font.Name = "Arial"
.TickLabels.NumberFormat = "#,##0.00 €" ' Zahlenformatierung
End With
With objChart.Axes(xlCategory) ' Kategorieachse (X-Achse) ansprechen
.HasTitle = True
.AxisTitle.Text = "Monat"
.TickLabels.Orientation = xlUpward ' Beschriftung drehen
End With
Set objChart = Nothing
End Sub
Mit den `Axes`-Objekten und deren Eigenschaften haben Sie volle Kontrolle über die Darstellung der Achsen, von Titeln über Skalierung bis hin zur Formatierung der Beschriftungen.
Beispiel 4: Legenden, Titel und Diagrammbereich anpassen
Auch die allgemeine Ästhetik des Diagramms lässt sich präzise steuern.
Private Sub btnAllgemeineAnpassung_Click()
Dim objChart As Object
Set objChart = Me!MeinDiagramm.Object
' Diagrammtitel anpassen
objChart.HasTitle = True
objChart.ChartTitle.Text = "Meine Dynamische Umsatzanalyse"
objChart.ChartTitle.Font.Bold = True
objChart.ChartTitle.Font.Size = 16
' Legende anpassen
objChart.HasLegend = True
objChart.Legend.Position = xlLegendPositionBottom ' Legende unten platzieren
objChart.Legend.Font.Italic = True
' Den gesamten Diagrammbereich formatieren
With objChart.ChartArea
.Interior.Color = RGB(240, 240, 240) ' Heller grauer Hintergrund
.Border.Color = RGB(150, 150, 150)
.Border.Weight = xlThick
End With
Set objChart = Nothing
End Sub
Diese Beispiele kratzen nur an der Oberfläche dessen, was mit dem Chart Object Model möglich ist. Die Möglichkeiten sind nahezu grenzenlos und erlauben es Ihnen, wirklich maßgeschneiderte Datenvisualisierungen zu erstellen.
Beispiel 5: Interaktion mit dem Diagramm (Ereignisse – fortgeschritten)
Ein besonders mächtiges, aber auch komplexeres Feature ist die Möglichkeit, auf Ereignisse zu reagieren, die *innerhalb* des Diagramms auftreten, z.B. wenn der Benutzer auf einen Datenpunkt klickt. Dies erfordert die Verwendung eines Klassenmoduls, um das `Chart`-Objekt mit der `WithEvents`-Anweisung zu deklarieren.
Kurz zur Idee:
1. Erstellen Sie ein Klassenmodul (z.B. `clsChartEvents`).
2. Deklarieren Sie darin `Public WithEvents myChart As Chart`.
3. Erstellen Sie im Klassenmodul Ereignisprozeduren für `myChart` (z.B. `Private Sub myChart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)`).
4. Instanziieren Sie dieses Klassenmodul in Ihrem Formular und weisen Sie `Me!MeinDiagramm.Object` der `myChart`-Variable zu.
Dies ist ein fortgeschrittenes Thema, das den Rahmen dieses Artikels sprengen würde, aber es zeigt, dass Sie auch auf Benutzerinteraktionen im Diagramm reagieren und dynamische Informationen bereitstellen können, z.B. Detaildaten zu einem geklickten Datenpunkt in einem separaten Textfeld anzeigen.
Häufige Fallstricke und Best Practices
Bei der Arbeit mit externen Objekten gibt es einige Dinge zu beachten:
- Fehlerbehandlung (`On Error`): Da Sie mit einem externen Objekt interagieren, können Fehler auftreten (z.B. wenn das Diagramm nicht geladen ist oder eine Eigenschaft nicht existiert). Implementieren Sie immer eine robuste Fehlerbehandlung (`On Error GoTo Fehlerbehandlung`).
- Referenzen aktivieren: Wie bereits erwähnt, stellen Sie sicher, dass die "Microsoft Office XX.X Object Library" oder "Microsoft Graph XX.X Object Library" in Ihrem VBA-Projekt (Extras > Verweise) aktiviert ist.
- Objektvariablen auf `Nothing` setzen: Nach der Verwendung von Objektvariablen setzen Sie diese immer auf `Nothing`, um Speicher freizugeben und mögliche Probleme zu vermeiden: `Set objMeinChart = Nothing`.
- Performance: Umfangreiche, wiederholte Manipulationen können die Performance beeinträchtigen. Versuchen Sie, Anpassungen zu bündeln und nur dann durchzuführen, wenn sie wirklich notwendig sind.
- Versionskompatibilität: Das Office Chart Object Model hat sich über die Jahre leicht verändert. Was in Office 2010 funktioniert, mag in Office 365/2019 leicht abweichen, auch wenn die Kernfunktionalität sehr stabil ist. Testen Sie Ihre Lösungen daher bei Versionswechseln.
- Datenquelle: Beachten Sie, dass Sie mit der `Object`-Eigenschaft primär die *Darstellung* des Diagramms manipulieren. Die zugrunde liegende Datenquelle (`RowSource`, `ChartData.SetSourceData`) wird davon getrennt behandelt und muss gegebenenfalls ebenfalls dynamisch angepasst werden, wenn sich die angezeigten Daten ändern sollen.
Zusammenfassung und Ausblick
Die Fähigkeit, das Steuerelement eines Diagramms in Access gezielt über seine `Object`-Eigenschaft anzusprechen, ist eine wahre Access-Trickkiste. Sie verwandelt ein scheinbar statisches Diagramm in ein dynamisches und vollständig anpassbares Visualisierungswerkzeug. Indem Sie das Chart Object Model meistern, können Sie:
- Diagrammtypen zur Laufzeit ändern.
- Einzelne Datenreihen oder Punkte hervorheben und formatieren.
- Achsen detailliert konfigurieren, inklusive Skalierung und Beschriftung.
- Titel, Legenden und den Hintergrund des Diagramms anpassen.
- Potenziell auf Benutzerinteraktionen innerhalb des Diagramms reagieren.
Diese erweiterten Möglichkeiten sind entscheidend für die Erstellung professioneller und benutzerfreundlicher Anwendungen in Access. Experimentieren Sie mit dem Objektkatalog, probieren Sie verschiedene Eigenschaften und Methoden aus und lassen Sie Ihrer Kreativität freien Lauf. Ihre Access-Diagramme werden es Ihnen danken!