【问题标题】:Excel+VBA How can I set the bg colour of a cell using its own contents?Excel+VBA 如何使用自己的内容设置单元格的背景颜色?
【发布时间】:2015-10-17 18:40:08
【问题描述】:

我正在尝试获取一张表格,其中在单元格中输入 RGB 值会将背景颜色设置为该值。我知道我可以使用

Range("A1:BE57").Interior.Color = RGB(127, 255, 127)

将整个范围的背景设置为任何一种颜色,但我希望该范围内的每个单元格都从其自己的内容中提取。

理想情况下只有

Range("A1:BE57").Interior.Color = RGB(.Value)

其中 .Value 将替换为范围内每个实例的单元格的实际内容(即 127、255、127)。虽然我知道这不太可能那么简单。

这可能吗?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    好的。这是一个 VBA 函数,它接受一个字符串并尝试将其转换为与 VBA 颜色兼容的字符串。下面是一个非常简单的使用示例。您应该能够使用此功能并将其添加到您的代码库中。没有输入验证来确保 RGB 字符串格式正确,但我已经尝试使用您的原始值“127,255,127”,它与“'127,255,127”作为 A1 中的值一样有效。希望您现在清楚这一点。

    ' Converts a RGB string value to a HEX string you can use to set Color properties
    ' Splits the string into RGB values, reverses them for VBA, and returns a HEX string
    Public Function ConvertValueToColour(rgbString As String) As String
    
    ' Define an array to hold the RGB values
    Dim Colors() As String
    
    ' Initialize the return string
    ConvertValueToColour = "&H"
    
    ' Split the input
    Colors() = Split(rgbString, ",")
    
    ' Loop in reverse for VBA (Likes GBR not RGB)
    For i = UBound(Colors()) To LBound(Colors()) Step -1
        ConvertValueToColour = ConvertValueToColour & Hex(RTrim(LTrim(Colors(i))))
    Next i
    
    End Function
    
    ' This Sub calls the above function
    Public Sub ColorA1()
    Range("A1").Interior.color = ConvertValueToColour(Range("A1").Value)
    End Sub
    

    *注意我已经重写了函数,所以删除了 MrExcel 的功劳

    【讨论】:

    • 我理解这是试图做什么,但作为一个 VBA 初学者,我目前不知道如何实现它。任何线索?我可以看到每个步骤的作用,这是有道理的,但这不会按原样工作:(
    • 将其包装在一个函数/子例程中,然后从您的代码中调用它。我将编辑我的答案以将其放入一个函数中并从您的代码中调用它。
    【解决方案2】:

    首先你不能像这样调用函数RGB

    RGB(.Value)
    

    因为它需要三个整数类型的参数。


    此外,我认为单行是不可能的。恐怕您需要遍历范围内的所有单元格。

    如果您以 100;100;100 格式将 RGB 值存储在单元格中,则可以使用以下代码:

    Sub setBackground()
        Dim cell As Excel.Range
        Dim colors() As String
        '--------------------------------------------------------------------------
    
        For Each cell In Range("A1:BE57").Cells
            colors = VBA.Split(cell.value, ";")
            cell.Interior.Color = RGB(CInt(colors(0)), CInt(colors(1)), CInt(colors(2)))
        Next cell
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 2011-02-06
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 2011-09-18
      • 1970-01-01
      相关资源
      最近更新 更多