Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Diagramm formatieren mit VBA

Diagramm formatieren mit VBA
01.08.2013 12:53:19
Ralf
Hallo Forum,
ich möchte ein Diagramm mit VBA formatieren.
Der Grundcode stammt von Karin aka Beverly. Ich habe versucht diesen etwas zu erweitern. Zum Teil ist mir dies gelungen.
Wasjetzt nicht funktioniert ist die Formatierung für
- das Zahlenformat der Y-Achse
Ist es möglich das Zahlenformat als Textbeschreibung aus einer Zelle zu übernehmen? z. B. "#.##0,00" oder "#.##0" je nach Zellinhalt
- die Formatierung des Diagrammtitels
- die Formatierung der Diagrammfläche
- die Formatierung der Zeichnungsfläche
Könnte mir dabei bitte jemand helfen?
Vielen Dank im Voraus.
Viele Grüße
Ralf
<pre>Private Sub Worksheet_Change(ByVal Target As Range)
'durch Set ist eine Aktivierung des Diagramms nicht mehr nötig
Dim chDiagramm As Chart ' Variable für das Diagrammobjekt
'Prozedur verlassen wenn aktive Tabelle nicht Tabelle1 ist
If ActiveSheet.Name <> "Diagramm" Then Exit Sub
'Prozedur verlassen wenn keine numerischen Werte für Minimum und Maximum
If Not IsNumeric(Cells(10, 9)) Or Not IsNumeric(Cells(10, 10)) Then Exit Sub
'Prozedur verlassen wenn Maximum kleiner als Minimum
If Cells(10, 9) < Cells(10, 9) Then Exit Sub
'Falls das Diagramm aktiviert ist, zur Sprungmarke Ende gehen
On Error GoTo Ende
'Diagramm 1 der Variablen zuweisen
Set chDiagramm = Worksheets("Diagramm").ChartObjects("Diagramm 1").Chart
'Category (Y) Axis
With chDiagramm.Axes(xlValue)
.MaximumScale = Cells(10, 9)
.MinimumScale = Cells(10, 10)
.MajorUnit = Cells(10, 11)
.MinorUnit = Cells(10, 12)
.MajorTickMark = xlOutside
.MinorTickMark = xlOutside
.HasMajorGridlines = True
.HasMinorGridlines = False
'.Selection.TickLabels.NumberFormat = "#.##0,00"
End With
'Category (X) Axis
With chDiagramm.Axes(xlCategory)
.MinimumScale = Cells(6, 5)
.MaximumScale = Cells(6, 6)
.MajorUnit = "10"
.MinorUnit = "5"
.MajorTickMark = xlOutside
.MinorTickMark = xlOutside
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
'Formatierung Diagrammtitel
If chDiagramm.HasTitle = True Then
With Title.Format.TextFrame2.TextRange.Font
.Name = "Arial"
.Bold = True
.Size = 14
End With
End If
'Formatierung Legende
If chDiagramm.HasLegend = True Then
With Legend.Format.TextFrame2.TextRange.Font
.Name = "Arial"
.Size = 10
End With
End If
'Formatierung Diagrammfläche
With chDiagramm.ChartArea.Format
With .Fill
.ForeColor.RGB = RGB(255, 255, 255) 'weiß
End With
With .Line
.Visible = msoTrue
.DashStyle = msoLineSolid
.Weight = 0
.ForeColor.RGB = RGB(255, 255, 255) 'weiß
End With
End With
'Formatierung Zeichnungsfläche
With chDiagramm.PlotArea.Format
With .Fill
.Visible = msoFalse
.ForeColor.RGB = RGB(255, 255, 255) 'weiß
End With
With .Line
.Visible = msoFalse '=msoTrue wenn Linie angezeigt werden soll
.DashStyle = msoLineSolid
.Weight = 1
.ForeColor.RGB = RGB(127, 127, 127) 'weiß, Hintergrund 1, dunkler 50%
End With
End With
Ende:
' Variable leeren
Set chDiagramm = Nothing
End Sub</pre>

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm formatieren mit VBA
02.08.2013 03:13:35
fcs
Hallo Ralf,
da waren noch ein paar Syntax- und ein Logikfehler drin.
Wenn man schon Prüfungen von Eingabewerten macht, dann sollte auch eine Meldung erscheinen, dass etwas nicht stimmt.
On Error Goto Ende
Diese Zeile hat dafür gesorgt, dass du nicht mehr erkennen konntest wo noch Fehler sind.
Hierzu sollte nach der Sprungadresse zumindest eine Fehlermeldung angezeigt werden.
Diese Zeile sollte erst eingefügt werden, wenn man alles getestet hat.
Wasjetzt nicht funktioniert ist die Formatierung für
- das Zahlenformat der Y-Achse
Ist es möglich das Zahlenformat als Textbeschreibung aus einer Zelle zu übernehmen? z. B. "#.##0,00" oder "#.##0" je nach Zellinhalt

Ja, du muss das Format aber in der US-Schreibweise angeben - Dezimalzeichen = Punkt, 1000er-Zeichen = Komma (z. B. "#,##0.00" oder "#,##0")
- die Formatierung des Diagrammtitels -
Das entsprechende Diagramm-Objekt heißt "ChartTitle" nicht "Title"

