将形状颜色与单元格颜色相匹配 - vba

Match shape colour to cell color - vba

我希望设置一个基本循环来设置工作表中每个形状的颜色以匹配 table(条件格式)中的相应单元格。

我有以下

dim countryShape as shape

For Each countryShape In ActiveSheet.Shapes

countryShape.Range.Interior.Color = Application.VLookup(countryShape.Name, ActiveSheet.Range("D3:H19"), 2, 0).Interior.Color

Next countryShape

然而,我得到了

run time error 424, 'Object required'

我猜这与颜色应用的格式有关(即 .interior.color 表示单元格, .fill.forecolor 表示形状)但是到目前为止我尝试过的任何组合都还没有奏效.

要更改形状的颜色,您需要更改 Fill.ForeColor 属性。你也不能使用 Vlookup,因为它会 return 你的单元格值而不是单元格颜色。

请这样尝试...

Dim countryShape As Shape
Dim ColorCell As Range
For Each countryShape In ActiveSheet.Shapes
    Set ColorCell = Range("D3:D19").Find(what:=countryShape.Name, lookat:=xlWhole)
    If Not ColorCell Is Nothing Then
        'get the shape color from corresponding cell in column E
        countryShape.Fill.ForeColor.RGB = ColorCell.Offset(0, 1).Interior.Color 
    End If
Next countryShape

给你:

Public Sub TestMe()

    Dim shp         As Shape
    Dim fancyCell   As Range

    Dim colorR      As Long
    Dim colorG      As Long
    Dim colorB      As Long
    Dim colorFancy  As Long

    Set fancyCell = Range("A1")
    colorFancy = fancyCell.Interior.Color

    colorR = colorFancy And 255
    colorG = colorFancy \ 256 And 255
    colorB = colorFancy \ 256 ^ 2 And 255

    For Each shp In ActiveSheet.Shapes
        shp.Fill.ForeColor.RGB = RGB(colorR, colorG, colorB)
    Next shp

End Sub

形状需要 RGB 颜色,因此您可以给它,从单元格中获取颜色。 RGB() returns 与Long 中使用的Range.Interior.Color 相同,因此您也可以简单地使用: shp.Fill.ForeColor.RGB = colorFancy.Interior.Color

正如@sktneer 的回答所建议的那样。