我有一个用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
,则更新正常,但只能使用一级撤消。
有关如何解决此问题的想法吗?
答案 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