将形状颜色与单元格颜色相匹配 - 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 的回答所建议的那样。
我希望设置一个基本循环来设置工作表中每个形状的颜色以匹配 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 的回答所建议的那样。