Anzeige
Archiv - Navigation
1356to1360
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
Y-Achsenskalierung mit Zellbezug
25.04.2014 14:56:01
Thomas
Tag zusammen!
Folgende Frage: Meine Y-Achsen-Skalierung (Minimal, Maximalwert und Hauptintervall) wird durch einen Zellbezug über Vba in meinem Programm festgelegt. Wenn sich jetzt Werte ändern, dann werden auch die Balken in meinem Diagramm größer oder kleiner. Dementsprechend ändert sich die Zelle, in der ich meine benutzerdefinierten Minimal- und Maximalwerte für das Diagramm berechne. Allerdings ändert sich die Skalierung im Diagramm selbst nicht. Ich muss das entweder per Hand machen oder das Makro nochmals durchlaufen lassen. Gibt es einen Befehl, mit dem sich die Skalierung und damit der Diagrammbereich automatisch mit anpasst?

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Y-Achsenskalierung mit Zellbezug
26.04.2014 09:28:35
Beverly
Hi Thomas,
du schreibst, dass Min/Max per VBA festgelegt werden - weise diese Werte im selben Augenblick der Y-Achse zu.


AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 13:56:04
Thomas
Danke für deine Antwort.
Wie genau meinst du zueweisen?
In meinem akutellen Code mache ich das so:
ActiveChart.Axes(xlValue).MinimumScale = Sheets("Daten").Cells(2, 14)
Wenn sich jetzt der Wert aber ändert, ändert sich das nicht automatisch im Diagramm. Gibts da auch die Möglichkeit den Befehl anders zu schreiben?
Für die Datenbeschriftung benutze ich z.B. folgende Funktion
ActiveChart.SeriesCollection(3).Points(i).DataLabel.Formula = "='Daten!B" & i + 1
Hier wird direkt bei einer Änderung der Daten dies auch im Diagramm aktualisiert, genau das bräuchte ich jetzt eben auch für die Achsenskalierung

Anzeige
AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 14:07:47
Beverly
Damit kann ich leider nichts anfangen, denn ich sehe nicht, wodurch du deinen Code startest. Ich kann also nur sagen: baue deine Zeile für MinimumScale und MaximumScale an dieser Stelle ein, wo du dem Beschriftungslabel die Formel zuweist.


AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 14:39:38
Thomas
Vielleicht stehe ich auch einfach auf dem Schlauch, aber ich glaube das habe ich eigentlich gemacht. Vielleicht kannst du ja mit dem Code mehr anfangen, mit dem ich das Diagramm erstelle:

