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

Excel 将形状颜色设置为单元格颜色,excel,vba,Excel,Vba,我正试图在Excel仪表板上创建破布级的“交通灯”。我在背景中有一个有条件格式化的单元格,设置为从绿色到红色的三色刻度。我希望我的仪表板上的“红绿灯”形状随着单元格颜色的变化而变化 到目前为止,我有以下代码: Sub ChangeTrafficLights() Dim light As Shape Dim colour As Range Set light = Worksheets(3).Shapes.Range(Array("Light1")) Set colour = Wor

我正试图在Excel仪表板上创建破布级的“交通灯”。我在背景中有一个有条件格式化的单元格,设置为从绿色到红色的三色刻度。我希望我的仪表板上的“红绿灯”形状随着单元格颜色的变化而变化

到目前为止,我有以下代码:

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行出现了一个类型不匹配错误


我走错方向了吗?可以链接颜色吗?

您需要将
灯光
变量设置为
对象
而不是
形状

即,您的代码将是:

Dim light As Object
Dim colour As Range
...

然后,您可以将变量设置为形状数组/范围。有关更多信息,请参见此处:

您需要将
灯光
变量设置为
对象
而不是
形状

即,您的代码将是:

Dim light As Object
Dim colour As Range
...

然后,您可以将变量设置为形状数组/范围。有关更多信息,请参见此处:

按如下方式设置形状对象:

Set light = thisWorkbook.Worksheets(3).Shapes("The Name of your Shape")
现在,属性
.Interior.Color
不会返回RGB格式的值。要设置形状的
.RGB
属性,需要RGB格式的颜色,例如
(255255255)

所以,您需要的是以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
在输出示例下方,其中形状的颜色跟随第一个单元格的颜色


将形状对象设置为:

Set light = thisWorkbook.Worksheets(3).Shapes("The Name of your Shape")
现在,属性
.Interior.Color
不会返回RGB格式的值。要设置形状的
.RGB
属性,需要RGB格式的颜色,例如
(255255255)

所以,您需要的是以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
在输出示例下方,其中形状的颜色跟随第一个单元格的颜色


尝试此选项:
将灯光作为对象变暗
尝试此选项:
将灯光作为对象变暗