Пользовательская функция Excel не вызывается при обновлении ячейки

У меня есть определяемая пользователем функция, написанная на 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, обновление будет работать правильно, но можно будет использовать только один уровень отмены.

Есть идеи, как решить эту проблему?


person MP24    schedule 04.02.2010    source источник
comment
Этот вопрос может принадлежать stackoverflow.com   -  person Mehper C. Palavuzlar    schedule 04.02.2010


Ответы (1)


Как насчет использования события Worksheet_Change?

что-то вроде этого:

это должно работать для ячейки A1, но может быть легко изменено для других

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Row = 1 And Target.Column = 1 Then
      Call setTrafficLight
   End If
End Sub
person Marek    schedule 15.02.2010
comment
Это идея, которую я еще не рассматривал, но, к сожалению, она не очень хорошо интегрируется, учитывая тот факт, что мы регулярно меняем расположение ячеек ввода. - person MP24; 22.02.2010
comment
Если вы пропустите IF, вы сможете вызывать функцию setTrafficLight при каждом изменении в этом листе, в этом ли проблема? - person Marek; 22.02.2010
comment
Нет, это не проблема. Сделаю это. Спасибо. - person MP24; 25.02.2010