Como usar o Excel 2010 VBA para definir a cor da linha da série, o preenchimento do marcador e a cor da linha do marcador

3

Estou tentando escrever uma sub-rotina VBA do Excel 2010 para formatar gráficos de acordo com um padrão predefinido (por exemplo, definido por mim). Os atributos específicos que desejo definir são meramente os atributos que ficam disponíveis na janela Formatar Série de Dados, que é aberta quando você clica duas vezes em uma série de dados.

Em um esforço para descobrir os nomes das várias propriedades que precisaria definir, gravei como macro as alterações que estava fazendo no estilo da série de dados. No entanto, embora eu possa definir a cor da linha ea cor da linha de marcador para cores diferentes através da janela Formatar série de dados, a macro gravada (anotada abaixo) se refere a objetos identicamente nomeados (indistinguíveis) para a cor da linha ea cor da linha de marcador.

Além disso, quando eu realmente executo a macro, há dois problemas. Primeiro, apesar do fato de que a macro gravada se refere à propriedade de preenchimento de marcador .ForeColor.Brightness , essa linha produz um erro quando as macros são executadas. O erro diz: "O brilho do objeto ColorFormat falhou" Segundo, o código gravado define simultaneamente a cor da linha do marcador e a linha principal da série, portanto, no código gravado, eles são os primeiros definidos para o que eu esperava que fosse o marcador Line Color e, em seguida, ambos definidos para o que eu queria para a cor da linha principal.

Como faço para definir o preenchimento do marcador, a cor da linha do marcador e a cor da linha.

Sub Macro1()
'
' Macro6 Macro
' On Sheet 1 there is a single embedded chrt 
  ActiveSheet.ChartObjects("Chart 1").Activate
  ActiveChart.SeriesCollection(1).Select
  With Selection.Format.Fill
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorText1
    .ForeColor.TintAndShade = 0
'    The following (recorded line produces an error)
    .ForeColor.Brightness = 0.5
    .Transparency = 0
    .Solid
  End With
  With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent5
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = 0.400000006
    .Transparency = 0
  End With
  With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent6
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = -0.5
    .Transparency = 0
  End With
End Sub
    
por user02814 16.12.2014 / 11:24

3 respostas

4

Parece que essas opções de formatação foram implementadas de maneira um pouco estranha no Excel 2010 e 2013:

  1. A cor da linha e as propriedades são definidas como o código de macro as registrou, usando o objeto Series.Format e seus filhos ( Fill , Glow , Shadow , etc. [1]).
  2. A cor de preenchimento do marcador para todos os marcadores na série é definida com Series.MarkerBackgroundColor ou Series.MarkerBackgroundColorIndex . Da mesma forma, a cor da linha do marcador para todos os marcadores da série é definida com Series.MarkerForegroundColor ou Series.MarkerForegroundColorIndex . [2]
  3. Como alternativa, o preenchimento do marcador e as cores da linha podem ser definidos individualmente por meio dos objetos Series.Points(n).Format.Fill e Series.Points(n).Format.Line . No entanto , pelo menos no Excel 2013, alterar Series.Points(n).Format.Line.ForeColor também altera a cor do segmento de linha imediatamente anterior o ponto de dados relevante.

As propriedades de # 2 parecem com as sobras do DOM anterior do Excel, embora com funcionalidade expandida em termos de .MarkerForegroundColor e .MarkerBackGroundColor aceitando qualquer valor RGB. As do nº 3 são consistentes com o novo nível de configurabilidade encontrado no Excel 2010 e mais recente, mas aparecem com erros. Um aspecto irritante do bugginess é que parece que as cores da linha do marcador são problematicamente entrelaçadas com a cor da linha da série - até onde eu posso dizer, é impossível alterar a cor da linha sem afetar as cores da linha do marcador, e versa. Em particular, parece que é impossível obter uma cor de linha de série uniforme, aplicando também variações ponto-a-ponto na cor da linha de marcação usando o VBA. (Novamente, estou testando aqui no Excel 2013; 2010 pode se comportar de maneira diferente.)

Em qualquer caso, em situações em que ajustes de cores ponto-a-ponto não são necessários, uma função auxiliar como a seguinte pode ser útil para fazer alterações na cor da linha sem afetar o preenchimento do marcador ou as cores da linha (aqui newLineColor é especificado como um valor longo de RGB [3]):

Sub ChangeLineColorOnly(srs as Series, newLineColor as Long)
    Dim oldMkrFill as Long, oldMkrLine as Long

    ' Store old marker colors
    oldMkrFill = srs.MarkerBackgroundColor
    oldMkrLine = srs.MarkerForegroundColor

    ' Set the series ForeColor
    srs.Format.Fill.ForeColor.RGB = newLineColor

    ' Restore the old marker colors
    srs.MarkerBackgroundColor = oldMkrFill
    srs.MarkerForegroundColor = oldMkrLine

End Sub

Uma versão alternativa da função auxiliar acima poderia ser facilmente escrita para acomodar as cores especificadas como uma SchemeColor [4], ou para armazenar apenas a cor da linha do marcador, etc.

Quanto à .ForeColor.Brightness glitch, presumivelmente foi resultado da recodificação descuidada da funcionalidade 'Gravar Macro' no desenvolvimento da versão do Excel 2010. Ele provavelmente só deveria ter sido inserido no código VBA gravado para certos tipos de gráficos, onde .Brightness é um atributo válido a ser modificado.

[1] link
[2] link
[3] link
[4] link

    
por 27.12.2014 / 05:47
0

Isso funciona para mim.

   ActiveChart.FullSeriesCollection(1).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    With Selection.Format.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
    End With
    
por 09.03.2018 / 16:42
-1

Eu pensei que isso funcionou para mim também, EXCETO que ele torna o preenchimento VERMELHO não importando os valores de RGB que eu coloquei.

ActiveChart.FullSeriesCollection (1) .Selecione     Com Selection.Format.Fill         .Visible = msoTrue         .ForeColor.RGB = RGB (255, 0, 0)         .Transparência = 0         .Sólido     Terminar com

    
por 11.05.2018 / 22:58