Datenbereich in Diagramm variabel gestalten

Guten Tag!

Ich möchte gerne in meiner Arbeitsmappe ein Diagramm einfügen und dabei den Datenbereich jeweils der Anzahl der eingetragenen Werte anpassen

Dabei möchte ich den Code "Range("A1:A100) wie unten verändern.
Leider funktioniert das nicht.

Beispiel:
ActiveChart.SetSourceData Source:=Sheets(„Tabelle1“).Range(Cells(ERSTE_ZEILE, Spalte), Cells(LETZTE_ZEILE, Spalte)), usw…
Wer weis Rat?

Viele Grüße
Nikodemo

Grüezi NikoDemo

Einmal mehr habe ich einige Fragen zu deiner Frage…

Ich möchte gerne in meiner Arbeitsmappe ein Diagramm einfügen
und dabei den Datenbereich jeweils der Anzahl der
eingetragenen Werte anpassen

Soll sich das Diagamm auch im Anschluss dynamisch verhalten - sprich wenn neue Datensätze hinzukommen, diese gleich mit berücksitigen?
Dann wäre vermutlich ein dynamischer Bereichsname besser geeignet als eine VBA-Zuweisung.

Dabei möchte ich den Code "Range("A1:A100) wie unten
verändern.
Leider funktioniert das nicht.

Was genau funktioniert nicht?
Gibt es Fehlermeldungen - wenn ja welche?
Werden gar keine Daten erfasst oder eine falsche Anzahl?

Beispiel:
ActiveChart.SetSourceData
Source:=Sheets(„Tabelle1“).Range(Cells(ERSTE_ZEILE, Spalte),
Cells(LETZTE_ZEILE, Spalte)), usw…

Wie sind die Variablen ‚ERSTE_ZEILE‘, ‚LETZTE_ZEILE‘ und ‚Spalte‘ deklariert und welcher Wert wurde ihnen vorgängig im Code zugewiesen?

Ist das Tabellenblatt mit dem Namen ‚Tabelle1‘ während der Ausfürhung des Codes aktiv?
Wenn nicht, dann fehlt die Referenzierung von Cells() beide Male.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Guten Tag, lieber Thomas

Der gesamte Code schaut so aus:

Private Sub CommandButton1_Click()
Dim ERSTE_ZEILE As Long, LETZTE_ZEILE As Long
Dim ERSTE_SPALTE As Long, LETZTE_SPALTE As Long

USRFM001.Show

ERSTE_ZEILE = 5: LETZTE_ZEILE = 255
ERSTE_SPALTE = 1: LETZTE_SPALTE = 2

Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets(„Tabelle1“) _
.Range(Cells(ERSTE_ZEILE, ERSTE_SPALTE), Cells(LETZTE_ZEILE, LETZTE_SPALTE)), _
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:=„Tabelle1“
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
.MinimumScaleIsAuto = True
.MaximumScale = 250
.MinorUnit = 14
.MajorUnit = 14
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.NumberFormat = „dd/mm/yy;@“
With Selection.TickLabels
.Alignment = xlCenter
.Offset = 100
.ReadingOrder = xlContext
.Orientation = xlUpward
End With

Ich bekomme wegen Range(Cells(xyz…
folgend Meldung:

Laufzeitfehler’1004’
Anwendungs- oder objektdefinierter Fehler.

Was ist falsch?

Gruß und mfg
Nikodemo

Grüezi NikoDemo

…warum möchtest Du meine Fragen nicht beantworten und lässt mich alles aus dem Code herauslesen…?

Private Sub CommandButton1_Click()
Dim ERSTE_ZEILE As Long, LETZTE_ZEILE As Long
Dim ERSTE_SPALTE As Long, LETZTE_SPALTE As Long

Das ist OK.

USRFM001.Show

Aber hier beginnt die Misere, denn damit ist ‚Tabelle1‘ nicht mehr das aktive Tabellenblatt (sondern nun ist die Userform das aktive Objekt)…

ERSTE_ZEILE = 5: LETZTE_ZEILE = 255
ERSTE_SPALTE = 1: LETZTE_SPALTE = 2
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets(„Tabelle1“) _
.Range(Cells(ERSTE_ZEILE, ERSTE_SPALTE),
Cells(LETZTE_ZEILE, LETZTE_SPALTE)), _
PlotBy:=xlColumns

…und daher gilt hier, was ich oben nachgefragt und auch geraten habe:

Ist das Tabellenblatt mit dem Namen ‚Tabelle1‘ während der ::Ausfürhung des Codes aktiv?
Wenn nicht, dann fehlt die Referenzierung von Cells() beide Male.

Was ist falsch?

Eben die beiden Cells(), die Du verwendest um den Quellrange des Diagramms festzulegen beziehen sich auf das aktive Objekt (hier die Userform) und können daher nicht passen.
Du musst nicht nur für den Range sondern auch jedes der beiden Cells() die Referenz auf das Tabellenblatt angeben.

So sollte es einigermassen passen, hoffe ich:

ActiveChart.SetSourceData Source:=Sheets("Tabelle1") \_
 .Range(Sheets("Tabelle1").Cells(ERSTE\_ZEILE, ERSTE\_SPALTE),
Sheets("Tabelle1").Cells(LETZTE\_ZEILE, LETZTE\_SPALTE)), \_
 PlotBy:=xlColumns

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

hi, Thomas…

ich hab den Code aus der Userform herausgenommen und in die Tabelle eingabaut und so funktionierts auch.

(probleme hat man aber auch)

mit herzlichem Dank und vielen Grüßen

Nikodemo