Probleme mit Range und SetSourceData in Excel VBA
Schritt-für-Schritt-Anleitung
-
Definiere das Arbeitsblatt und den Datenbereich:
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))
-
Verwende die SetSourceData-Methode:
With ActiveSheet.ChartObjects(1).Chart
.SetSourceData Source:=dRange
End With
Achte darauf, dass du die dRange korrekt übergibst.
Häufige Fehler und Lösungen
Alternative Methoden
-
Direkte Verwendung einer Formel:
Wenn du einen Bereich über eine Formel angeben möchtest, verwende:
With ActiveSheet.ChartObjects(1).Chart
.SetSourceData Source:="=sensor!B2:B" & lastRow
End With
-
Zugriff auf Diagrammblatt:
Wenn dein Diagramm auf einem eigenen Blatt ist, nutze:
With Charts("sensorDiagramm")
.SetSourceData Source:=dRange
End With
Praktische Beispiele
Beispiel 1: XY-Diagramm erstellen
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))
sp = 3 ' z.B. die Y-Daten in der dritten Spalte
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
Beispiel 2: Serie benennen
.SeriesCollection(1).Name = wsSensor.Cells(1, sp)
Tipps für Profis
FAQ: Häufige Fragen
1. Wie kann ich mehrere Datenreihen in einem Diagramm darstellen?
Verwende die Union-Funktion, um mehrere Bereiche zu kombinieren und über SetSourceData zu setzen.
2. Welche Fehler treten häufig bei der Verwendung von SetSourceData auf?
Ein häufiger Fehler ist der Anwendungs- oder objektdefinierte Fehler, der auftritt, wenn der übergebene Range nicht korrekt definiert ist. Stelle sicher, dass du die .Address-Eigenschaft verwendest, um den korrekten Adressbereich zu erhalten.