У меня есть определяемая пользователем функция, написанная на VBA, которая обновляет цвета в нарисованной форме (светофор, состоящий из трех кругов). Вызов в ячейке листа выглядит примерно так:
setTrafficLight(A1, "Oval 1", "Oval 2", "Oval 3")
где A1 - ячейка, содержащая, например, «зеленый» или «красный». Остальные параметры - это названия фигур.
У меня возникла проблема с вызовом функции и удалением истории отмены (вызов пользовательской функции в Excel отключает старые записи отмены). Чтобы исправить это, я зарегистрировал пустую функцию отмены через
Application.OnUndo "Undo SetTrafficLight", "undoSetTrafficLight"
В моей функции setTrafficLight для Application.Volatile
установлено значение False
, чтобы функция не вызывалась каждый раз, когда изменяется какое-либо значение на листах. Но теперь функция даже не вызывается при изменении входного значения в A1. С Application.Volatile = True
это работает, но отмена не работает должным образом. Если я полностью удалю Application.Volatile
, обновление будет работать правильно, но можно будет использовать только один уровень отмены.
Есть идеи, как решить эту проблему?