none
Manipulando Gráficos RRS feed

  • Pergunta

  •  

    Prezados Senhores,


    gostaria de saber como faço para atribuir um nome a um gráfico e fazer referência através do VBA ao mesmo, do tipo: alterar os valores de suas séries e/ou adicionar novas séries.


    Muito grato!!
    segunda-feira, 17 de março de 2008 01:55

Respostas

  • Jardyson,

    Os códigos abaixo foram criados para a versão 2003.

     

    Code Snippet
    Sub Adicionar_Série()
        Set Obj_Gráfico = Worksheets(1).ChartObjects("Gráfico 1")
        Obj_Gráfico.Activate
        ActiveChart.SeriesCollection.Add Source:=Sheets("Plan1").Range("C2:C5")
    End Sub

     

     

    e

     

    Code Snippet

    Sub Adicionar_Dados()
        Set Obj_Gráfico = Worksheets(1).ChartObjects("Gráfico 1")
        Obj_Gráfico.Activate
        ActiveChart.SeriesCollection(1).Formula = _
            "=SERIES(,Plan1!R2C1:R6C1,Plan1!R2C2:R6C2,1)"
    End Sub

     

     

    [ ]s

    segunda-feira, 17 de março de 2008 23:22

Todas as Respostas

  • Jardyson,

    Qual a versão do excel que vc está utilizando?

    Os objetos variam um pouco conforme a versão.

    Na versão 2007, por exemplo, vc atribui os valores de uma série usando um comando como abaixo. Neste exemplo é atribuído o intervalo C5:T5 da planilha "Sheet1" à primeira série do Gráfico "Graph1".

    Code Snippet
    Charts("Chart1").SeriesCollection(1).Values = Worksheets("Sheet1").Range("C5:T5")

     

     Neste outro exemplo, é adicionado ao mesmo gráfico uma nova série, com valores no intervalo B1:B10 da mesma "Sheet1"
    Code Snippet
     Charts("Chart1").SeriesCollection.Add Source:=ActiveWorkbook.Worksheets("Sheet1"). _Range("B1:B10")

     

     

    E este último modifica o nome de Chart1 para Gráfico_Teste

    Code Snippet
    Charts("Chart1").Name = "Gráfico_Teste"

     

     

    Espero que atenda à tua dúvida.

     

    [ ]s

    segunda-feira, 17 de março de 2008 12:03
  • Prezado Adilson,

     

    obrigado pela atenção!

     

    Atualmente utilizo o Office 2003. Estas sintaxes funcionam também nesta versão?  Eu esqueci de comentar uma coisa, estou tratando os gráficos como OBJETOS nas planilhas, e não como uma planilha, entende?

     

     

    Fico no aguardo!

     

     

    Abraços!

    segunda-feira, 17 de março de 2008 12:17
  • No caso de serem objetos incorporados em planilhas, a sintaxe ficaria:

    Code Snippet
    Worksheets("Sheet1").ChartObjects("Chart1").Chart.SeriesCollection(1).Values = Worksheets("Sheet1").Range("C5:T5")

     

     

    Não sei te dizer de imeditato se funciona para a versão 2003, já que migramos aqui no serviço para 2007 e estou sem uma máquina na versão anterior para testar.

    Veja se funciona e se ocorrer algum problema, poste aqui que eu vejo à noite em casa na versão 2003, ok?

    Segue abaixo link da microsoft com a estrutura de objetos gráficos e exemplos de VBA:

    http://msdn2.microsoft.com/en-us/library/aa213725(office.11).aspx

    Outro link com várias aplicações de VBA em gráficos:

    http://peltiertech.com/Excel/ChartsHowTo/QuickChartVBA.html

     

    [  ]s

    segunda-feira, 17 de março de 2008 13:34
  • Adilson, bom dia!

     

     

    E em relação à alteração do nome do objeto (o gráfico) para fazer referência ao objeto com um nome determinado por mim?

     

     

    Obrigado pela atenção!

     

     

     

     

    segunda-feira, 17 de março de 2008 13:38
  • A sintaxe é bem parecida:

     

    Code Snippet

    Sheets(1).ChartObjects(1).Name = "NomeDesejado"

     

     

    ou

     

    Code Snippet

    Worksheets("Sheets1").ChartObjects("Chart1").Name = "NomeDesejado"

     

     

     

    [ ]s

     

    segunda-feira, 17 de março de 2008 13:55
  • Seguindo sua linha de raciocínio,

     

    após eu declarar o gráfico ("Chart1") como o "NomeDesejado", como eu poderia alterar os valores da série fazendo referência através do "NomeDesejado" ?

     

     

    Abraços.

     

    segunda-feira, 17 de março de 2008 17:39
  • Vamos lá:

    Existem duas opções para o que vc quer realizar

    1. Renomear um gráfico de uma planilha para um nome que facilite o seu reconhecimento

    2. Atribuir um gráfico a uma variável objeto durante a execução de um procedimento.

     

    Coloquei abaixo os códigos para ambos os casos, atribuindo o Intervalo C5:T5 como fonte dos dados para Série 1 do gráfico.

     

    No caso da opção 1, teríamos

     

    Code Snippet

    Worksheets("Sheet1").ChartObjects("Chart1").Name = "NomeDesejado"

    Worksheets("Sheet1").ChartObjects("NomeDesejado").SeriesCollection(1).Values = _
    Worksheets("Sheet1").Range("C5:T5")

     

    No caso da opção 2, teríamos

     

    Code Snippet

    Set NomeDesejado = Worksheets("Sheet1").ChartObjects("Chart1")

    NomeDesejado.SeriesCollection(1).Values = Worksheets("Sheet1").Range("C5:T5")

     

    [ ]s

    segunda-feira, 17 de março de 2008 17:54
  • Saudações,

     

    segui os passos acima conforme sugerido:

     

    1- Dim Grafico As Object


    2- Set Grafico = Worksheets("Plan1").ChartObjects("Gráfico 1")
    3- Grafico.SeriesCollection(1).Values = Worksheets("Plan1").Range("C5:T5")

     

    Porém na 3a linha, me aparece o seguinte erro: Erro tem tempo de execução 438. O objeto não aceita esta propriedade ou método.

     

     

     

    Caso você possua um exemplo e possa mandar para meu e-mail: jardyson@hotmail.com

     

    Se puder, envia pelo e-mail e vamos continuar o debate por aqui.

     

     

    Abraços.

    segunda-feira, 17 de março de 2008 20:45
  • Jardyson,

    Deve ser realmente uma questão de versão.

    Agora à noite vou verificar o que está acontecendo na versão 2003 do Excel e te respondo tão logo tenha uma solução.

    [ ]s

    segunda-feira, 17 de março de 2008 20:57
  • Jardyson,

    Os códigos abaixo foram criados para a versão 2003.

     

    Code Snippet
    Sub Adicionar_Série()
        Set Obj_Gráfico = Worksheets(1).ChartObjects("Gráfico 1")
        Obj_Gráfico.Activate
        ActiveChart.SeriesCollection.Add Source:=Sheets("Plan1").Range("C2:C5")
    End Sub

     

     

    e

     

    Code Snippet

    Sub Adicionar_Dados()
        Set Obj_Gráfico = Worksheets(1).ChartObjects("Gráfico 1")
        Obj_Gráfico.Activate
        ActiveChart.SeriesCollection(1).Formula = _
            "=SERIES(,Plan1!R2C1:R6C1,Plan1!R2C2:R6C2,1)"
    End Sub

     

     

    [ ]s

    segunda-feira, 17 de março de 2008 23:22
  •  

    Muito bom!

    Obrigado Adilson!

    segunda-feira, 17 de março de 2008 23:51