Hallo,
ich möchte gerne ein Makro programmieren, dass eine Datenreihe zu einem bestehenden Diagramm zufügt. Der Programmcode wäre folgender:
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).XValues = „=Sheet1!R1C1:R10C1“
ActiveChart.SeriesCollection(2).Values = „=Sheet1!R1C2:R10C2“
ActiveChart.SeriesCollection(2).Name = „=“„Datenreihe“""
Ich würde aber gerne die ausgewählte Spalte (Column, C aus dem Programmcode)variabel machen, und z.B. am Anfang des Makros irgendwie festlegen ob die zweite, dritte oder vierte Spalte ausgewählt werden soll. Wie kann ich in den Teil „=Sheet1!R1C1:R10C1“ anstelle von ‚C1‘ eine Variable einfügen, die vorher definiert wird?
Hallo cons123,
Du könntest vorher abfragen, welche Spalte zu nehmen ist. Und am einfachsten fragst Du nicht nach dem Spaltenbuchstaben, sondern der Spalte als Zahl.
Dim lngSpalte as long
lngSpalte=InputBox(„Welche Spalte? (Bitte Nummer eingeben!)“)
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).XValues = „=Sheet1!R1C1:R10C1“
ActiveChart.SeriesCollection(2).Values = „=Sheet1!R1C“&lngNummer &":R10C"& lngNummer
ActiveChart.SeriesCollection(2).Name = „=“„Datenreihe“""
So ungefähr, nicht schön, aber selten…
Gruß, Manfred
Vielen Dank, das hat sehr geholfen!
Ich hab einfach in der ersten Zele i=21 eingefügt, und dann
ActiveChart.SeriesCollection(2).Values = „=Sheet1!R1C“&i &":R10C"& i
Das reicht mir erstmal so.
Ich hab dich mit meiner Frage wohl unterfordert, deshalb hab ich noch zwei Anschlussfragen 
-
Wenn ich in die Zeile ActiveChart.SeriesCollection(2).Name = „=“„Datenreihe“"" einfach noch die Zahl der Variablen anfügen will, sodass da Datenreihe1, Datenreihe2 usw. steht, wie mach ich das? Komme mit der Syntax noch nicht so ganz zurecht, es müsste irgendwie so gehen: ActiveChart.SeriesCollection(2).Name = „=“„Datenreihe“" & i &"
Hab da schon viel ausprobiert, aber klappt noch nicht…
-
In der Zeile ActiveChart.SeriesCollection(2)
bedeutet die „(2)“ ja, die wievielte Datenreihe gemeint ist. Kann ich irgendwie abfragen, wieviel Datenreihen schon in dem Diagramm sind, so dass die neue Datenreihe direkt als letzte Datenreihe eingefügt wird?
Danke für eure Hilfe!
Hallo cons123,
Das reicht mir erstmal so.
Ich hab dich mit meiner Frage wohl unterfordert, deshalb hab
ich noch zwei Anschlussfragen 
Ich habe nicht immer was gegen Unterforderungen 
- Wenn ich in die Zeile
ActiveChart.SeriesCollection(2).Name =
„=“„Datenreihe“"" einfach noch die Zahl der
Variablen anfügen will, sodass da Datenreihe1, Datenreihe2
usw. steht, wie mach ich das? Komme mit der Syntax noch nicht
so ganz zurecht, es müsste irgendwie so gehen:
ActiveChart.SeriesCollection(2).Name =
„=“„Datenreihe“" & i &"
Hab da schon viel ausprobiert, aber klappt noch nicht…
ActiveChart.SeriesCollection(2).Name = „=“„Datenreihe " & i &“"""
Das ist ein wenig kompliziert. Eigentlich willst Du folgenden Namen vergeben:
Datenreihe
_Als Name-Eigenschaft kommt der Text in Anführungszeichen mit einem Gleichheitszeichen davor, also:
="Datenreihe "
Und da ds als String genommen zugewiesen werden soll, das Anführungszeichen aber als String-Kennzeichnung (Anfang und Ende) fungiert, werden diese innerhalb einer Zeichenfolge verdoppelt.
Also:
=""Datenreihe „“
mit der Zuweisung:
…Name = „=“„Datenreihe „““
Das ist aber ein String, dann & i und dann wieder das Text-Endezeichen, also ". Und das ergibt dann
„=“„Datenreihe " & i &“"""
x x Begrenzung erster Teil-String
x x Begrenzung zweiter Teil-String
x dazwischen Deine Nummer
xx xx Anführungszeichen für den Namen innerhalb des Strings
Ungefähr klar geworden?
- In der Zeile
ActiveChart.SeriesCollection(2)
bedeutet die „(2)“ ja, die wievielte Datenreihe gemeint ist.
Kann ich irgendwie abfragen, wieviel Datenreihen schon in dem
Diagramm sind, so dass die neue Datenreihe direkt als letzte
Datenreihe eingefügt wird?
Das ist nicht wirklich spannend:
ActiveChart.SeriesCollection.count
Gruß, Manfred_
Super!
Vielen Dank, auch für die ausführliche Erklärung mit den " " " "
Hätte gedacht, dass z. b. das erste " und das letzte " zusammengehören müssten…
Die Antwort auf meine 2. Frage hatte ich mir komplizierter vorgestellt. Um so besser 
Viele Grüße!
Hallo Cons,
Vielen Dank, auch für die ausführliche Erklärung mit den " " "
"
schön, daß du das verstanden hast. Vielleicht kannste das auch verstehen/anwenden:
Sub tt()
Dim i, j
i = 7
j = „8“
ActiveSheet.ChartObjects(„Diagramm 1“).Activate
ActiveChart.SeriesCollection(1).Name = „Datenreihe“ & i & j
End Sub
i und j sind nur da um dir zu zeigen daß i/j Text oder zahlen sein können.
Und grundsätzlich merk dir das so, in Vba brauchst du für jedes " was in Excel erscheinen soll zwei ". " die du wie sonst in Vba benutzt brauchste nur einmal.
Beispiel: Du willst in A1 die Formel schreiben:
=Wenn(B1>5;„größer“;"")
dann sieht das so in Vba aus:
range(„A1“).formulalocal="=WENN(B1>5;"„größer“";"""")"
In Excel kommt daraus dieses an:
=WENN(B1>5;"„größer“";"""")
Excel macht dann aus ankommenden zwei „“ wieder ein „, ergo:
=WENN(B1>5;„größer“;“")
Ist gar nicht schierig, aber natürlich schwierig Fehler in langen Ausdrücken zu suchen wenn es da von " wimmelt.
Abhilfe kenne ich nur eine, " entspricht dem Zeichen 34.
Dann sieht
range(„A1“).formulalocal="=WENN(B1>5;"„größer“";"""")"
so aus:
range(„A1“).formulalocal="=WENN(B1>5;" & chr(34) & „größer“ & chr(34) & „;“ & Chr(34) & Chr(34) & „)“
Das mag für dich als ungewohnt und verwirrend erscheinend, ist aber m.E. leichter auf Fehler zu überprüfen als zig " in Folge.
Gruß
Reinhard