Verknüpfen des Namens einer Diagrammserie mit einem Bereich über VBA

2

Ich möchte den Namen der Diagrammserie mit einem Bereich in meinem Arbeitsblatt verknüpfen, aber nicht mit der gesamten Zeichenfolge in diesem Bereich. Anstatt den Namen mit einer Zelle zu verknüpfen, die "201601" enthält, soll der Serienname beispielsweise 2016 lauten. Ich habe versucht, Left (Zelle, 4) zu verwenden, während ich den Namen zugewiesen habe, aber es wird ein Fehler angezeigt.

Aktueller VBA-Code

Sub changeLinks()
For i = 1 To ActiveSheet.ChartObjects.Count
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(1).Name = "=Left(" & Range("P18").Address(, , , True) & ",4)"
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(2).Name = "=Left(" & Range("I18").Address(, , , True) & ",4)"
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(3).Name = "=Left(" & Range("B18").Address(, , , True) & ",4)"
Next i    
End Sub

Wie kann ich meinen Code ändern, um dies zu tun?

rblade
quelle
Können Sie Ihr aktuelles VBA veröffentlichen, damit wir versuchen können, es zu debuggen?
Jonno

Antworten:

1

Wenn du anrufst SeriesCollection.Name, was Excel tut, aktualisiert das SERIES() Funktion, die die Serie definiert. SERIES() Funktionen für Argumente können nicht akzeptiert werden. Es kann nur einen Bereich, einen benannten Bereich oder ein Zeichenfolgenargument akzeptieren.

Sie müssen dies in zwei Schritten tun:

Sub changeLinks()
Dim i&
Dim name1$, name2$, name3$

name1 = Left(Range("P18").Value, 4)
name2 = Left(Range("I18").Value, 4)
name3 = Left(Range("B18").Value, 4)

For i = 1 To ActiveSheet.ChartObjects.Count
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(1).Name = name1
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(2).Name = name2
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(3).Name = name3
Next i
End Sub
Kyle
quelle
Das Problem dabei ist, dass der Name der Serie statisch ist. Wenn ich den Wert in der Zelle ändere, wird das Diagramm auch nicht aktualisiert. Ich muss ungefähr 100 Diagramme mit jeweils 3 Reihen ändern, weshalb ich dies auf VBA tun möchte. Danach aktualisiere ich nur die Zellenwerte, damit die Diagramme dynamisch sind
rblade
1
@rblade Verwenden Sie eine Ereignisprozedur, um das Makro immer dann auszuführen, wenn diese Zellen geändert werden, oder verwenden Sie einen anderen Bereich, der Formeln verwendet, um den gewünschten Namen zu erhalten.
Kyle
0

Sie müssen die Formel in eine andere Zelle einfügen. Geben Sie beispielsweise in P17 die folgende Formel ein:

=LEFT(P18,4)

Verwenden Sie dann P17 als Bereich, der den Seriennamen enthält (im Dialogfeld Daten auswählen). Wenn sich P18 ändert, ändert sich die Formel in P17 und auch der Serienname im Diagramm.

Jon Peltier
quelle