Hallo, ihr Excelianer
ich will die Werte einer Grafik in Abhängigkeit eines Parameters darstellen.
Also wenn k=1 dann Darstellung von Bereich 1
wenn k=2 dann Darstellung von Bereich 2
in VBA muss das doch irgendwie so aussehen:
if k=1 then
Worksheets(„Tabelle1“).ChartObjects(„Diagramm 19“)._
Chart.SeriesCollection(1).Values _
= „anderes Tabellenblatt“.Range(„Bereich1“)
end if
entsprechend für k=2
das funzt aber net *himmeldonnerwetterzifixnochemal*
kriege immer die Fehlermeldung
„Laufzeitfehler 438
Objekt unterstützt diese Eigenschaft oder Methode nicht.“
Was mach ich falsch???
Ratz
So müsste es gehen
Moin Ratz,
es sieht so aus, als hättest Du ein Diagramm vorliegen, das sich in einem separaten Arbeitsblatt befindet, also nicht als Objekt innerhalb des Tabellenblattes, das die Werte enthält.
Dein Code bezieht sich jedoch auf die zweite( eingebettete) Variante, wie man deutlich an der Referenzierung sieht (erste Zeile). Hast Du aber wirklich ein „Stand-Alone“-Diagramm, muss so machen, wie es die zweite Zeile zeigt:
**Worksheets(**"T1"**).**ChartObjects("D19").Chart.SeriesCollection(1).Values = "T2".Range("B1")
**Workbooks("M1").**Chart **s**.SeriesCollection(1).Values = "T2".Range("B1")
In der ersten Variante kann man das „Worksheets(„T1“).“ auch weglassen, wenn man nur ein einziges Arbeitsblatt hat oder sicher ist, dass das richtige aktiv ist (in diesem Falle kann man auch mit „ActiveWorksheet.“ arbeiten).
Gleiches gilt für „Workbooks(„M1“).“. Wenn man nur eine Mappe offen hat oder sich zumindest nur auf die aktivierte bezieht, kann man das weglassen. Die ActiveWorkbook.-Variante gibt´s darüber hinaus auch hier.
So, das sollte weiterhelfen. Hoffe ich.
Gruss aus Köln,
Kristian
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Geht, AAAAber …
Hallo Kristian
So gehts , AAABER …
Du musst drauf achten dass das Feld Range … nicht leer ist.
Sonst gehts nicht.
Man, hab ich gebraucht, bis ich da drauf gekommen bin
Danke
Ratz
Das ist reale Software-Entwicklung …
owT
owT
Folgefrage
Hallo
@Christian: Vielen Dank für die Antwort
@all: Es zeigt sich, dass der angegebene Datenbereich nicht leer sein darf, sonst gibts nen Laufzeitfehler.
Kann amn das abfangen, ungefähr so:
if …Range(„a5:a25“) ist leer then …
Ratz
So könnte es gehen.
Also eine einzelne vorgefertigte Funktion oderso fällt mir dazu jetzt nicht ein, aber mit dieser eigenen Funktion sollte es eigentlich gehen:
Function CheckRange(Bereich As String)
Dim Zelle As Range
CheckRange = False
For Each Zelle In Range(Bereich)
If Zelle.Value "" Then
CheckRange = True
Exit For
End If 'Zelle
Next Zelle
End Function 'CheckRange
Sub test()
MsgBox CheckRange("A7:C10")
End Sub 'test
Kristian
PS: Übrigens solltest Du Folgefragen nicht an Dich selbst stellen, dann bemerkt sie nämlich keiner, zumindest nicht per automatischer E-Mail-Meldung.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]