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:
-
das ende der forschleife (next) hat gefehlt
-
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
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,
- das ende der forschleife (next) hat gefehlt
okay, Fehler von mir.
- 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… 
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