将形状颜色设置为单元格颜色

时间:2019-04-16 11:19:12

标签: excel vba

我正在尝试在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行出现类型不匹配错误。

我会以错误的方式处理吗?可以链接颜色吗?

2 个答案:

答案 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单元格颜色。不幸的是,据我所知,这尚不容易。

不过,您可以参考herehere

当您获得所需的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

在输出样本下面,形状的颜色跟随第一个单元格的颜色。

enter image description here