- die Formatierung der Diagrammfläche
- die Formatierung der Zeichnungsfläche

Für diese beiden Elemente sind die Anweisungen korrekt. Du hattest bei der Legende aber auch noch einen Fehler, so dass nach Ende gesprungen wurde.
nachfolgend das korrigierte Makro.
Ein paar Problemen kann man auch vorbeugen, indem man
Option Explicit
als erste Zeile in jedem Modul einfügt bzw. die entsprechende Option im VBA-Editor so einstellt, das dies automatisch erfolgt.
Gruß
Franz
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'durch Set ist eine Aktivierung des Diagramms nicht mehr nötig
Dim chDiagramm As Chart ' Variable für das Diagrammobjekt
'Prozedur verlassen wenn aktive Tabelle nicht Tabelle1 ist
If ActiveSheet.Name  "Diagramm" Then Exit Sub
'Prozedur verlassen wenn keine numerischen Werte für Minimum und Maximum
If Not IsNumeric(Cells(10, 9)) Or Not IsNumeric(Cells(10, 10)) Then
MsgBox "Nur nummerische Werte sind für Min- und Max-Wert zulässig!"
Exit Sub                                                    'geändert
End If
'Prozedur verlassen wenn Maximum kleiner als Minimum
If Cells(10, 9)  0 Then
MsgBox "Fehler-Nr: " & Err.Number & vbLf & Err.Description, _
vbInformation + vbOKOnly, _
"Fehler im Makro ""Worksheet_Change"""
End If
' Variable leeren
Set chDiagramm = Nothing
End Sub

Anzeige
AW: Diagramm formatieren mit VBA
02.08.2013 06:57:09
Ralf
Hallo Franz,
vielen Dank für die umfangreiche Analyse.
Was nicht funktioniert ist das Zahlenformat der y-Achse. Ich habe die Formatierung auf amerikanisch umgeschrieben. Leider ohne Erfolg.
Außereem soll der Text im Diagrammtitel aus der Zelle B4 übernommen werden. Der Bezug wird immer wieder gelöscht.
Ich habe es mit
.Text = Cells(4, 2)
.Title = Cells(4, 2)
.ChartTitle = Cells(4, 2)
probiert, leider ohne Erfolg.
Kannst Du mir bei den 2 Punkten nochmals helfen?
Viele Grüße
Ralf

Anzeige
AW: Diagramm formatieren mit VBA
02.08.2013 09:53:21
fcs
Hallo Ralf,
die Zahlenformatierung der Y-Achse habe ich wie folgt einrichtet:
Tabellenblattname: Diagramm
H            I               J             K            L             M
9  Y-Achse   Scale-Maximum   Scale-Minimum   major Unit   minor Unit   Numberformat
10                    50000           10000        10000         2000           #,#0
Benutzte Formeln:
M10:  =WENN(I10

Du kannst natürlich auch das entsprechende Format direkt in die Zelle screiben.
Alternativ könntest du auch eine Zahl z.B. 1000 in M10 eintragen und das gewünschte Zahlenformat einstellen.
Dann muss die Code-Zeile zum Ändern des Achsenformats angepasst werden.
  .TickLabels.NumberFormat = Cells(10, 13).NumberFormat                'geändert
Allerding reagiert das Makro nicht auf die Formatänderung. Also hier erst Format ändern, dann einen der anderen Werte.
Beim Diagrammtitel hast du nicht die korrekte Objektebene erwischt.
'Formatierung Diagrammtitel
If chDiagramm.HasTitle = True Then
With chDiagramm.ChartTitle.Format.TextFrame2.TextRange
.Text = Cells(4, 2).Text
With .Font
.Name = "Arial"
.Bold = True
.Size = 14
End With
End With
End If

Gruß
Franz

Anzeige
AW: Diagramm formatieren mit VBA
02.08.2013 11:24:31
Ralf
Hallo Franz,
die Formatierung des Diagrammtitels funktioniert jetzt.
Die Aktion mit variablem Zahlenformat an der y-Achse hingegen geht immer noch nicht.
Es ist egal, ob ich das Zahlenformat von einem anderem Tabellenblatt mit einer Formel rüberkopiere, oder ich diesen zum Test händisch eingebe. Das Format wird nicht auf der y-Achse geändert. Ich habe das zahlenformat auf der y-Achse auf Benutzerdefiniert umgestellt. Auch das bringt nichts.
Woran kann es noch liegen?
Viele Grüße
Ralf

Anzeige
AW: Diagramm formatieren mit VBA
02.08.2013 12:25:34
fcs
Hallo Ralf,
woran es jetzt noch liegen kann weiss ich nicht, denn bei mir funktioniert es.
Hier meine Testdatei mit deinem Makro.
https://www.herber.de/bbs/user/86688.xlsm
Gruß
Franz

AW: Diagramm formatieren mit VBA
02.08.2013 11:55:37
Ralf
Hallo Franz,
ich habe es durch probieren selbst heraus gefunden.
.TickLabels.NumberFormat = Cells(12, 12).Text
muss es heißen.
Jetzt passt es.
Vielen Dank für Deine Unterstützung.
Viele Grüße
Ralf
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Diagramm formatieren mit VBA


Schritt-für-Schritt-Anleitung

Um ein Diagramm in Excel mit VBA zu formatieren, befolge die nachstehenden Schritte:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)", gehe zu Einfügen und wähle Modul.
  3. Code einfügen: Kopiere den folgenden Code in das Modul:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim chDiagramm As Chart ' Variable für das Diagrammobjekt
    If ActiveSheet.Name <> "Diagramm" Then Exit Sub
    If Not IsNumeric(Cells(10, 9)) Or Not IsNumeric(Cells(10, 10)) Then
        MsgBox "Nur nummerische Werte sind für Min- und Max-Wert zulässig!"
        Exit Sub
    End If
    Set chDiagramm = Worksheets("Diagramm").ChartObjects("Diagramm 1").Chart
    With chDiagramm.Axes(xlValue)
        .TickLabels.NumberFormat = Cells(10, 13).Text
    End With
    If chDiagramm.HasTitle Then
        With chDiagramm.ChartTitle.Format.TextFrame2.TextRange
            .Text = Cells(4, 2).Text
            With .Font
                .Name = "Arial"
                .Bold = True
                .Size = 14
            End With
        End With
    End If
End Sub
  1. Diagramm erstellen: Stelle sicher, dass du ein Diagramm mit dem Namen "Diagramm 1" auf einem Arbeitsblatt mit dem Namen "Diagramm" hast.
  2. Zellen anpassen: Stelle sicher, dass die Zellen für Maximal- und Minimalwerte sowie die Achsenbeschriftungen korrekt ausgefüllt sind.
  3. Code ausführen: Ändere Werte in den definierten Zellen, um die Formatierung zu testen.

Häufige Fehler und Lösungen

  • Zahlenformat der Y-Achse wird nicht übernommen: Stelle sicher, dass du das Zahlenformat in der US-Schreibweise angibst, z.B. "#,##0.00".

  • Diagrammtitel wird nicht gesetzt: Überprüfe, ob du auf das richtige Objekt zugreifst. Der Diagrammtitel sollte über chDiagramm.ChartTitle angesprochen werden.

  • Fehlermeldungen nicht sichtbar: Achte darauf, dass du die On Error-Anweisungen richtig verwendest. Füge Meldungen hinzu, um Fehler zu identifizieren.


Alternative Methoden

  • Direkte Zuweisung: Du kannst das Diagramm auch manuell über die Benutzeroberfläche formatieren, anstatt VBA zu verwenden. Wähle das Diagramm aus und nutze die Formatierungsoptionen im Ribbon.

  • Diagramm formatieren mit Excel-Funktionen: Nutze die Excel-Funktionen, um Werte für Diagramme zu generieren und diese anschließend mit VBA zu formatieren, z.B. =WENN(..., ...)-Formeln für dynamische Werte.


Praktische Beispiele

  1. Diagramm mit kumulierten Werten: Verwende die Funktion =SUMME(...), um kumulierte Werte zu berechnen und sie in das Diagramm zu integrieren.

  2. Achsenbeschriftung formatieren: Du kannst die Achsenbeschriftungen mithilfe des Codes wie folgt formatieren:

With chDiagramm.Axes(xlCategory)
    .HasTitle = True
    .AxisTitle.Text = "Deine Achsenbezeichnung"
End With

Tipps für Profis

  • Option Explicit verwenden: Füge Option Explicit am Anfang jedes Moduls hinzu, um sicherzustellen, dass alle Variablen deklariert werden und Fehler frühzeitig erkannt werden.

  • Debugging: Nutze den Debugger von VBA, um den Code Schritt für Schritt durchzugehen und Fehler zu identifizieren.

  • Formatierungsoptionen anpassen: Experimentiere mit verschiedenen Formatierungsoptionen wie msoLineSolid für Linien und RGB für Farben, um dein Diagramm individuell zu gestalten.


FAQ: Häufige Fragen

1. Wie kann ich das Diagramm automatisch aktualisieren?
Stelle sicher, dass du den Code im Worksheet_Change-Ereignis platzierst, damit jede Änderung in den relevanten Zellen das Diagramm aktualisiert.

2. Kann ich auch andere Diagrammtypen formatieren?
Ja, der VBA-Code kann leicht angepasst werden, um verschiedene Diagrammtypen wie Balkendiagramme oder Kreisdiagramme zu formatieren. Achte darauf, die richtigen Methoden und Eigenschaften für den jeweiligen Diagrammtyp zu verwenden.

3. Wie formatiere ich die Achsenbeschriftungen?
Verwende die Axes-Eigenschaft des Diagramms, um die Achsenbeschriftungen zu formatieren. Zum Beispiel: chDiagramm.Axes(xlValue).HasTitle = True.

4. Was mache ich, wenn mein Code nicht funktioniert?
Überprüfe die Syntax und stelle sicher, dass alle Objekte korrekt referenziert werden. Nutze Debugging, um die Fehlerursache zu finden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige