Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中获取单元格颜色并将其复制到饼图中_Vba_Excel - Fatal编程技术网

在VBA中获取单元格颜色并将其复制到饼图中

在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

有没有人能告诉我一种简单而直接的方法,将工作表中单元格的颜色读入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.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.For‌eColor.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指定了无效的值