我正在尝试在Excel仪表板上创建RAG等级的“交通灯”。我在背景中有条件格式化的单元格,其设置为从绿色到红色的3色标度。我希望仪表板上的“交通灯”形状随着单元格颜色的变化而改变颜色。
到目前为止,我有以下代码:
Sub ChangeTrafficLights()
Dim light As Shape
Dim colour As Range
Set light = Worksheets(3).Shapes.Range(Array("Light1"))
Set colour = Worksheets(2).Range("D95")
light.Fill.ForeColor.RGB = colour.DisplayFormat.Interior.Color
End Sub
第4行出现类型不匹配错误。
我会以错误的方式处理吗?可以链接颜色吗?
答案 0 :(得分:0)
您需要将light
变量设置为object
而不是Shape
即您的代码将是:
Dim light As Object
Dim colour As Range
...
然后,您可以将变量设置为形状数组/范围。有关更多信息,请参见此处:https://docs.microsoft.com/en-us/office/vba/api/excel.shapes.range
答案 1 :(得分:0)
像这样设置形状对象:
Set light = thisWorkbook.Worksheets(3).Shapes("The Name of your Shape")
现在,属性.Interior.Color
不会返回RGB格式的值。要设置形状的.RGB
属性,您需要使用RGB格式的颜色,例如。 (255,255,255)
。
因此,您需要获取RGB格式的D95
单元格颜色。不幸的是,据我所知,这尚不容易。
当您获得所需的3个值时,就可以像这样设置形状的颜色:
light.Fill.ForeColor.RGB =RGB(R,G,B)
TL; DR
Sub trafficLight()
Dim sht As Worksheet
Dim colour As Range
Dim light As Shape
Dim C As Long
Dim R As Long
Dim G As Long
Dim B As Long
Set sht = ThisWorkbook.Worksheets("The Name of your Worksheet")
Set colour = sht.Range("D95")
Set light = sht.Shapes("The name of your shape")
'''''''''''''Credits to Mr. Allen Wyatt''''''''''''''''''
C = colour.DisplayFormat.Interior.Color '
R = C Mod 256 '
G = C \ 256 Mod 256 '
B = C \ 65536 Mod 256 '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
light.Fill.ForeColor.RGB = RGB(R, G, B)
End Sub
在输出样本下面,形状的颜色跟随第一个单元格的颜色。