在VBA中获取单元格颜色并将其复制到饼图中
有没有人能告诉我一种简单而直接的方法,将工作表中单元格的颜色读入VBA,然后使用RGB代码或其他什么来给饼图的一部分着色 我正在努力在VBA中获取单元格颜色并将其复制到饼图中,vba,excel,Vba,Excel,有没有人能告诉我一种简单而直接的方法,将工作表中单元格的颜色读入VBA,然后使用RGB代码或其他什么来给饼图的一部分着色 我正在努力 Function rgb_color(cl As Range) As String Dim rgbc As Long, rc As Long, gc As Long, bc As Long If cl.Cells.Count = 1 Then rc = cl.Interior.Color Mod 256 rgbc = Int(cl.Interior.Col
Function rgb_color(cl As Range) As String
Dim rgbc As Long, rc As Long, gc As Long, bc As Long
If cl.Cells.Count = 1 Then
rc = cl.Interior.Color Mod 256
rgbc = Int(cl.Interior.Color / 256)
gc = rgbc Mod 256
bc = Int(rgbc / 256)
Else
End If
End Function
Sub ColorScheme(cht As Chart, i As Long)
Dim Colors
Select Case i Mod 10
Case 0
rgb_color (C2)
rgb_color (C3)
rgb_color (C4)
所以第一部分是从单元格中获取RGB代码的函数,我有各种各样的图表要着色,这就是我选择不同case语句的原因。我知道如果需要,我可以手动绘制RGB颜色,但是有没有一种简单的方法可以将三个单元格(C2到C4)中每个单元格的不同rc、bc、gc变量用作RGB值?它看起来像一个数组
RGB(rc of C2; gc of C2; bc of C2)
same for C3 and C4
那么下一个病例是否采用相同的程序
''######################################################
编辑Tim的评论
如果我得到蒂姆(下面的评论)的正确答案,我可以写
Sub ColorScheme(cht As Chart, i As Long)
Dim Colors
Select Case i Mod 10
Case 0
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(x).Format.Fill.ForeColor.RGB = Range("A1").Interior.Color
如果这是错误的,有人可能会纠正我吗?这正好说明了如何去做(或者至少我会怎么做)。这取决于你去做
Sub Tester()
Dim cht As Chart, x As Long
Set cht = ActiveSheet.ChartObjects(1).Chart
For x = 0 To 1
'set pie chart source data
SetColorScheme cht, x 'this will apply the color scheme
cht.CopyPicture
'...paste to point in other chart
Next x
End Sub
'set the color scheme on the passed chart object
Sub SetColorScheme(cht As Chart, i As Long)
Dim y_off As Long, rngColors As Range
Dim x As Long
y_off = i Mod 10
'this is the range of cells which has the colors you want to apply
Set rngColors = ThisWorkbook.Sheets("colors").Range("A1:C1").Offset(y_off, 0)
With cht.SeriesCollection(1)
'loop though the points and apply the corresponding fill color from the cell
For x = 1 To .Points.Count
.Points(x).Format.Fill.ForeColor.RGB = _
rngColors.Cells(x).Interior.Color
Next x
End With
End Sub
从大约一天前开始,这看起来有点熟悉。。。无论如何,单元格的
Interior.Color
是一种长数据类型,您可以直接将其指定为图表数据系列中点的填充颜色。无需将其拆分为3个组件。仅供参考:回滚到原始版本以删除在后续编辑中添加的过多粗体。如何将Interior.Color(A1)与case命令一起使用?你能提供一个例子,我如何将其归因于图表系列中颜色点的填充?如果你不想尝试(编写一行测试程序有多困难?),那么我将等待你重新考虑。你不必重写整个过程来尝试这样一个简单的方法。在这一点上,我不得不建议(根据我假设的是您以前的帖子),您需要首先了解VBA是如何工作的,然后再继续。有很多非常好的书,值得你花时间去投资。你把cht
作为参数传递给ColorScheme
,但忽略了它?这就是我的意思,在继续之前需要对VBA有一些基本的了解。您需要能够修改此处人员提供的示例,以便它们适合您的具体情况。如果没有这种能力,你会让我们反复猜测你到底想做什么。这让双方都感到沮丧。代码中的注释到底表明了什么。你说的第一点是“设置饼图源日期”,这是对你在该句下面的行中所写内容的注释,还是必须插入一行?是否有机会从excel中的单元格中读取该代码范围的值..以便只需输入范围值,然后从单元格中读取???1。是-您需要设置数据范围2。是-如果您愿意,可以这样做…tim,Sub-SetColorScheme在设置rngColors=ThisWorkbook.Sheets(“颜色”).Range(“A1:C1”).Offset(y_off,0)时返回了一个错误,消息下标超出范围。您知道此错误是如何导致的吗?可能是包含宏的工作簿中没有名为colors
的工作表,或者您为y\u off指定了无效的值