Schau dir mal dieses Beispiel an:
1 2 3 4 5 | Dim a As Long
For a = 1 To 10
Debug.Print Range( "AC2:AI2" , "AC" & a + 2 & ":AI" & a + 2).Address
Next
|
Das tut nicht was du beschrieben hast:
Datenberiech soll sein: Datenreihenname immer $AC$2:$AI$2; Werte jeweils "AC" & a + 2 & ":AI" & a + 2 (Soll heißen idealerweise immer eine Zeile weiter in der Schleife).
Was du meinst ist schlicht und einfach:
1 | Range( "AC" & a + 2 & ":AI" & a + 2)
|
Die Schreibweise die du oben benutzt ist eigentlich für soetwas gedacht:
1 | Range( "AC" & a + 2, "AI" & a + 2)
|
Man gibt die obere linke und untere rechte Zelle an, um den daraus resultierenden Bereich zu erhalten. Das geht sowohl - wie hier - durch String-Literale als auch durch Range-Objekte.
Wenn du ein neues Diagramm erstellst, erhälst du die Referenz auf die Objekt-Instanz zurück - kein Grund also, mit ActiveChart zu arbeiten.
1 2 3 4 5 6 7 | Dim objChart As Excel.Chart
Set objChart = ActiveSheet.Shapes.AddChart2(332, xlLineMarkers).Chart
objChart.Parent.Name = "Test1234"
objChart.SetSourceData Source:= ...
|
Das gleiche würde auch auf ActiveSheet zutreffen, da man in der Regel weiß auf welches Blatt man sich beziehen will.
Allgemein gilt: Alles was mit Select und Active zu tun hat, ist meistens überflüssig und führt auch oft zu Fehlern.
|