首页 >后端开发 >C++ >如何在 Excel 插件中实现非数组更改 UDF?

如何在 Excel 插件中实现非数组更改 UDF?

Susan Sarandon
Susan Sarandon原创
2024-11-16 05:52:03466浏览

How Can Non-Array Changing UDFs be Implemented in Excel Add-Ins?

在 Excel 加载项中实现非数组更改 UDF

在 Excel 加载项中,通常禁止更改单元格值的 UDF。但是,可以使用 Windows 计时器和 Application.OnTime 计时器的组合来绕过此限制。

Windows 计时器限制

Windows 计时器无法在单元格时执行 VBA 代码正在编辑或对话框已打开。此限制阻止它们直接修改 UDF 中的单元格属性。

解决方案:Application.OnTime Timer

为了规避此限制,在 UDF 中使用 Windows 计时器来安排一个 Application.OnTime 计时器。 Application.OnTime 计时器是安全的,仅在未编辑单元格且没有打开对话框时触发。

UDF 实现

  1. 创建常规模块: 将以下代码放在常规 VBA 模块中,而不是 UDF 中module.
  2. UDF 实现 (AddTwoNumbers): 在 AddTwoNumbers UDF 中,照常计算总和。计算后:

    • 将调用者的单元格引用缓存在集合中。
    • 设置 Windows 计时器以启动计时器例程 AfterUDFRoutine1。
  3. 初次例程(AfterUDFRoutine1):

    • 停止 Windows 计时器。
    • 为 AfterUDFRoutine2 安排安全的 Application.OnTime 计时器。
  4. 第二个定时器例程(AfterUDFRoutine2):

    • 执行 UDF 中不允许的任务,例如修改单元格值、禁用屏幕更新或更改计算模式。

示例用法

Private Sub TestAddTwoNumbers()
    Dim Cell As Range

    Set Cell = Range("A1")

    ' Cache the reference in the UDF
    Cell.Formula = "=AddTwoNumbers(1, 2)"

    ' Trigger the timer routine
    Cell.Calculate
End Sub

计算后,通过将调用者旁边的单元格设置为其当前值,单元格公式将更改以反映新值。

以上是如何在 Excel 插件中实现非数组更改 UDF?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn