Функция для возврата цвета интерьера условно отформатированной ячейки - PullRequest
2 голосов
/ 22 июня 2019

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

Она используется для проверки количества ячеек в строке, которые, если они выделены с использованием условного форматирования, затем действиепотребуется - проще проверить, есть ли цвет в ячейке, чем создавать комбинированную условную формулу, охватывающую условия всех ячеек.Или я подумал ..

Приведенный ниже код возвращает ошибку # ЗНАЧЕНИЕ, хотя код работает в окне сообщения ..

Function fillcolour(rng as Range) as variant

    fillcolour=rng.Displayformat.Interior.ColorIndex

End Function

Ожидайте увидеть значение для возвращенного индекса цветано получая # VALUE

Ответы [ 4 ]

1 голос
/ 23 июня 2019

Чтобы использовать событие изменения:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
    Call fillcolour(Cells(1, 1))
    Application.EnableEvents = True

End Sub



Function fillcolour(ring As Range) As Variant

    fillcolour = ring.DisplayFormat.Interior.Color
    Cells(1, 2) = fillcolour

End Function

Каждый раз, когда вы изменяете содержимое ячейки, в ячейке B1 будет отображаться цвет фона (даже если он получен из условного формата).

Однако это событие возвращает цель со строкой и столбцом, вызвавшим событие (среди прочего, Target.Row, Target.Column). Вы можете использовать эту цель, чтобы обнаружить внесенные вами изменения непосредственно в ячейке.

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

0 голосов
/ 22 июня 2019

Пожалуйста, посмотрите эту ссылку о том, почему у вас возникла эта проблема. Вы не можете использовать DisplayProperty в пользовательских функциях. Он работает в среде VBA или при вызове из окна сообщений, но не при вызове из рабочего листа. Обходной путь должен удалить .DisplayFormat из кода, как это:

Function fillcolour(rng as Range) as variant

fillcolour=rng.Interior.ColorIndex

End Function
0 голосов
/ 22 июня 2019

Спасибо Асжеру за помощь здесь.Теперь у меня есть функция следующим образом:

Function CFCheck(rng as range) as Integer

CFCheck = rng.FormatConditions.Count

End Function

Таким образом, она может вызвать действие, если возвращаемое значение> 0

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

0 голосов
/ 22 июня 2019

Вы пробовали?:

Function fillcolour(ring as Range) as variant

fillcolour=rng.DisplayFormat.Interior.Color

End Function

присвоить его событию изменения ячейки

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