Пользовательская функция Excel не вызывается при обновлении ячейки - PullRequest
2 голосов
/ 04 февраля 2010

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

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

1 Ответ

1 голос
/ 15 февраля 2010

Как насчет использования события 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
...