【问题标题】:Can an Excel UDF trigger a macro or worksheet event?Excel UDF 能否触发宏或工作表事件?
【发布时间】:2016-03-20 21:13:33
【问题描述】:

我正在制作一个交互式 Excel 图表,您只需将鼠标悬停在选定的单元格上即可使用 UDF 更新图表。这工作正常, 但是图表数据并不总是出现在连续的行上,我想使用 Excel 过滤器隐藏这些行,将它们从图表中删除。

我有隐藏行的 VBA 代码,我已经尝试过:

  • 将 VBA 代码插入 UDF
  • 从 UDF 调用单独的宏
  • 创建工作表更改事件(基于 UDF 的单元格 实际更改),但它不会在 UDF 更改 价值。

有没有一种方法可以让 UDF 触发宏或工作表更改事件?

【问题讨论】:

    标签: excel vba charts macros


    【解决方案1】:

    这是一个非常简单的示例,它使用了一个名为 DoItGlobal 布尔标志:

    • 当 UDF whatever() 想要调用子 hello() 时,它会将 DoIt 设置为 True
    • Calculate 事件被引发并且看到 DoItTrue
    • Calculate 事件宏将 DoIt 设置为 False 并调用 hello()

    在工作表代码区:

    Private Sub Worksheet_Calculate()
        If DoIt Then
            DoIt = False
            Call hello
        End If
    End Sub
    

    在标准模块中:

    Public DoIt As Boolean
    
    Public Function whatever(r As Range) As String
        whatever = ""
        If r.Value <> "" Then
            whatever = r.Text
            DoIt = True
        End If
    End Function
    
    Public Sub hello()
        MsgBox "HELLO"
    End Sub
    

    【讨论】:

    • @aquixano 确保您的hello() 激活或选择正确的工作表??
    • 的 StudentSomething 仍然无法正常工作。我修改了您的 Public Sub Hello 添加了两条 AutoFilter 行: Public Sub hello() MsgBox "HELLO" Sheets("Grahp").Range("valSelOption").AutoFilter Field:=8 Sheets("Grahp").Range(" valSelOption").AutoFilter Field:=8, Criteria1:="" End Sub 我得到 Hello msbox,但宏不过滤列。这些行在独立的宏中工作。我触发了whatever函数:=whatever(valSelOption) Thoughts?
    • 确实如此。我通过将所需工作表上的 D1 的值更改为 20 来测试它(我在发布之前看到它工作后删除了该代码)它确实如此。我通过将所需工作表上 D1 的值更改为 20 来测试它(我在发布之前看到它工作后删除了该代码)
    • @aquixano 很奇怪.......如果你可以改变一个单元格,你应该可以操作过滤器............ ..........如果你有 hello() 打电话给你的独立电话会发生什么??
    • 同样的结果。如果我使用 =whatever(valSelOption) 函数将光标放在单元格中并按回车键,它可以工作,但仍然不能单独触发 UDF。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多