Excel 2003 Makro programmieren mit Variable

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 :wink:

  1. 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…

  2. 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 :wink:

Ich habe nicht immer was gegen Unterforderungen :wink:

  1. 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?

  1. 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 :smile:

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