Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Diagramme ausrichten

154 views
Skip to first unread message

Karl-Heinz Wachler

unread,
Apr 8, 2000, 3:00:00 AM4/8/00
to
Hallo liebe Excelfreunde,

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

Frank Arendt-Theilen

unread,
Apr 8, 2000, 3:00:00 AM4/8/00
to
Hallo Karl-Heinz,
ermittle zunächst die von dir gewünschte Größe der Zeichnungsfläche
mit dem folgenden Makro:

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":

Karl-Heinz Wachler

unread,
Apr 8, 2000, 3:00:00 AM4/8/00
to
Hallo Frank,

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...

Ullrich Schwarz

unread,
Apr 8, 2000, 3:00:00 AM4/8/00
to
Hallo Karl-Heinz,
die Achsenposition kann man auch per VBA nicht direkt
beinflussen. Diese wird durch Excel automatisch in
Abhängigkeit der Plot-Area bestimmt. Das unten stehende
Makro (Excel97) soll nun die Plot-Area alle Diagramme so
anpassen, daß alle Achsen genau untereinander stehen. Hierzu
wird zuerst die am weitestens links stehende Achse ermittelt
und diese als Maßstab für die anderen Diagramme gesetzt.
Weiterhin wird die größte Breite der Plot-Area ermittelt und
auch diese als Maßstab für die restlichen Diagramme
genommen. Ich habe das Makro nur mit 2 Linendiagramme
getestet. Vielleicht hilft es Dir weiter.

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...

Ullrich Schwarz

unread,
Apr 8, 2000, 3:00:00 AM4/8/00
to
Hallo Karl-Heinz,

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)

Karl-Heinz Wachler

unread,
Apr 9, 2000, 3:00:00 AM4/9/00
to
Ullrich Schwarz <Ullrich...@gmx.de> schrieb in im Newsbeitrag: 8co7kd$6is8b$1...@fu-berlin.de...

Hallo Ullrich,

vielen Dank für Deine Hilfe. Ich werde auf
diesem Weg eine Lösung versuchen.

MFG
Karl-Heinz

0 new messages