Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

VBA: dynamische Diagrammquellen





Frage

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: [code]'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[/code] 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: [code]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[/code] (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 1 von Beverly

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

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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: