К сожалению, не похоже, что изменение формата вызывает какой-либо из стандартных обработчиков событий Excel.Что-то, что приближается, будет предназначаться для события Изменения Выбора Рабочего листа.В модуле кода для рабочего листа поместите:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.Calculate
End Sub
Затем измените определение CountColorIf
так, чтобы оно начиналось:
Function CountColorIf(rSample As Range, rArea As Range) As Long
Application.Volatile
Затем, если цвет ячейки изменилсясчет обновляется - как только вы переходите в другую ячейку.
Другая идея - использовать Application.OnTime
для запуска подпрограммы, которая запускает пересчет каждые несколько секунд, но это все равно не приведетмгновенные обновления, как только вы измените цвет.
При редактировании Поскольку нет события FormatChange
, на которое вы можете ориентироваться, использование SelectionChange
в качестве прокси-сервера для него не идеально,Одна из проблем, которую вы отметили в комментариях, заключается в том, что это сработает в середине действия копирования-вставки, и в этом случае в результате вычисления рабочей таблицы Excel выйдет из режима копирования-вставки.Одним из решений этой конкретной проблемы является изменение кода на:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = 0 Then Me.Calculate
End Sub
Если этот код предназначен для вашего личного использования, простое решение - сохранить Application.Volatile
, но полностью избавиться от обработчика событий,В привычку попадать F9
, когда вы меняете цвет клетки.Это ограничит перерасчеты, когда вы их захотите, за счет необходимых действий с вашей стороны.