online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon ComoMolo vom 12.09.2019, 17:47 Options

VBA: dynamische Diagrammquellen

Hallo!
(Vorab: bin ein absoluter Laie und beherrsche leider auch die Fachsprache nicht - versuche aber mal einfach mich verständlich zu machen!)
Ich möchte in verschiedenen Excel-Sheets, die sich bereits in Abhängigkeit von einer Laufvariable "D" dynamisch erzeugen, jeweils zwei Diagramme mit unterschiedlicher Datenquelle erzeugen. Das funktioniert auch soweit:

'erstes Diagramm
Charts.Add
ActiveChart.ChartType = xlLine
'!!!!!!!!!!!!!!!!!!!
ActiveChart.SetSourceData Source:=Sheets("Auswertung D " & D).Range("B20:E30"), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Auswertung D " & D
With ActiveChart
    .HasTitle = True
    .ChartTitle.Characters.Text = "Inländische Unternehmen"
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Perioden"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Produktivität"
End With
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
    .MinimumScale = Unternehmen(D, 1, 1, 3)
End With
ActiveSheet.Shapes("Diagramm 1").IncrementLeft -229.5
ActiveSheet.Shapes("Diagramm 1").IncrementTop -105#
ActiveWindow.Visible = False

'zweites Diagramm
Charts.Add
ActiveChart.ChartType = xlLine
'!!!!!!!!!!!!!!!!!!!
ActiveChart.SetSourceData Source:=Sheets("Auswertung D " & D).Range("G20:J30"), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Auswertung D " & D
With ActiveChart
    .HasTitle = True
    .ChartTitle.Characters.Text = "Ausländische Unternehmen"
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Perioden"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Produktivität"
End With
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
    .MinimumScale = Unternehmen(D, 1, n, 10)
End With
ActiveSheet.Shapes("Diagramm 2").IncrementLeft 240#
ActiveSheet.Shapes("Diagramm 2").IncrementTop -104.25


Jetzt sollen aber die zugehörigen Datenquellbereiche ebenfalls dynamisch eingelesen werden, da sie in ihren Ausmaßen von drei Variablen (Perioden, n, m) abhängig sind. Es ist also eine Änderung des "Range" erforderlich! Folgende Lösungen als Ersatz für die jeweilige Code-Zeile unter den "!!!!!!" wären von der Logik her passend, ergeben allerdings Fehlermeldungen:

ActiveChart.SetSourceData Source:=Sheets("Auswertung D " & D).Range(cells(20,2),cells(20+Perioden,1+n-m)), lotBy:=xlColumns

ActiveChart.SetSourceData Source:=Sheets("Auswertung D " & D).Range(cells(20,3+n-m),cells(20+Perioden,3+n)), lotBy:=xlColumns


(Das statische Beispiel oben war für die Werte ausgelegt: Perioden=10, n=8, m=4)
Leider verträgt sich meine Cells-Schreibweise irgendwie nicht mit dem, was Range fordert und es kommt zu einem Fehler :-)
Wer weiß Rat?


Antwort schreiben

Antwort 1 von Beverly vom 12.09.2019, 18:26 Options

Hi,

du schreibst in deinem neu festgelegten Code

lotBy:=xlColumns

Das muss heißen

PlotBy:=xlColumns

Einen anderen Fehler kann ich eigentlich nicht feststellen.

Bis später,
Karin

Antwort 2 von Seradest vom 12.09.2019, 19:09 Options

Mein Vorschlag: Du benennst die Datenquallen als Bereiche, benutzt dazu die Excel-Funktion:

Bereich.Verschieben

Damit kannst du sehr wahrscheinlich deine Bereiche so variabel halte wie du möchstest. Dann hast du auch keine Probleme diese Bereiche per VBA zu behandeln. Ansonsten gehört vor jede "Cells"-Aweisung auch ein: "Sheets("Auswertung D " & D)"
Also:

ActiveChart.SetSourceData Source:=Sheets("Auswertung D " & D).Range(Sheets("Auswertung D " & D).cells(20,2),Sheets("Auswertung D " & D).cells(20+Perioden,1+n-m)), lotBy:=xlColumns

Oder aber einfacher:
With Sheets("Auswertung D " & D)

ActiveChart.SetSourceData Source:= .Range(.cells(20,2),.cells(20+Perioden,1+n-m)), lotBy:=xlColumns

End With

Man beachte dabei die Punkte vor .Cells und .Range

Ich denke das dürfte helfen.

Grüße
Carsten

Antwort 3 von ComoMolo vom 13.09.2019, 12:14 Options

Vielen Dank an Karin und Carsten...es funktioniert!!

Bin total erleichtert - hatte schon ewig daran rumgebastelt und dann sind es am Ende nur einige "Kleinigkeiten" (die man aber auch erstmal wissen/erkennen muss!).
Danke auch, dass ihr so schnell geantwortet habt!

LG

Ähnliche Themen

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 11:26:25 2026