Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Diagramm-Datenbereich Bug?

VBA: Diagramm-Datenbereich Bug?
06.02.2021 15:25:05
Max
Hallo liebe Forum-Mitglieder,
normalerweise stelle ich keine Fragen auf Foren und versuchte es bisher so lange selber, bis es klappte. Nun bin ich an einem Punkt, wo ich wirklich nicht weiter weiß.
Der Link zur Tabelle:
https://www.herber.de/bbs/user/143673.xlsm
Bitte ändert im Macro das Workbook von "DiagrammbereichErweitern.xlsm" zu "143673.xlsm"
Ich möchte den Datenbereich eines Diagramms mit VBA abhängig von der Anzahl der Daten (hier vereinfacht: Daten in Spalte B) erweitern. In der Beispieltabelle im Blatt „Tabelle1“ funktioniert das Makro „KurvenZeichnen“ super. Wenn ich allerdings den gleichen Code angepasst auf Tabelle im Blatt „Tabelle2“ mit dem Makro „KurvenZeichnen1“ anwenden will, zerschießt es mir die Tabelle, sobald ich Daten ab Zeile 17 eintrage:
„x-Werte“ in Zeile 4 werden zu Datennamen und Namen in Spalte B werden zu x-Werten der Tabelle.
Der Datenbereich im Macro „KurvenZeichnen1“ geht von Spalte L bis V.
Im Macro „KurvenZeichnen2“ habe in 2 Spalten zum Datenbereich hinzugefügt (Datenbereich K bis W), was dazu führt, dass ich 2 weitere Datenreihen in der Source-Range hinzufügen kann, ohne dass es die Tabelle zerschießt.
Das Macro „KurvenZeichnen“ im Blatt „Tabelle1“ bezieht sich auch auf den Bereich von Spalte K bis W, aber dort kann ich noch viel mehr Werte hinzufügen, ohne dass es die Tabelle zerschießt.
Woher kommt das und wie kann ich das beheben?
Ich bin sehr dankbar über alle Antworten, da ich hier ratlos bin und die Funktion benötige.
Viele Grüße
Max
________________________________________________________________________________________________
________________________________________________________________________________________________
Code für alle, die nicht in die Datei schauen
Sub KurvenZeichnen()
q = Workbooks("DiagrammbereichErweitern.xlsm").Worksheets("Tabelle1").Cells(2, 2).Value
Sheets("Tabelle1").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SetSourceData Source:=Range( _
"Tabelle1!$B$4,Tabelle1!$K$4:$W$4,Tabelle1!$B$6:$B$" & 7 + q & ",Tabelle1!$K$6:$W$" & 7  _
+ q)
ActiveSheet.ChartObjects("Diagramm 1").Top = Range("B" & 8 + q).Top
ActiveSheet.ChartObjects("Diagramm 1").Left = Range("B" & 8 + q).Left
End Sub

Sub KurvenZeichnen1()
q = Workbooks("DiagrammbereichErweitern.xlsm").Worksheets("Tabelle2").Cells(2, 2).Value
Sheets("Tabelle2").Select
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.SetSourceData Source:=Range( _
"Tabelle2!$B$4,Tabelle2!$L$4:$V$4,Tabelle2!$B$6:$B$" & 7 + q & ",Tabelle2!$L$6:$V$" & 7  _
+ q)
ActiveSheet.ChartObjects("Diagramm 2").Top = Range("B" & 8 + q).Top
ActiveSheet.ChartObjects("Diagramm 2").Left = Range("B" & 8 + q).Left
End Sub
'KurvenZeichnen1 = KurvenZeichnen2, nur die Source-Range angepasst auf "KurvenZeichnen"
Sub KurvenZeichnen2()
q = Workbooks("DiagrammbereichErweitern.xlsm").Worksheets("Tabelle2").Cells(2, 2).Value
Sheets("Tabelle2").Select
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.SetSourceData Source:=Range( _
"Tabelle2!$B$4,Tabelle2!$K$4:$W$4,Tabelle2!$B$6:$B$" & 7 + q & ",Tabelle2!$K$6:$W$" & 7  _
+ q)
ActiveSheet.ChartObjects("Diagramm 2").Top = Range("B" & 8 + q).Top
ActiveSheet.ChartObjects("Diagramm 2").Left = Range("B" & 8 + q).Left
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nicht Bug sondern unsaubere Programmierung
06.02.2021 15:47:57
Beverly
Hi Max,
das Problem liegt in der unterschiedlichen Anzahl an Daten - in Tabelle2 interpretiert Excel deinen Aufbau spaltenweise, du möchtest die Daten aber zeilenweise zuweisen. Aus diesem Grund ist es immer besser, bei der Bereichszuweisung noch mit anzugeben, ob die Datenanordnung spalten- oder zeilenweise zu interpretieren ist durch den Parameter PlotBy:=
Sub KurvenZeichnen1()
q = ThisWorkbook.Worksheets("Tabelle2").Cells(2, 2).Value
With ThisWorkbook.Worksheets("Tabelle2").ChartObjects("Diagramm 2")
.Chart.SetSourceData Source:=Range( _
"Tabelle2!$B$4,Tabelle2!$L$4:$V$4,Tabelle2!$B$6:$B$" & 7 + q & _
",Tabelle2!$L$6:$V$" & 7 + q), PlotBy:=xlRows
.Top = .Parent.Range("B" & 8 + q).Top
.Left = .Parent.Range("B" & 8 + q).Left
End With
End Sub
Übrigens kann man zu 99% aller Fälle auf Select und Activate verzichten.


Anzeige
AW: Nicht Bug sondern unsaubere Programmierung
06.02.2021 16:11:12
Max
Hallo Beverly,
kurze, schnelle Antwort und trotzdem total lehrreich - vielen Dank für deine Zeit und Hilfe! Das hat mich sehr gut weitergebracht.
Wünsche dir noch ein schönes Wochenende.
Beste Grüße
Max
Nicht Bug sondern unsaubere Programmierung
06.02.2021 16:15:19
Beverly
Hi Max,
das Problem liegt in der unterschiedlichen Anzahl an Daten - in Tabelle2 interpretiert Excel deinen Aufbau spaltenweise, du möchtest die Daten aber zeilenweise zuweisen. Aus diesem Grund ist es immer besser, bei der Bereichszuweisung noch mit anzugeben, ob die Datenanordnung spalten- oder zeilenweise zu interpretieren ist durch den Parameter PlotBy:=
Sub KurvenZeichnen1()
q = ThisWorkbook.Worksheets("Tabelle2").Cells(2, 2).Value
With ThisWorkbook.Worksheets("Tabelle2").ChartObjects("Diagramm 2")
.Chart.SetSourceData Source:=Range( _
"Tabelle2!$B$4,Tabelle2!$L$4:$V$4,Tabelle2!$B$6:$B$" & 7 + q & _
",Tabelle2!$L$6:$V$" & 7 + q), PlotBy:=xlRows
.Top = .Parent.Range("B" & 8 + q).Top
.Left = .Parent.Range("B" & 8 + q).Left
End With
End Sub
Übrigens kann man zu 99% aller Fälle auf Select und Activate verzichten.


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige