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

单元格更新时未调用Excel用户定义函数,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,我有一个用VBA编写的用户定义函数,可以更新绘制形状中的颜色(交通灯由三个圆组成)。工作表单元格中的调用在某种程度上如下所示: setTrafficLight(A1, "Oval 1", "Oval 2", "Oval 3") 其中A1是包含例如“绿色”或“红色”的单元格。其他参数是形状的名称 我遇到一个问题,该函数被调用并删除了撤消历史记录(在Excel中调用用户定义的函数会禁用旧的撤消条目)。为了解决这个问题,我通过注册了一个空的撤销函数 Application.OnUndo "Undo

我有一个用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
,则更新工作正常,但只能使用一级撤消


关于如何解决这个问题有什么想法吗?

使用
工作表\u Change
事件怎么样

大概是这样的:

setTrafficLight(A1, "Oval 1", "Oval 2", "Oval 3")
这应该适用于A1电池,但也可以很容易地调整其他电池


这个问题可能属于我还没有考虑过的想法,但不幸的是,由于我们定期更改输入单元格的位置,它不会很好地集成。如果您跳过“如果您应该能够在工作表中的每次更改上调用setTrafficLight函数”,这是问题吗?不,这不是问题。我会的。谢谢