Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Excel 使用RGB值的彩色单元格“;错误13“;_Excel_Rgb_Vba - Fatal编程技术网

Excel 使用RGB值的彩色单元格“;错误13“;

Excel 使用RGB值的彩色单元格“;错误13“;,excel,rgb,vba,Excel,Rgb,Vba,非常简单的vba问题,不确定问题出在哪里,但: Range("J21").Select For tastetherainbow = 1 To 1000 skittle = ActiveCell.Offset(0, 2).Value Selection.Interior.Color = skittle ActiveCell.Offset(1, 0).Select Next 包含每个适当skittle值的单元格包含格式为RGB(r、g、b)的RGB代

非常简单的vba问题,不确定问题出在哪里,但:

Range("J21").Select
For tastetherainbow = 1 To 1000
    skittle = ActiveCell.Offset(0, 2).Value
    Selection.Interior.Color = skittle        
    ActiveCell.Offset(1, 0).Select    
Next
包含每个适当skittle值的单元格包含格式为RGB(r、g、b)的RGB代码,与VBA的代码完全相同。我通过将单元格的值复制粘贴到Selection.Interior.Color=粘贴而没有问题来测试它,但是当它只使用skittle时,我得到了一个“类型不匹配”

事实上,我使用skittle作为变量的唯一原因是我在使用
Selection.Offset(0,2).Value
设置颜色时遇到了同样的问题

真是迷路了!你能告诉我如何修复它,以及我为什么会有这个问题吗


谢谢

建议不要使用
Select
Selection
ActiveCell
,而是从单元格“J21”开始
For
循环,只需将行前进1

代码

Option Explicit

Sub CellColors()

Dim Skittle As Long
Dim tastetherainbow As Long

' modify "Sheet1" to your sheet's name
With Sheets("Sheet1")
    For tastetherainbow = 1 To 1000
        Skittle = .Cells(tastetherainbow + 20, "L").Value
        .Cells(tastetherainbow + 20, "J").Interior.Color = Skittle
    Next tastetherainbow
End With

End Sub
编辑的代码:将“RGB(0,0,74)”的单元格字符串格式转换为0,0,74,然后使用Split函数将字符串放入数组的3个元素中。 然后使用
CInt
RGB方法计算
Skittle
Long
数值

Option Explicit

Sub CellColors()

Dim Skittle As Long
Dim CellRGBStr  As String
Dim RGBInd() As String
Dim tastetherainbow As Long

With Sheets("Sheet3")
    For tastetherainbow = 1 To 1000
        If .Cells(tastetherainbow + 20, "L").Value <> "" Then

            ' use a string to store the "RGB(0,0,74)" as 0,0,74
            CellRGBStr = Mid(.Cells(tastetherainbow + 20, "L").Value, 6, Len(.Cells(tastetherainbow + 20, "L").Value) - 7)

            ' split the CellRGBStr to 3 array elements
            RGBInd = Split(CellRGBStr, ",")

            ' calculate the value of Skittle (using the RGB method)
            Skittle = (CInt(RGBInd(0))) ^ 3 + (CInt(RGBInd(1))) ^ 2 + (CInt(RGBInd(2))) ^ 1
            .Cells(tastetherainbow + 20, "J").Interior.Color = Skittle
        End If
    Next tastetherainbow
End With

End Sub

谢谢大家的帮助,我修改了它,还作弊了一点。。。这是作为一个更大的宏的一部分运行的,所以我决定将R、G和B值的数组显式化,并这样做。在线阅读Victor时,它说RGB()期望值为整数-Long更有效,但现在做同样的事情没有?这是一个工作版本。没有你们两个就做不到了非常感谢

 Sub ColourMeImpressed()

    Dim Skittler As Long
    Dim Skittleg As Long
    Dim Skittleb As Long

    Dim tastetherainbow As Long


    With Sheets("Converter")
        For tastetherainbow = 21 To 1000
            Skittler = .Cells(tastetherainbow, "G")
            Skittleg = .Cells(tastetherainbow, "H")
            Skittleb = .Cells(tastetherainbow, "I")
                Skittle = RGB(Skittler, Skittleg, Skittleb)
                .Cells(tastetherainbow, "J").Interior.Color = Skittle
        Next tastetherainbow
    End With

    End Sub
对于感兴趣的人,以下是最终结果的屏幕截图:


感谢您的快速回复,我将尝试一下您的答案,但我不确定您的方法除了摆脱低效的select语句之外还有什么变化。如果这确实有效并解决了不匹配错误-为什么会这样做?我正在努力提高!不幸的是,它没有解决不匹配的错误-我在这里挠头…@LukasLjungstrom根据您的代码,您在“L”列中有数字值,从第21行到第1000行,您想根据L列中相关单元格的值在J列中设置单元格背景色,对吗?@LukasLjungstrom,只是想解释一下发生了什么(如果您还不了解Shai Rado正在尝试做什么),问题是当您获取单元格的值并将其存储在变量中时,它被存储为
字符串
,因此您的代码将其理解为文字
“RGB(0,0,94)”
(例如)而不是将其读取为RGB(0,0,94)并将其转换为正确的值,从而导致类型不匹配错误(接收一个
字符串而不是
长的
。Shai Rado正在研究在他的代码中处理这个问题的逻辑感谢Shai提供的所有帮助,但在这一点上,优雅地解决它只会是一种智力上的努力-宏只设计用于处理少量值(>100),以及任何因删除select语句等而提高的效率都将以几秒钟的时间来衡量。我从这个过程和您的帮助中学到了很多东西!我提供了一个屏幕截图,以便您可以看到您的劳动成果。感谢您的回答-我承认我在发布自己的内容之前没有看到这一点。不幸的是,我没有看到如果一切顺利的话,他会让步的——RGB(RGB(x,y,z)),因为Skittle已经被定义为完整的RGB代码,格式为RGB(x,y,z)。-此外,我们发现Skittle被输入为字符串,RGB需要一个整数(或长?)。-谢谢您的帮助!
RGB()
期望每个参数
(红色、绿色、蓝色)
的值为
整数
,因为您可以为每个参数提供的最大值为
255
,因此在这种情况下,将
Skittle
变量声明为
Long
实际上没有任何好处。
RGB()
但是,将作为
长值进行计算,该值是您在
.Interior.Color
参数中提供的值。例如,如果您转到编辑器的即时窗口并键入
?RGB(200215227)
它将输出
14931912
,您无法将其存储在
整数
变量中。希望这能稍微清除它
'little modification is required in your code as follows 
Range("J21").Select
For tastetherainbow = 1 To 1000
    skittle = ActiveCell.Offset(0, 2).Value
    Selection.Interior.Color = RGB(skittle)        
    ActiveCell.Offset(1, 0).Select    
Next
 Sub ColourMeImpressed()

    Dim Skittler As Long
    Dim Skittleg As Long
    Dim Skittleb As Long

    Dim tastetherainbow As Long


    With Sheets("Converter")
        For tastetherainbow = 21 To 1000
            Skittler = .Cells(tastetherainbow, "G")
            Skittleg = .Cells(tastetherainbow, "H")
            Skittleb = .Cells(tastetherainbow, "I")
                Skittle = RGB(Skittler, Skittleg, Skittleb)
                .Cells(tastetherainbow, "J").Interior.Color = Skittle
        Next tastetherainbow
    End With

    End Sub