Excel 07 viele Diagramme gleich formatieren

liebe Wissende,
ich habe in einem Excel file mit einer grösseren (>40) Anzahl an (gleichen) Diagrammen. Sie beziehen sich jeweils nur auf andere Daten. Ich möchte nun diese alle gleich formatieren (die Eine Achse auf Logarithmisch stellen, die Beschriftung ausblenden, Höhe und Breite je auf einen festen Wert setzen). Ich habe nun gelesen, dass man das mit Makros aufnehmen kann, und diese auf die verschiedenen Diagramme anwenden kann. Ich habe nun das mal versucht, aber ich schaffe es nicht, das Makro auf ein anderes Diagramm anzuwenden, es sieht bisher so aus:

Sub test2()
'
' test2 Makro
'

'
 ActiveSheet.ChartObjects("Diagramm 4").Activate
 ActiveChart.Axes(xlValue).Select
 ActiveSheet.ChartObjects("Diagramm 4").Activate
 ActiveChart.Axes(xlValue).ScaleType = xlLogarithmic
 ActiveChart.Axes(xlValue).MinimumScale = 1
 ActiveSheet.ChartObjects("Diagramm 4").Activate
 ActiveChart.Legend.Select
 ActiveSheet.ChartObjects("Diagramm 4").Activate
 ActiveChart.Legend.LegendEntries(1).Select
 Selection.Delete
 ActiveSheet.ChartObjects("Diagramm 4").Activate
 ActiveChart.SeriesCollection(1).Select
 Selection.Delete
End Sub

(Hier sind nicht alle änderungen aufgeführt die ich gerne hätte.)
Ich habe dann versucht mit einer For schleife jeweils den ganzen Code mehrere Male durchlaufen zu lassen und dann einfach den String „Diagramm 4“ jeweils auf alle vorkommenden nummern Anzupassen.
kann mir jemand einen Tipp geben, wie ich all diese Diagramme wie Beschrieben formatieren kann?
lg niemand

ich habe in einem Excel file mit einer grösseren (>40) Anzahl
an (gleichen) Diagrammen. Sie beziehen sich jeweils nur auf
andere Daten. Ich möchte nun diese alle gleich formatieren
(die Eine Achse auf Logarithmisch stellen, die Beschriftung
ausblenden, Höhe und Breite je auf einen festen Wert setzen).

Hallo Niemand,

nachfolgender Code ist ungetestet, also an Tabellenkopie testen.

Sub test2()
Dim Diag
For Each Diag In ActiveSheet.ChartObjects
 With Diag
 .Axes(xlValue).ScaleType = xlLogarithmic
 .Axes(xlValue).MinimumScale = 1
 .Legend.LegendEntries(1).Delete
 .SeriesCollection(1).Delete
 End With
End Sub

Gruß
Reinhard

hi
herzlichen dank für den code erstmal!
nun funktioniert der auch nicht wie er sollte, ich habe zwei kleine dinge verändert:

  1. das ende der forschleife (next) hat gefehlt

  2. die ersten beiden befehle (minimumscale=1 und scaletype 0xllogarithmic) habe ich vertauscht, da sonst die fehlermeldung gekommmen wäre, dass der wert 0 nicht vorkommen dürfe (desshalb zuerst das minimum auf 1 gesetzt))

    Sub test2()
    Dim Diag
    For Each Diag In ActiveSheet.ChartObjects
    With Diag
    .Axes(xlValue).MinimumScale = 1
    .Axes(xlValue).ScaleType = xlLogarithmic
    .Legend.LegendEntries(1).Delete
    .SeriesCollection(1).Delete
    End With
    Next
    End Sub

nun kommt aber die fehlermeldung:

Laufzeitfehler '438':
Objekt unterstützt diese Eigenschaft oder Methode nicht.

und dann wird auf zeile 5 (.Axes(xlValue).MinimumScale = 1) verwiesen.
kann mir jemand sagen was das heisst/was ich ändern soll?
lg niemand

Grüezi Niemand

ich habe in einem Excel file mit einer grösseren (>40) Anzahl
an (gleichen) Diagrammen. Sie beziehen sich jeweils nur auf
andere Daten. Ich möchte nun diese alle gleich formatieren
(die Eine Achse auf Logarithmisch stellen, die Beschriftung
ausblenden, Höhe und Breite je auf einen festen Wert setzen).

