Excel 用户定义函数未在单元格更新时调用
Posted
技术标签:
【中文标题】Excel 用户定义函数未在单元格更新时调用【英文标题】:Excel user-defined function not called on cell update 【发布时间】:2010-02-04 16:22:17 【问题描述】:我有一个用 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
,那么更新工作正常,但只能使用一级撤消。
知道如何解决这个问题吗?
【问题讨论】:
这个问题可能属于***.com 【参考方案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
【讨论】:
这是一个我还没有考虑过的想法,但不幸的是,考虑到我们会定期更改输入单元格的位置,它不会很好地集成。 如果您跳过 IF,您应该能够在此工作表中的每次更改时调用 setTrafficLight 函数,这是问题所在吗? 不,没问题。会那样做。谢谢。以上是关于Excel 用户定义函数未在单元格更新时调用的主要内容,如果未能解决你的问题,请参考以下文章
用于识别 Excel 单元格格式模式的 UDF(用户定义函数)
具有目标操作的单元格上的 iOS UIButton,单元格未在 (id)sender 中更新