我可以在不使用代码的情况下在 Excel 工作表中为饼图颜色提供 RGB 十六进制字符串吗?

我可以在不使用代码的情况下在 Excel 工作表中为饼图颜色提供 RGB 十六进制字符串吗?

就像 user1813558 在他的问题中所说的那样“更改饼图颜色”我想选择 Excel 用于饼图(实际上适用于任何图表)的颜色,因为我需要它们与我们精心制作的其他数据可视化保持一致,以便色盲团队成员仍能加入数据拖网会议。但我更愿意在 Excel 表中执行此操作,而不是编写代码。我有没有办法将颜色数据放在 Excel 工作表中,例如作为 RGB 十六进制字符串列,如 7DFF7D,并将图表指向该列以进行颜色选择?

答案1

如果没有代码,你想做的事情就不可能实现。

以下 VBA 函数可用于根据活动工作表中的饼图单元格值设置颜色。颜色值可以是 N 行 x 3 列范围的十进制 RGB 值,也可以是 N 行 x 1 列范围的 6 位十六进制值(其中十六进制数是一组按 RGB 顺序排列的三个 2 位十六进制值)。

该函数需要两个参数:对颜色值范围(例如 A1:A5)的引用和饼图的名称。图表名称可以是默认名称(例如“图表 2”),也可以是为图表指定的名称。

如果输入范围中的列数不等于 3 或 1,或者行数不等于饼图中的数据点数,则该函数返回 #N/A! 错误。

从工作表中删除该函数后,重新着色的图表将保留新的颜色。

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

可以通过将该功能复制到通过从 Excel 功能区访问的开发人员/Visual Basic 菜单插入的新模块中来安装该功能。

相关内容