Vinculando o nome de uma série de gráficos a um intervalo por meio do VBA

2

Gostaria de vincular o nome da série do gráfico a um intervalo na planilha, mas não a string inteira nesse intervalo. Por exemplo, em vez de vincular o nome a uma célula que contenha "201601", desejo que o nome da série seja 2016. Eu tentei usar Left (cell, 4) ao atribuir o nome, mas isso me dá um erro.

Código VBA atual

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

Como posso alterar meu código para fazer isso?

    
por rblade 26.02.2016 / 17:22

2 respostas

1

Quando você chama SeriesCollection.Name , o que o Excel está fazendo é atualizar a função SERIES() que define a série. SERIES() não pode aceitar funções para argumentos. Ele só aceita um intervalo, um intervalo nomeado ou um argumento de string.

Você precisará fazer isso em duas etapas, como esta:

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
    
por 26.02.2016 / 17:59
0

Você precisa colocar a fórmula em outra célula. Por exemplo, no P17, coloque esta fórmula:

=LEFT(P18,4)

Em seguida, use P17 como o intervalo que contém o nome da série (na caixa de diálogo Selecionar dados). Quando P18 mudar, a fórmula em P17 mudará, e assim será o nome da série no gráfico.

    
por 18.03.2016 / 21:05