【问题标题】:Changing cell color to RGB values within Excel spreadsheet using VBA使用 VBA 在 Excel 电子表格中将单元格颜色更改为 RGB 值
【发布时间】:2015-04-07 17:06:03
【问题描述】:

我基本上在 30 列中获得了 10 组 RGB 值(每个值在它们自己的单元格中),在下面的 8 行中重复不同的 RGB 值。我想做的是为这 30 个单元格右侧的 10 个单元格着色,以显示所有 8 行中 10 种颜色(基于它们的 RGB 值集)的视觉表示。我已经在野外看到了一些 VBA 示例,它们执行类似的操作,但更多的是针对一组单独的 RGB 值。我在想我可以创建如下函数,但这似乎不起作用。也许需要一个 Sub 例程来执行此操作,但不确定从哪里开始。任何帮助或方向将不胜感激。

Function RGB_Color(R As Integer, B As Integer, G As Integer)

    RGB_Color = Application.ThisCell.Interior.Color = RGB(R, G, B)

End Function

【问题讨论】:

    标签: excel vba rgb


    【解决方案1】:

    你可以从这个子开始。它将使用来自 (Rs) 的数据为您的期望范围 (Rc) 着色。

    Sub ColorRGB(Rs As Range, Rc As Range)
    Dim R As Long
    Dim G As Long
    Dim B As Long
    Dim Address(1 To 3) As Long
    Dim I As Integer: I = 1
    For Each cell In Rs.Cells
    Address(I) = cell.Value
    I = I + 1
    Next
    R = Address(1)
    G = Address(2)
    B = Address(3)
    Rc.Interior.Color = RGB(R, G, B)
    End Sub
    

    测试:

    在此测试中,我们使用 A1:C1 范围内的内容为单元格 D1 着色。

    Sub Test()
    ColorRGB Sheet1.Range("A1:C1"), Sheet1.Range("D1")
    End Sub
    

    结果:

    下面的代码使用 RGBColor Sub。它将定义一个lastrow long(在我们的例子中为8),因此这基本上可以处理更多行。然后,它将采用第一个垂直范围的 8 个单元格并将其设置在称为 rRange object 中,以便稍后对其执行 For Each 循环。

    对于For Each 循环中的每个单元格,我们将横向运行另一个For 循环(在列的方向上)。新的For 循环将以第 3 步运行,调用我们的 ColorRGB 函数并告诉它接受下面提供的参数。

    鉴于For 循环以 3 步运行,我们为有色单元格定义了一个计数器,称为c,它在For 循环的每一步(其步等于 3)。

    我希望这个逻辑很清楚。显然有更好的方法来做到这一点。

    Sub ColorSheet(sheetname As string)
    Dim r As Range
    'defining lastrow which is 8
    Dim lastrow As Long
    With ThisWorkbook.Worksheets(sheetname)
    lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set r = .Range("A1", "A" & lastrow)
    End With
    Dim C As Integer: C = 30
    For Each cell In r.Cells
    For I = 1 To 30 Step 3
    ColorRGB ThisWorkbook.Worksheets(sheetname).Range(cell.Offset(0, I - 1).Address(0, 0), cell.Offset(0, I + 1).Address(0, 0)), ThisWorkbook.Worksheets(sheetname).Range(cell.Offset(0, C).Address(0, 0))
    C = C + 1
    Next I
    C = 30
    Next
    End Sub
    

    这个最后的 sub 将为您提供的工作表名称着色。

    Sub Test
    ColorSheet("Sheet3")
    'And so on...
    End Sub
    

    如果您的工作表被命名为 SheetX

        Sub Test
        Dim I as Integer
        For I = 1 to 20
        ColorSheet("Sheet"&I)
        Next I
        End Sub
    

    例子:

    【讨论】:

    • 感谢 Jlili 的回答。这种方式让我有一部分的方式,但由于 RGB 值在电子表格中,我需要一种方法让子例程从电子表格中读取这些值,而不是手动输入它们。任何有关如何做到这一点的提示将不胜感激。
    • 好吧,您可以创建三个 long,R、G、B,然后用您的范围内的值填充它们。只是不要忘记使用CLong 将值转换为长整数。稍等一下,让我们为您完成。
    • @wilbev 如果您有任何问题,请随时提问。
    • 吉莉莉。太感谢了。我可以让它只在一个工作表上工作。我没有说要说明这一点,但我需要在 20 多个工作表上运行它。最奇怪的是,如果我将确切的数据复制到新的工作表中,代码根本什么都不做,就像它只识别创建的第一个工作表,无论我重命名它。有没有猜到那里可能发生了什么?
    • 完成。您可以通过向测试子提供 sheetname 来着色!如果它完成了工作,只需勾选这个答案!非常感谢:)
    【解决方案2】:

    您的不起作用,因为您将 RGB_Color(R,B,G) 传递给 RGB(R,G,B)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 2013-10-19
      • 2018-10-17
      • 2012-01-23
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多