Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Probleme mit Range / SetSourceData

Probleme mit Range / SetSourceData
27.07.2007 22:38:00
Silk
Hallo,
ich kämpfe hier mit einem Range und komm nicht weiter:

Dim wsSensor As Worksheet
Dim dRange as Range
lastRow = 50            ' wird anderswo berechnet...
Set wsSensor = ActiveWorkbook.Worksheets("sensor")
Set dRange = wsSensor.Range(wsSensor.Cells(2, 2), wsSensor.Cells(lastRow, 2))
With ChartObjects(1).Chart
.SetSourceDataSource:=Sheets("sensor").Range(dRange)
End With


Das SetSourceData schlägt fehl mit "Anwendungs oder Objektdefinierter Fehler".
Kann mir jemand helfen?
Vielen Dank
Karsten

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Probleme mit Range / SetSourceData
27.07.2007 22:56:07
Renee
Mazwara Karsten,
Ungetestet, aber meiner Meinung nach müsste das hier das gleiche machen:

With ChartObjects(1).Chart
.SetSourceDataSource:="=sensor!B2:B50"
End With


Greetz Renee

AW: Probleme mit Range / SetSourceData
27.07.2007 23:11:00
Silk
Hi,
ja stimmt schon, dass das so funktioniert. Der Range wird aber anderswo dynamisch berechnet, so dass ich da keine Konstante übergeben kann. Ich hab den Code oben etwas vereinfacht zugunsten der Lesbarkeit. Die Zahlen in den Cells Anweisungen können variieren.
Gruß
Karsten

AW: Probleme mit Range / SetSourceData
27.07.2007 23:17:00
Renee
Hi Karsten,
Na und, dann heisst doch einfach so:

With ChartObjects(1).Chart
.SetSourceDataSource:="=sensor!B2:B" & lastRow
End With


Was heisst Du hast den Code vereinfacht? Der ist viel zu kompliziert. Die Eigenschaft nimmt einen Range-Adress-Bereich auf, nicht eine Range als Objekt!
Greetz Renee

Anzeige
AW: Probleme mit Range / SetSourceData
27.07.2007 23:35:00
Silk
Hi,
naja, ok, hast ja Recht. Ich meinte nur das da noch wesentlich mehr Code drumzugebaut ist....
Aber ich habs jetzt so gemacht, wie du beschrieben hast und er schluckt es! :-)
Aber leider macht die SetDataSource Funktion nicht das was ich wollte: Also eigentlich möchte ich den Datenbereich für eine Datenreihe festlegen. Wenn ich die Funktion jetzt ausführe, werden etliche neue Datenreihen hinzugefügt, aber keine Daten. Was mache ich falsch?
Gruß
Karsten

AW: Probleme mit Range / SetSourceData
27.07.2007 23:40:00
Renee
Hi Karsten,
Um das zu beurteilen, wäre eine Beispielmappe am besten.
Denn, wenn da viel Code und spezielle Diagramtypen involviert sind, ist das so nicht einfach zu erklären.
Ev. kann ich morgen wieder vorbeischauen.
Goodnigt Renee

Anzeige
AW: Probleme mit Range / SetSourceData
28.07.2007 00:14:23
ingUR
Hallo, Karsten,
mit der Anweisung Sheets("sensor").Range(dRange) übergibst Du dem Range-Object als Adresse ein Rangeobjekt, nämlich das Objekt dRange, anstelle eines Zelelnadressbereiches.
Ohne es jetzt im einzelnen zu prüfen, solltest Du die Adresse der von dRange übergeben:
Sheets("sensor").Range(dRange.Address)
Werde es mir ggf. morgen nocheinmal anschauen, ob mein Gedankengank so umzusetzen ist.
Gruß,
Uwe
.

AW: Probleme mit Range / SetSourceData
28.07.2007 06:46:00
ingUR
Hallo, Karsten,
in dRange stecken bereits alle Informationen für den Datenquellenbereich, Tabellenblatt und Rangebereich.
Nun kommt es nur noch darauf an, wo sich das Diagramm befindet.
Für ein auf dem aktiven Arbeitsblatt eingebettestes Diagramm funktionert diese Datenzuweisung:

With ActiveSheet.ChartObjects(1).Chart
.SetSourceData Source:=dRange
End With

Befindet sich das Diagramm auf einem eignen Diagrammblatt, dann ändert sich die Sequenz zu:


