Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1324to1328
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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>

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

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

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

Anzeige
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige