Wenn’s nicht mehr MSGraph ist – und das alte Steuerelement fehlt
Früher hattest Du das „Microsoft Graph“-Diagramm.
Einfügen, doppelklicken, fertig.
Heute gibt’s das nicht mehr überall.
Und wenn Du moderne Diagramm-Steuerelemente per VBA füttern willst,
brauchst Du neue Tricks.
Ich zeig Dir, wie ich das mache – direkt und dynamisch.
Ausgangslage: Formular mit Diagramm-Steuerelement
Du hast ein Access-Formular (z. B. frmUmsatz
),
darauf ein modernes Diagramm (z. B. Diagramm1
),
und willst es dynamisch mit Daten füllen.
Nicht statisch. Nicht gebunden.
Sondern aus VBA heraus – sauber, per Recordset.
Diagramm vorbereiten
- Diagramm einfügen: „Modernes Diagramm“
- Typ wählen (z. B. Balken, Linie, Kreis)
- Datenbindung entfernen
- Diagrammname setzen (z. B.
ctlChartUmsatz
)
Dann geht’s los im Code.
Beispiel 1: Einfacher Recordset als Datenquelle
Private Sub Formular_Aktivieren()
Call DiagrammAktualisieren
End Sub
Private Sub DiagrammAktualisieren()
Dim rs As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT Monat, Umsatz FROM qryUmsatzMonat"
Set rs = CurrentDb.OpenRecordset(strSQL)
With Me!ctlChartUmsatz
.RowSourceType = "Table/Query"
.RowSource = strSQL
.Requery
End With
rs.Close
Set rs = Nothing
End Sub
Wichtig: Das Diagramm braucht einen SQL-String oder Tabellenname als RowSource
.
Direktes Füttern mit Array? Geht nicht.
Beispiel 2: Dynamisch per VBA-SQL zusammensetzen
Du willst nach Jahr oder Kunde filtern?
Private Sub cmbJahr_AfterUpdate()
Call DiagrammNachJahr(Me!cmbJahr)
End Sub
Private Sub DiagrammNachJahr(intJahr As Integer)
Dim strSQL As String
strSQL = "SELECT Monat, SUM(Umsatz) AS Gesamt " & _
"FROM tblUmsaetze " & _
"WHERE Jahr = " & intJahr & " " & _
"GROUP BY Monat"
With Me!ctlChartUmsatz
.RowSource = strSQL
.Requery
End With
End Sub
Funktioniert auch mit Kombis aus mehreren Feldern.
Aber: Spaltennamen müssen genau passen zur Achsenkonfiguration.
Diagramm anpassen per VBA
Wenn Du das Aussehen steuern willst (z. B. Farben, Legenden),
musst Du das per Benutzeroberfläche vordefinieren.
Die neuen Diagramm-Steuerelemente sind nicht COM-gesteuert.
Du hast keinen Zugriff auf Achsen, Farben, Legende über VBA.
Nur die Datenquelle kannst Du dynamisch setzen.
Der Rest bleibt starr.
Alternativ: Diagramm per Excel erzeugen
Wenn Du volle Kontrolle willst – dann nimm Excel.
Erzeuge Diagramme im Hintergrund und zeig sie in Access als Bild an.
Beispiel:
Dim xlApp As Object
Dim xlWB As Object
Dim xlChart As Object
Set xlApp = CreateObject("Excel.Application")
Set xlWB = xlApp.Workbooks.Add
Set xlChart = xlWB.Charts.Add
' Daten einfügen
xlWB.Sheets(1).Cells(1, 1).Value = "Monat"
xlWB.Sheets(1).Cells(1, 2).Value = "Umsatz"
xlWB.Sheets(1).Cells(2, 1).Value = "Januar"
xlWB.Sheets(1).Cells(2, 2).Value = 10000
' ...
' Diagramm erstellen
With xlChart
.ChartType = 51 ' xlColumnClustered
.SetSourceData xlWB.Sheets(1).Range("A1:B2")
.Export "C:\temp\diagramm.png", "PNG"
End With
' In Access anzeigen
Me!imgChart.Picture = "C:\temp\diagramm.png"
xlWB.Close False
xlApp.Quit
Set xlChart = Nothing
Set xlWB = Nothing
Set xlApp = Nothing
Damit kannst Du alles steuern – Farben, Achsen, Format.
Aber Du brauchst Excel auf dem Client.
Tabelle: Vergleich Diagrammarten in Access
Diagrammtyp | Datenbindung über VBA | Formatierung per Code | Flexibilität | Performance |
---|---|---|---|---|
Modernes Access-Diagramm | ✅ SQL / Query | ❌ nur manuell | mittel | gut |
Klassisches MSGraph | ⚠️ nicht mehr überall | ✅ COM-gesteuert | hoch | veraltet |
Excel-Diagramm via VBA | ✅ komplett | ✅ voll steuerbar | sehr hoch | langsamer |
Mein Setup für diagrammgestützte Access-Formulare
Einsatz | Lösung |
---|---|
Statisches Reporting | Modernes Diagramm mit gespeicherter Abfrage |
Filterbare Übersicht | SQL via VBA in .RowSource setzen |
Flexible Darstellung | Excel-Diagramm mit Export als Bild |
Interaktive Analyse | Power BI via Embedded oder Link |
Diagramme sehen einfach aus – aber dynamisch sind sie zickig.
Mit ein bisschen SQL und einem Requery bekommst Du’s sauber hin.
Und wenn Du mehr brauchst: Excel kann helfen.
Access zeigt’s Dir dann – ohne Drama.
No responses yet