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(用户定义函数)

如何在单击网格单元格时调用 js 函数?

具有目标操作的单元格上的 iOS UIButton,单元格未在 (id)sender 中更新

使用来自加载项用户定义函数 (UDF) 的数据填充 Excel 多个单元格

Excel VBA 用户定义函数,用于计算具有条件格式的单元格