With Charts(1)
.SetSourceData Source:=dRange
End With

wenn das erste Diagrammblatt angesprochen wird. Alternativ kann aber auch direkt der Diagrammblattname angesprochen werden:


With Charts("sensorDiagramm")
.SetSourceData Source:=dRange
End With

Hier wurde also der Diagrammblattname sensorDiagramm gesetzt.
Gruß,
Uwe

Anzeige
AW: Probleme mit Range / SetSourceData
28.07.2007 10:41:21
Silk
Hallo Uwe,
die Differenzierung zwischen dem Range-Objekt und dem Range-Adressbereich war mir gar nicht bewußt! So wie von dir beschrieben funktioniert es auch! :-)
Allerdings macht das .SetSourceData noch nicht das was ich eigentlich will:
Also ich habe ein XY-Liniendiagramm auf einem Arbeitsblatt liegen. Der Benutzer kann dann über Comboboxen quasi einen "Datensatz" auswählen der im Diagramm dargestellt wird. Die eingentlichen Daten liegen dabei auf anderen Arbeitsblättern. Die X-Achsendaten liegen dabei immer in Spalte 1, die Y-Daten in Spalte 2,3 oder 4. Wenn der Range die beiden ersten Spalten "abdeckt" klappt es schon, do wie kriege ich es hin, z.B. die erste und 3 Spalte darzustellen?
Gruß
Karsten

Anzeige
AW: Probleme mit Range / SetSourceData
28.07.2007 11:13:58
ingUR
Hallo, Karten,
um bei Deinem Programmgerüst zu bleiben, ist die Funktion Union(Bereich1, Breich2, ....) einzusetzen, die mehrere Bereich zu einer Bereichsbezeichnung verknüpft:

Sub DiagramSourceDataSetzen()
Dim wsSensor As Worksheet, lastRow As Long
Dim dYRange As Range, dXRange As Range, sp as long
lastRow = 50            ' wird anderswo berechnet...
Set wsSensor = Worksheets("sensor")
Set dXRange = wsSensor.Range(wsSensor.Cells(2, 1), wsSensor.Cells(lastRow, 1))
'der folgende Wert für sp ist in Abhängigkeit der Wahlmöglichkeit zu generieren:
sp=3
Set dYRange = wsSensor.Range(wsSensor.Cells(2, sp), wsSensor.Cells(lastRow, sp))
With ActiveSheet.ChartObjects(1).Chart
.SetSourceData Source:=Union(dXRange, dYRange)
End With
End Sub


Gruß,
Uwe

Anzeige
AW: Probleme mit Range / SetSourceData
28.07.2007 12:17:00
Silk
Hi Uwe,
vielen Dank. Die Funktion Union() kannte ich noch nicht.
Gruß
Karsten

AW: Probleme mit Range / SetSourceData
28.07.2007 13:00:29
ingUR
Danke für die Rückmeldung, Karsten!
Um das Thema hier um eine Element zu erweitern, kann in den With-Block die Programmzeile

.SeriesCollection(1).Name = wsSensor.Cells(1, sp)

eingefügt werden, wenn in der Spalte sp in der Zeile 1 der Datenreihennamen eingetragen ist und die Legende gezeigt wird.
Gruß,
Uwe

AW: Probleme mit Range / SetSourceData
28.07.2007 13:20:02
Silk
Hi Uwe,
ja Danke, sowas hab ich auch schon eingebaut. Was ich jetzt noch suche, sind Funktionen, mit denen ich Datenreihen hinzufügen und entfernen kann. Ausserdem benötige ich eine Möglichkeit zum Ermitteln der Anzahl der momentan dargestellten Datenreihen und der Formatierung der Datenreihen (Farbe, Stärke, Art).
Gruß
Karsten

Anzeige
AW: Probleme mit Range / SetSourceData
28.07.2007 16:19:00
ingUR
Hallo, Karsten,
die Anzahl der im Chart dargestellten Datenreihen liefert Dir das Objekt SeriesCollection

maxSeries = .SeriesCollection.Count

Bezüglich der Formatierung ist es ein gangbarer Weg, sich über den Makrorecoder die entsprechenden Befehlszeilen in einem separaten Makro zu erzeugen und diese dann zu bearbeiten und in den eignen Programmcode gewandelt einzubauen, wenn Du die entsprechnden Hilfen zu den Befehle nicht durchgehen willst.
Gruß,
Uwe

14 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige