Schau dir mal dieses Beispiel an:
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:
Range("AC" & a + 2 & ":AI" & a + 2)
Die Schreibweise die du oben benutzt ist eigentlich für soetwas gedacht:
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.
Dim objChart As Excel.Chart
Set objChart = ActiveSheet.Shapes.AddChart2(332, xlLineMarkers).Chart
objChart.Parent.Name = "Test1234" 'setzt den Namen des eben erstellten Shapes
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.
|