未在单元更新时调用Excel用户定义的函数

时间:2010-02-04 16:22:17

标签: excel vba user-defined-functions

我有一个用VBA编写的用户定义函数,用于更新绘制形状的颜色(由三个圆圈组成的交通灯)。工作表单元格中的调用看起来像这样:

setTrafficLight(A1, "Oval 1", "Oval 2", "Oval 3")

其中A1是含有例如A1的细胞。 “绿色”或“红色”。其他参数是形状的名称。

我遇到了调用该函数并删除撤消历史记录的问题(在Excel中调用用户定义的函数会禁用旧的撤消条目)。为了解决这个问题,我通过

注册了一个空的撤销功能
Application.OnUndo "Undo SetTrafficLight", "undoSetTrafficLight"

在我的setTrafficLight函数中,Application.Volatile设置为False,因此每次页面上的任何值更改时都不会调用该函数。但是现在,当A1中的输入值发生变化时,甚至不会调用该函数。使用Application.Volatile = True它可以正常工作,但是撤消工作不正常。如果我完全删除Application.Volatile,则更新正常,但只能使用一级撤消。

有关如何解决此问题的想法吗?

1 个答案:

答案 0 :(得分: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