Ich habe dann versucht mit einer For schleife jeweils den
ganzen Code mehrere Male durchlaufen zu lassen und dann
einfach den String „Diagramm 4“ jeweils auf alle vorkommenden
nummern Anzupassen.
kann mir jemand einen Tipp geben, wie ich all diese Diagramme
wie Beschrieben formatieren kann?

Erstelle und formatiere ein Diagramm nach deinen Wünschen.

Speichere dann dieses Diagramm als Benutzerdefiniertes Diagramm ab.
Weise dann den anderen Diagrammen dieses Muster als Format zu.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

vorlage
herzlichen dank für den tipp!
ich habe (excel 07) nun eine diagrammvorlage erstellt, ist das das was du gemeint hast?
es funktioniert nun, ich muss den diagrammtyp aber nun bei jedem einzelnen diagramm wieder frisch auswählen. gibt es eine möglichkeit, wie ich dies gerade für alle tun kann?
wenn ich mehrere auswähle verschwinden immer die schaltflächen, mit denen ich den diagrammtyp anpassen konnte.
lg niemand

Hallo Niemand,

  1. das ende der forschleife (next) hat gefehlt

okay, Fehler von mir.

  1. die ersten beiden befehle (minimumscale=1 und scaletype
    0xllogarithmic) habe ich vertauscht, da sonst die
    fehlermeldung gekommmen wäre, dass der wert 0 nicht vorkommen
    dürfe (desshalb zuerst das minimum auf 1 gesetzt))

Da taucht das Problem auf was bei makroaufzeichnung besteht. Ich habe so gut ichs konnte deinen aufgezeichneten Code in eine Schleife gepackt.
Nur ging ja dein aufgezeichneter Code von bestimmten vorhandnen Gegebenheiten aus.

Das heißt, wenn du ihn nochmals nach der Aufzeichnung startest, kann er schon krachen, eben weil was auch immer einen Tick anders ist als bei der Aufzeichnung.

Und da es die 0 bei logarithmischer Teilung nicht gibt, muß sich ja der Debugger melden wenn du erst auf Logarithmisch stellst und dann 0 als Startpunkt angibst oder umgekehrt.
Es sei denn Excel korrigiert das automatisch, und verändert die 0 zu 1 oder 10^-5 oder so was.

Laufzeitfehler ‚438‘:
Objekt unterstützt diese Eigenschaft oder Methode nicht.
und dann wird auf zeile 5 (.Axes(xlValue).MinimumScale = 1)
verwiesen.

Da Vba MinimumScale kennt, wird es wohl daran liegen daß dies in dem Moment, also im gewählten Diagrammtyp mit dieser Skalierung nicht geht, also nicht unterstützt wird.

Was ist mit der Hilfe von Thomas, wenn sein Vorschlag bei dem ersten Diagramm klappt, zeichne mal Code auf wenndu das beim zweiten Diagramm durchführst und zeige den Code.

Vielleicht kann man diesen Code umbasteln, so daß er die anderen Diagramme auch so umformatiert.

Gruß
Reinhard

Grüezi niemand

herzlichen dank für den tipp!
ich habe (excel 07) nun eine diagrammvorlage erstellt, ist das
das was du gemeint hast?

Wenn es damit klappt, dann habe ich das gemeint… :wink:

es funktioniert nun, ich muss den diagrammtyp aber nun bei
jedem einzelnen diagramm wieder frisch auswählen. gibt es eine
möglichkeit, wie ich dies gerade für alle tun kann?

Ich fürchte, dass die Entwicklung eines VBA-Codes länger dauern könnte, als die Zuweisung der Vorlage an deine Diagramme.

Aber zeichne das Ganze doch mal auf und füge dann den Namen deiner Vorlage in die folgenden Codezeilen ein:

Sub Makro1()
Dim chrtAct As Object
 For Each chrtAct In ActiveSheet.ChartObjects
 chrtAct.Activate
 ActiveChart.ChartType = xlLine
 Next chrtAct
End Sub

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -