Posso fornecer strings hexadecimais RGB em uma planilha do Excel para cores de gráfico de pizza sem usar código?

2

Como user1813558 em sua pergunta "Altere as cores do gráfico de pizza" Eu gostaria de escolher as cores que o Excel usa para um gráfico de pizza (na verdade, para qualquer gráfico), já que preciso que eles sejam consistentes com outras visualizações de dados que produzimos cuidadosamente, de modo que um parceiro de equipe daltônico ainda possa participar de sessões de pesquisa de dados. Mas, em vez de escrever código, gostaria de fazê-lo na planilha do Excel. Existe alguma maneira que eu posso colocar os dados de cor para baixo na planilha do Excel, por exemplo, como uma coluna de seqüências hexadecimais RGB como 7DFF7D, e apontar o gráfico nessa coluna para a sua escolha de cor?

    
por dumbledad 19.04.2013 / 17:22

1 resposta

2

O que você gostaria de fazer não é possível sem o código.

A função VBA a seguir pode ser usada para definir cores com base em valores de células para um gráfico de pizza na planilha ativa. Os valores de cor podem estar em um intervalo de N linhas x 3 colunas de valores RGB decimais ou um intervalo de N linhas x 1 colunas de valores hexadecimais de 6 dígitos (onde o número hexadecimal é um conjunto de três valores hexadecimais de 2 dígitos em ordem RGB).

A função requer dois argumentos: uma referência ao intervalo de valores de cor (A1: A5, por exemplo) e o nome do gráfico de pizza. O nome do gráfico pode ser um nome padrão (como "Gráfico 2") ou um nome dado ao gráfico.

Se o número de colunas no intervalo de entrada não for igual a 3 ou 1, ou o número de linhas não for igual ao número de pontos de dados no gráfico de pizza, a função retornará # N / A! erro.

Um gráfico recolored reterá as novas cores depois que a função for excluída da planilha.

Option Explicit

  Function SETPIECOLORS(colorRng As Range, chartName As String) As Variant    
      Dim colorArr As Variant
      Dim myChartObject As ChartObject
      Dim i As Long
      Set myChartObject = ActiveSheet.ChartObjects(chartName)
'     // Assign RGB decimal color values to array
      If colorRng.Columns.Count = 3 Then
          colorArr = colorRng
'     // Assign RGB hex color values to array
      ElseIf colorRng.Columns.Count = 1 Then
          ReDim colorArr(1 To colorRng.Rows.Count, 1 To 3)
          For i = 1 To colorRng.Rows.Count
              colorArr(i, 1) = "&H" & Left(colorRng(i).Value, 2)
              colorArr(i, 2) = "&H" & Mid(colorRng(i).Value, 3, 2)
              colorArr(i, 3) = "&H" & Mid(colorRng(i).Value, 5, 2)
          Next
      Else
'         // Number of columns in color range not equal to 1 or 3
          SETPIECOLORS = CVErr(xlErrNA)
          Exit Function
      End If
      With myChartObject
          With .Chart.SeriesCollection(1)
              If UBound(colorArr, 1) = .Points.Count Then
'                 // Set the colors of the pie data points
                  For i = 1 To .Points.Count
                      .Points(i).Interior.Color = RGB(colorArr(i, 1), colorArr(i, 2), colorArr(i, 3))
                  Next
              Else
'                 // Number of rows in color range does not equal number of data points
                  SETPIECOLORS = CVErr(xlErrNA)
                  Exit Function
              End If
          End With
      End With
      SETPIECOLORS = True
  End Function

A função pode ser instalada copiando-a para um novo módulo inserido através do menu Desenvolvedor / Visual Basic acessado a partir da faixa do Excel.

    
por 20.04.2013 / 02:59