none
Criar condição em código VBA do Excel RRS feed

  • Pergunta

  • Olá a todos,
     
    Criei um código para formatação de um gráfico dinâmico, porém este tipo de gráfico nem sempre tem todas as série visíveis.
    Por isso, preciso criar uma condição onde somente as séries visíveis no gráfico dinâmico sejam formatadas, sem mostrar msg de erro caso uma delas não esteja visível no momento.
    No total, tenho 4 séries no gráfico. No código abaixo, estou mostrando apenas 2 como exemplo. Caso a série TESTE1 não esteja visível, o código deve executar a formatação da série TESTE2. Se nenhuma das duas estiverem visíveis, então nada acontece.
     
    O código que estou utilizando é o seguinte:
     
    Sub Formatar_Graficos( )
      'FORMATA A SÉRIE TESTE1
      ActiveChart. SeriesCollection (3).Select
        With Selection.Border
            .ColorIndex = 3
            .Weight = xlMedium
            .LineStyle = xlContinuous
        End With
        With Selection
            .MarkerBackgroundCo lorIndex = xlNone
            .MarkerForegroundCo lorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            .MarkerSize = 3
            .Shadow = False
        End With
     
    'FORMATA A SÉRIE TESTE2
        ActiveChart. SeriesCollection (1).Select
        With Selection.Border
            .ColorIndex = 11
            .Weight = xlMedium
            .LineStyle = xlContinuous
        End With
        With Selection
            .MarkerBackgroundCo lorIndex = xlNone
            .MarkerForegroundCo lorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            .MarkerSize = 3
            .Shadow = False
        End With
    End Sub
     
    Obrigado,
     
    Zé Garcia.
    quinta-feira, 18 de janeiro de 2007 11:36

Respostas

  • Boa noite Zé!

    Acho que usando simplesmente:

    [x = ActiveChart.SeriesCollection.Count]

    e em seguida

    [For i = 1 To x
            ActiveChart.SeriesCollection(i).Select

            ...]

    resolve o seu problema.

    Espero ter ajudado.


    Filipe Magno

    sábado, 29 de setembro de 2012 00:26
  • Pelo que entendi, você quer apenas formatar as bordas das séries do seu gráfico, certo? Adapte o código abaixo:

    Sub Exemplo()
        Dim cht As Chart
        Dim srs As Series
        Dim lCor As Long
    
        'Mude o nome do gráfico abaixo para adequar o código
        Set cht = ActiveSheet.ChartObjects("Gráfico 3").Chart
    
        For Each srs In cht.SeriesCollection
            Select Case srs.Name
                'mude o valor das cores conforme desejado
                Case "TESTE1": lCor = RGB(255, 0, 0)
                Case "TESTE2": lCor = RGB(0, 255, 0)
                Case "TESTE3": lCor = RGB(0, 0, 255)
                Case "TESTE4": lCor = RGB(127, 127, 127)
            End Select
            srs.Format.Line.ForeColor.RGB = lCor
        Next srs
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 29 de setembro de 2012 20:50
    Moderador

Todas as Respostas

  • Bom dia Zé !

    Tenta usar esse código. Eu não testei, não garanto que irá funcionar.

    Sub Formatar_Graficos( )
      'FORMATA A SÉRIE TESTE1
      If ActiveChart.SeriesCollection (3).Visible = True Then
      ActiveChart. SeriesCollection (3).Select
        With Selection.Border
            .ColorIndex = 3
            .Weight = xlMedium
            .LineStyle = xlContinuous
        End With
        With Selection
            .MarkerBackgroundCo lorIndex = xlNone
            .MarkerForegroundCo lorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            .MarkerSize = 3
            .Shadow = False
        End With
      End If
     
    'FORMATA A SÉRIE TESTE2
        If ActiveChart.SeriesCollection (1).Visible = True Then
        ActiveChart. SeriesCollection (1).Select
        With Selection.Border
            .ColorIndex = 11
            .Weight = xlMedium
            .LineStyle = xlContinuous
        End With
        With Selection
            .MarkerBackgroundCo lorIndex = xlNone
            .MarkerForegroundCo lorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            .MarkerSize = 3
            .Shadow = False
        End With
       End If
    End Sub
    quinta-feira, 18 de janeiro de 2007 13:13
  • Marlon, Infelizmente desta forma não funciona.

    Muito obrigado por sua atenção,

    Zé Garcia.

    quinta-feira, 18 de janeiro de 2007 18:10
  • Boa noite Zé!

    Acho que usando simplesmente:

    [x = ActiveChart.SeriesCollection.Count]

    e em seguida

    [For i = 1 To x
            ActiveChart.SeriesCollection(i).Select

            ...]

    resolve o seu problema.

    Espero ter ajudado.


    Filipe Magno

    sábado, 29 de setembro de 2012 00:26
  • Pelo que entendi, você quer apenas formatar as bordas das séries do seu gráfico, certo? Adapte o código abaixo:

    Sub Exemplo()
        Dim cht As Chart
        Dim srs As Series
        Dim lCor As Long
    
        'Mude o nome do gráfico abaixo para adequar o código
        Set cht = ActiveSheet.ChartObjects("Gráfico 3").Chart
    
        For Each srs In cht.SeriesCollection
            Select Case srs.Name
                'mude o valor das cores conforme desejado
                Case "TESTE1": lCor = RGB(255, 0, 0)
                Case "TESTE2": lCor = RGB(0, 255, 0)
                Case "TESTE3": lCor = RGB(0, 0, 255)
                Case "TESTE4": lCor = RGB(127, 127, 127)
            End Select
            srs.Format.Line.ForeColor.RGB = lCor
        Next srs
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 29 de setembro de 2012 20:50
    Moderador