Anzeige
Archiv - Navigation
1808to1812
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
Inhaltsverzeichnis

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

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

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige