Функция vba возвращает цвет фона ячейки

dwc309 спросил: 12 мая 2018 в 04:38 в: excel

Как говорит субъект, мне нужна функция, чтобы вернуть цвет фона ячейки. Моя функция vba

Public Function ReturnedBackGroundColor(rnge As Range) As Integer
    ReturnedBackGroundColor = rnge.Offset(0, 0).Interior.Color
End Function

В ячейке у меня есть

=IF(ReturnedBackGroundColor("G9") =3,1,2)

, и я получаю ошибку #VALUE! , Я искал пару часов, и сегодня утром не получаю радости.

Я попытался поместить функцию как в код листа, так и в модуль. Я попробовал Color и ColorIndex. Я пробовал 3 и vbRed (что BTW не распознается VBA по причинам, которые я забыл. Я попытался сделать эту публикацию публичной как в коде листа, так и в модуле. Я попытался пересчитать лист в обоих случаях.

То, что я подозреваю, это то, что я должен что-то установить, чтобы установить связь между ними как для vbred, так и для функции на листе.

Это основная проблема с этими форумами. Люди запускают рабочий код, но они не говорят вам, что он должен обойти код, чтобы он работал. И это, скорее всего, то, что мне здесь не хватает.

2 ответа

Mathieu Guindon ответил: 12 мая 2018 в 05:03

Извлеките .Offset(0, 0), верните Long (ваш код в порядке) и передайте Range вместо String :

=IF(ReturnedBackGroundColor(G9)=3,1,2)

G9 является фактической ссылкой на ячейку, а не строковым литералом, содержащим адрес ячейки.

Это будет более надежным чем построение Range из строки внутри этой функции, поскольку, когда вы вызываете ее из кода VBA, вы не захотите предполагать, какой лист в данный момент активен.

Gary's Student ответил: 12 мая 2018 в 05:17

Незначительные изменения:

Public Function ReturnedBackGroundColor(rngeADDY As String) As Long
    ReturnedBackGroundColor = Range(rngeADDY).Interior.Color
End Function

мы:

  • передать строку
  • вернуть длинный

Вы можете выбрать либо String, либо . Но должна быть согласованность между использованием в ячейке рабочего листа и кодировкой VBA.

Примечание:

Обычный выбор - передать Range, поскольку это помогает установить правильный уровень волатильности.