Установить цвет фигуры на цвет ячейки - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь создать 'светофоры' с оценкой RAG на информационной панели Excel. У меня есть условно отформатированная ячейка на заднем плане, которая установлена ​​по 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 голосов
/ 16 апреля 2019

Установите объект формы следующим образом:

Set light = thisWorkbook.Worksheets(3).Shapes("The Name of your Shape")

Теперь свойство .Interior.Color не возвращает значение в формате RGB. Чтобы установить свойство .RGB фигуры, вам нужен цвет в формате RGB, например. (255,255,255).

Итак, вам нужно получить D95 цвет ячейки в формате RGB. К сожалению, насколько я знаю, это недоступно.

Однако вы можете сослаться здесь и здесь .

Когда вы получите 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

0 голосов
/ 16 апреля 2019

Вам необходимо установить переменную light как object вместо Shape

т.е. Ваш код будет:

Dim light As Object
Dim colour As Range
...

Это позволяет вам установить переменную в массив / диапазон формы. Для получения дополнительной информации см. Здесь: https://docs.microsoft.com/en-us/office/vba/api/excel.shapes.range

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...