【问题标题】:Set shape color to cell color将形状颜色设置为单元格颜色
【发布时间】:2019-09-06 11:37:43
【问题描述】:

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

我是不是走错了路?是否可以链接颜色?

【问题讨论】:

  • 试试这个:Dim light As Object

标签: excel vba


【解决方案1】:

像这样设置你的形状对象:

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

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

【讨论】:

    【解决方案2】:

    您需要将light 变量设置为object 而不是Shape

    即您的代码将是:

    Dim light As Object
    Dim colour As Range
    ...
    

    这允许您将变量设置为形状数组/范围。有关详细信息,请参阅此处:https://docs.microsoft.com/en-us/office/vba/api/excel.shapes.range

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2016-08-12
      • 2019-03-20
      • 2014-09-24
      • 1970-01-01
      相关资源
      最近更新 更多