Как говорит субъект, мне нужна функция, чтобы вернуть цвет фона ячейки. Моя функция 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, так и для функции на листе.
Это основная проблема с этими форумами. Люди запускают рабочий код, но они не говорят вам, что он должен обойти код, чтобы он работал. И это, скорее всего, то, что мне здесь не хватает.
Извлеките
.Offset(0, 0)
, вернитеLong
(ваш код в порядке) и передайтеRange
вместоString
:G9
является фактической ссылкой на ячейку, а не строковым литералом, содержащим адрес ячейки.Это будет более надежным чем построение
Range
из строки внутри этой функции, поскольку, когда вы вызываете ее из кода VBA, вы не захотите предполагать, какой лист в данный момент активен.Незначительные изменения:
мы:
Вы можете выбрать либо
String
, либо . Но должна быть согласованность между использованием в ячейке рабочего листа и кодировкой VBA.Примечание:
Обычный выбор - передать
Range
, поскольку это помогает установить правильный уровень волатильности.