ActiveSheet.Shapes.AddChart.Select 'Diagramm hinzufügen
ActiveChart.ChartType = xlColumnStacked 'Diagrammtyp=Säulendiagramm
'Ermittlung der Anzahl an automatisch eingetragenen Datenreihen
intchartrow = ActiveChart.SeriesCollection.Count
' Löschen der Datenreihen beginnend mit der größten
For intcounter = intchartrow To 1 Step -1
ActiveChart.SeriesCollection(intcounter).Delete
Next intcounter
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Diagramm"  'Diagramm in neues Sheet,  _
mit Namen "Diagramm"
ActiveSheet.Move After:=Worksheets(Worksheets.Count) 'Neues Sheet ans Ende anfügen
With ActiveChart
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = Range(Sheets("Daten für Diagramm").Cells(2, 5), Sheets("Daten  _
für Diagramm").Cells(Anzahlgesamt + 1, 5)) 'Daten Hilfe in Säulendiagramm als Datenreihe 1 eintragen
.SeriesCollection.NewSeries
.SeriesCollection(2).Values = Range(Sheets("Daten für Diagramm").Cells(2, 7), Sheets("Daten  _
für Diagramm").Cells(Anzahlgesamt + 1, 7)) 'Daten Säulekorrektur in Säulendiagramm als Datenreihe 2 eintragen
.SeriesCollection(2).Format.Fill.Visible = msoFalse 'Säulen ohne Füllung, damit unsichtbar
.SeriesCollection.NewSeries
.SeriesCollection(3).Values = Range(Sheets("Daten für Diagramm").Cells(2, 4), Sheets("Daten  _
für Diagramm").Cells(Anzahlgesamt + 1, 4)) 'Daten Masnahmekorrektur in Säulendiagramm als Datenreihe 3 eintragen
.SeriesCollection.NewSeries
.SeriesCollection(4).Values = Range(Sheets("Daten für Diagramm").Cells(2, 8), Sheets("Daten  _
für Diagramm").Cells(Anzahlgesamt + 1, 8)) 'Daten Masnahmekorrektur in Säulendiagramm als Datenreihe 3 eintragen
.SeriesCollection(1).XValues = Range(Sheets("Daten für Diagramm").Cells(2, 1), Sheets(" _
Daten für Diagramm").Cells(Anzahlgesamt + 1, 1)) 'Beschriftung der x-Achse
.Legend.Delete 'Legendenbeschriftung löschen
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Energiekaskade"   'Diagrammtitel = Energiekaskade
.SetElement (msoElementPrimaryValueAxisTitleRotated)
Selection.Caption = Diagrammeinheit 'Beschriftung y-Achse mit ausgewählter Einheit aus Userform  _
Einheit
.SeriesCollection(3).Select
.ChartGroups(1).GapWidth = 40 'Abstand der Balken wählen
.Axes(xlCategory).TickLabelPosition = xlLow 'x-Achsenbeschriftung unter das Diagramm setzen
For i = 1 To Anzahlgesamt Step 1    'Datenbeschriftung über Schleife,
.SeriesCollection(3).ApplyDataLabels
If Not Sheets("Daten für Diagramm").Cells(i + 1, 4) = 0 Then
If Not IsEmpty(Sheets("Daten für Diagramm").Cells(i + 1, 4)) Then
ActiveChart.SeriesCollection(3).Points(i).DataLabel.Formula = "='Daten für Diagramm' _
!B" & i + 1
End If
End If
.SeriesCollection(3).DataLabels.NumberFormat = "#.##0,0"
Next
.Axes(xlValue).MinimumScale = Sheets("Daten für Diagramm").Cells(2, 14) 'Minimalwert der y- _
Achse
.Axes(xlValue).MaximumScale = Sheets("Daten für Diagramm").Cells(2, 13) 'Maximalwert der y- _
Achse
.Axes(xlValue).MinorUnitIsAuto = True
.Axes(xlValue).MajorUnitIsAuto = True
.Axes(xlValue).Select
.Axes(xlValue).MajorUnit = Sheets("Daten für Diagramm").Cells(2, 12) 'Hauptintervall der Y- _
Achsenbeschriftung
Exit sub

Anzeige
AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 14:53:53
Beverly
In deinem Code gibt es die Zeilen .Axes(xlValue).MinimimScale und .Axes(xlValue).MaximumScale bereits - ich sehe also, nicht wo das Problem ist.


AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 15:39:42
Thomas
Dann nochmal von Anfang an:
Ich habe ein Programm geschrieben, mit dem ich ein Balkendiagramm erzeugen will. Führe ich das Programm einmal aus, erscheint auch das Diagramm, passt soweit alles wunderbar. Jetzt habe ich Messwerte, die sich aber häufig ändern. Bei diesen Änderungen möchte ich aber nicht die ganze Zeit das Programm nochmals starten müssen, deswegen auch die automatische Änderung im Diagramm bei Änderung der Zelle. Klappt auch soweit für die Balken, deren Beschriftung etc. Das einzige was sich eben nicht automatisch mitändert ist die neuskalierte Achse, obwohl sich der Wert in der Zelle, in der mein neu Berechnetes Mininum/Maximum steht, schon ändert. Ergo scheint mit dem Befehl, den ich für Min/Max Skalierung verwende, das nicht zu funktionieren und deswegen auch meine Frage, ob es hierfür eine Alternative gäbe?!

Anzeige
AW: Y-Achsenskalierung mit Zellbezug
28.04.2014 15:58:46
Beverly
Doch, der Befehl ist schon korrekt, nur wird er durch deinen Code eben ausschließlich und einmalig beim Erstellen des Diagramms ausgeführt. Die Achsenkalierung lässt sich jedoch nicht wie das Beschriftungslabel eines Datenpunktes mit einer Zelle verknüpfen (wie das deine Codezeile ActiveChart.SeriesCollection(3).Points(i).DataLabel.Formula = "='Daten für Diagramm'!B" & i + 1) macht.
Die Achsenskalierung muss JEDES Mal wieder neu zugewiesen werden (das macht die Codezeile für .MinimumScale und .MaximuScale), sobald sich die Daten im Tabellenblatt ändern. Folglich musst du ein Ereignis im Tabellenblatt benutzen, um die Achsenskalierung bei JEDER Änderung anzupassen - dazu benutzt man das Worksheet_Change-Ereignis.
Ich kann das leider nur so allgemein schreiben, da ich deinen Tabellenaufbau bzw. deine Mappe nicht genau kenne.


Anzeige

21 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige