【问题标题】:Excel user-defined function not called on cell updateExcel 用户定义函数未在单元格更新时调用
【发布时间】: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,那么更新工作正常,但只能使用一级撤消。

知道如何解决这个问题吗?

【问题讨论】:

标签: excel vba user-defined-functions


【解决方案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 函数,这是问题所在吗?
  • 不,没问题。会那样做。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多