mir fällt für eine Problem keine gescheite Lösung ein:
Auf einem Tabellenblatt habe ich direkt untereinander
fünf Charts angeordnet, die sich aus Bereichen mit
ständig wechselnden Daten speisen. Dadurch sind
natürlich auch die Maßstäbe und Beschriftungen in
einem ständigen Wechsel begriffen.
Um eine vernünftige Betrachtung der Charts zu ermöglichen,
soll sich ihre Größe (besonders die horizontale) möglichst
nicht ändern, ganz gleich, welche Daten gerade angezeigt werden.
Nun kann ich zwar die PlotArea der Charts festlegen,
dummerweise gehört aber die Beschriftung der y-Achse
mit dazu, so dass im Ergebnis die Y-Achsen der verschiedenen
Charts nach einem Datenwechsel wieder nicht genau
untereinander stehen.
Kein Problem wäre es, wenn man auf die Beschriftung der
Y-Achse verzichten würde, aber das möchte ich ungern.
Gibt es eine bessere Lösung, bzw. kann man die Lage
und Größe der reinen Zeichnungsfläche festlegen?
MFG
Karl-Heinz
Sub GrößeDerZeichnungsfläche()
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.PlotArea.Select
MsgBox "Breite: " & Selection.Width & vbLf & _
"Höhe: " & Selection.Height
End Sub
Anschließend kannst du auch bei den anderen Charts die
Zeichnungsfläche an die ermittelte Größe anpassen:
Sub Zeichnungsfläche()
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.PlotArea.Select
Selection.Width = 360 'ersetzen durch deine Angaben
Selection.Height = 250 'ersetzen durch deine Angaben
End Sub
MfG Frank
_____________________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
E-Mail: Thei...@t-online.de
Am Sat, 8 Apr 2000 12:41:30 +0200, schrieb "Karl-Heinz Wachler"
<k-...@gmx.net> in microsoft.public.de.excel zu "Diagramme ausrichten":
vielen Dank für Deine Antwort. Leider bleibt mein Problem auch
bei Deiner Lösung bestehen, da die PlotArea eben die Beschriftung
mit umfasst. Und die Breite der Beschriftung ist je nach Datenlage
sehr unterschiedlich, das wechselt zwischen 1345.57, 7.12 , 2.4366 und
-0.03. Da ich nicht alle Werte gleich formatieren kann, sehe ich
im Moment keinen anderen Weg, als die Breite der Zahlen zu
ermitteln und je nachdem die ActiveChart.PlotArea.Left-Einstellung
zu verändern, um danach dann die Width-Einstellung vorzunehmen.
MFG
Karl-Heinz
Frank Arendt-Theilen <Thei...@t-online.de> schrieb in im Newsbeitrag: 3hbues00jp8rq362n...@4ax.com...
MfG Ullrich
Sub AnpassenDiagramme()
Dim Achse, AchseMax
Dim Plot, PlotMax
With ActiveSheet
For Each d In .ChartObjects()
Achse = d.Chart.Axes(xlCategory, xlPrimary).Left
If Achse > AchseMax Then AchseMax = Achse
Plot = d.Chart.PlotArea.Width
If Plot > PlotMax Then PlotMax = Plot
Next
For Each d In .ChartObjects()
d.Chart.PlotArea.Left = 0
d.Chart.PlotArea.Width = PlotMax
While Not AchseMax <= d.Chart.Axes(xlCategory,
xlPrimary).Left
d.Chart.PlotArea.Left = d.Chart.PlotArea.Left +
1
d.Chart.PlotArea.Width =
d.Chart.PlotArea.Width - 1
Wend
Next
End With
End Sub
Karl-Heinz Wachler <k-...@gmx.net> schrieb in im Newsbeitrag:
8cnnhq$6m0ap$1...@fu-berlin.de...
mein vorheriges Makro kann sich in einer Endlosschleife
aufhängen, da wie ich inzwischen festgestellt habe, die
plotarea.width nur in 2pt-Schritten ändern läßt. Unten
stehen die überarbeitete Fassung, welchen nun auch die Länge
der x-Achse vereinheitlicht.
MfG Ullrich
Sub AnpassenDiagramme()
Dim Achse, AchseMax, AchseMin
Dim Chart, d, i
Dim ChartBreite
With ActiveSheet
ChartBreite = .ChartObjects(1).Chart.ChartArea.Width
For Each d In .ChartObjects()
d.Chart.PlotArea.Left = 0
d.Chart.PlotArea.Width = ChartBreite - 0
Achse = d.Chart.Axes(xlCategory, xlPrimary).Left
If Achse > AchseMax Then AchseMax = Achse
Next
For Each d In .ChartObjects()
i = 0
While Not AchseMax <= _
d.Chart.Axes(xlCategory, xlPrimary).Left
d.Chart.PlotArea.Width = d.Chart.PlotArea.Width - 2
d.Chart.PlotArea.Left = d.Chart.PlotArea.Left + 2
Wend
Next
AchseMin = ChartBreite
For Each d In .ChartObjects()
Achse = d.Chart.Axes(xlCategory).Width
If Achse < AchseMin Then AchseMin = Achse
Next
For Each d In .ChartObjects()
d.Chart.PlotArea.Width = _
d.Chart.PlotArea.Width - _
(d.Chart.Axes(xlCategory, xlPrimary).Width -
AchseMin)
Hallo Ullrich,
vielen Dank für Deine Hilfe. Ich werde auf
diesem Weg eine Lösung versuchen.
MFG
Karl-Heinz