Range(ActiveCell.Offset(0, -1).End(xlDown) usw.

  • #1
K

klexy

Bekanntes Mitglied
Themenersteller
Dabei seit
04.05.2002
Beiträge
802
Reaktionspunkte
0
Ort
Bayern
Ich habe eine riesige Tabelle. Irgendwo mittendrin sind die Zellen aus denen ich ein Diagramm machen will (E1: G34).
Im Makro sieht das dann so aus und funktioniert:
Code:
    Charts.ADD
    ActiveChart.ChartType = xl3DColumn
    ActiveChart.SetSourceData Source:=Sheets(Tabelle2).Range(E1:G34), PlotBy _
        :=xlColumns
In Spalte D ist immer die durchlaufende Nummerierung bis zu der aktuell gültigen Anzahl der Zeilen.

Aber: Die Tabelle ist jeden Monat neu und hat nicht immer 34 Zeilen, sondern auch mal 10 wie im folgenden Beispiel (- steht für leere Zellen). Links und rechts davon sind jeweils mehr als 50 Zeilen befüllt. Bevor der Befehl zum Diagramm kommt, ist der korrekte Datenbereich durch Makro-Befehle vollständig markiert. Die Markierung beginnt von rechts unten und geht nach links oben. Im Beispiel G9-E1:

D E F G
1 - - -
2 5 2 -
3 - - -
4 9 - -
5 3 - 1
6 - - -
7 7 - 2
8 6 - -
9 - - 4

Wie kann ich aus dem absoluten Wert Range(E1:G34) einen relativen Bezug in der Art von Range(ActiveCell, ActiveCell.End(xlDown).Offset(0, 2)) machen?

Das Problem ist, daß Spalte D, die als einzige ansagt wieviele Zeilen vorhanden sind, nicht Teil des Diagramms werden soll. Der relative Bezug mit End(xlDown) funktioniert also nicht weil in den zu verarbeitenden Werten immer wieder leere Zellen sind (und sein müssen!).

Es müsste irgendwas mit ActiveRange oder Count.Rows oder so sein, aber ich komm nicht dahinter.

[Edit]
Auf folgendes bin ich gekommen:
Code:
    ActiveChart.SetSourceData Source:=Sheets(Tabelle2).Range(ActiveCell, ActiveCell.Offset(-ActiveCell.Row, -2)), PlotBy _
        :=xlColumns
Das Diagramm wird korrekt ausgegeben, aber dann hängt er sich auf und markiert mir die o.g. Zeile als falsch: Laufzeitfehler->91' Objektvariable oder With-Blockvariable nicht festgelegt :mad:

Wenn ich folgendes mache:
Code:
 ActiveChart.SetSourceData Source:=Sheets(Tabelle2).Range(E1, ActiveCell), PlotBy _
        :=xlColumns
wird das Diagramm auch korrekt ausgegeben und danach hängt er sich auf: Laufzeitfehler->1004' Anwendungs-oder objektdefinierter Fehler
 
  • #2
Hi klexy,

folgendes könnte dir helfen

Gruß Matjes :)

Code:
Dim l_rowmax As Long

'Zeile der letzten beschriebenen Zelle in Spalte D auf Tabelle2
l_rowmax = Worksheets(Tabelle2).Cells(Rows.Count, 4).End(xlUp).Row


    Charts.Add
    ActiveChart.ChartType = xl3DColumn
   ->Cells(1,5) entspricht E1, Spalte 7 entspricht G
    ActiveChart.SetSourceData _
        Source:=Sheets(Tabelle2).Range(Cells(1, 5), Cells(l_rowmax, 7)), _
        PlotBy:=xlColumns
 
  • #3
Oha, jetzt sind wir uns gerade in die Quere gekommen. Ich schau mir deine Lösung gleich mal an. ;D
 
  • #4
Hm,

es funktioniert, wirft ein korrektes Diagramm aus und erhängt sich anschließend genau an der Zeile
Code:
    ActiveChart.SetSourceData _
        Source:=Sheets(Tabelle2).Range(Cells(1, 5), Cells(l_rowmax, 7)), _
        PlotBy:=xlColumns

Auch wenn ich l-rowmax durch den kompletten Ausdruck ersetze, komme ich zum gleichen Ergebnis.

Die gleichen Formulierungen habe ich auch mit .Select danach getestet. Der gewollte Bereich wird korrekt markiert. Nur mit dem Diagramm funktioniert es nicht. :mad:

Stößt hier Excel an seine Grenzen?
 
  • #5
Hi klexy,

so sollte es gehen.

Gruß Matjes :)
Code:
    Source:=Worksheets(Tabelle2).Range( _
            Worksheets(Tabelle2).Cells(1, 5), _
            Worksheets(Tabelle2).Cells(l_rowmax, 7)), _
            PlotBy:=xlColumns
 
  • #6
Jetzt geht es, allerdings mußte ich eine andere Spalte zum Zählen nehmen, die genau so lang ist wie die Spalte D.

Es geht allerdings nicht wenn ich das Dim weglasse und es so formuliere:
Code:
    ActiveChart.SetSourceData _
    Source:=Worksheets(Tabelle2).Range( _
            Worksheets(Tabelle2).Cells(1, 5), _
            Worksheets(Tabelle2).Cells(Worksheets(Tabelle2).Cells(Rows.Count, 11).End(xlUp).Row, 7)), _
            PlotBy:=xlColumns

Warum nicht?
 
  • #7
Hi klexy,

so ;)

Code:
    ActiveChart.SetSourceData _
    Source:=Worksheets(Tabelle2).Range( _
            Worksheets(Tabelle2).Cells(1, 5), _
            Worksheets(Tabelle2).Cells( _
              Worksheets(Tabelle2).Cells( _
                  Worksheets(Tabelle2).Rows.Count, 11).End(xlUp).Row, 7)), _
            PlotBy:=xlColumns

besser lesbar:
Code:
   With Worksheets(Tabelle2)
    ActiveChart.SetSourceData _
    Source:=.Range(.Cells(1, 5), _
            .Cells(.Cells(.Rows.Count, 11).End(xlUp).Row, 7)), _
            PlotBy:=xlColumns
  End With
 
  • #8
Danke.
Da muß ich jetzt wieder lange darüber nachdenken.
;D ;D ;D

Aber wenigstens geht es ohne mein Angst-Thema Dim. Das braucht noch eine Weile.
 
Thema:

Range(ActiveCell.Offset(0, -1).End(xlDown) usw.

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.489
Neuestes Mitglied
DonMartin
Oben