首页 > 后端开发 > C++ > 如何修改 Excel UDF 中的单元格而不返回数组?

如何修改 Excel UDF 中的单元格而不返回数组?

Mary-Kate Olsen
发布: 2024-11-14 16:59:02
原创
877 人浏览过

How to Modify Cells in Excel UDFs Without Returning an Array?

Excel UDF:修改单元格而不返回数组

在 Excel 中,用户定义函数 (UDF) 通常返回值或数组。但是,在某些情况下,UDF 需要修改其他单元格而不返回数组。这可以通过涉及 Windows 计时器和 Application.OnTime 事件的复杂技术来实现。

问题:

考虑一个名为 New_Years 的 UDF,需要两年作为输入并返回这些年份之间的元旦日期数组。但是,要填充 Excel 中的数组,用户必须手动选择单元格、输入公式,然后按 Ctrl Shift Enter。此限制会阻止 UDF 自动填写日期。

解决方案:

尽管 Excel 对 UDF 直接修改单元格有限制,但使用 Windows 计时器和应用程序的解决方法。 OnTime 事件使之成为可能。通过从 UDF 中启动 Windows 计时器,可以安排后续的 Application.OnTime 计时器来执行 UDF 中禁止的操作。

代码示例:

以下代码演示了如何使用 Collection 来存储调用 UDF 的单元格的引用来实现此技术。两个计时器例程 AfterUDFRoutine1 和 AfterUDFRoutine2 用于处理计时器事件。

Public Sub AfterUDFRoutine1()
  ' Stop the Windows timer
  If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID

  ' Cancel any previous OnTime timers
  If mApplicationTimerTime <> 0 Then
    Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2", , False
  End If

  ' Schedule timer
  mApplicationTimerTime = Now
  Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2"
End Sub

Public Sub AfterUDFRoutine2()
  Dim Cell As Range
  ' ... Do tasks not allowed in a UDF ...
End Sub
登录后复制

用法:

要应用此技术,需要使用 UDF(例如 AddTwoNumbers) ) 可以在常规模块中创建。在 UDF 内,定时器例程启动,并且调用单元格的单元格引用存储在集合中。计时器例程随后会修改 UDF 范围之外的所需单元格。

通过利用 Windows 计时器和 Application.OnTime 事件,可以创建修改单元格而不返回数组的 UDF。该技术可以实现更高的自动化程度,并且无需用户手动填充数组。

以上是如何修改 Excel UDF 中的单元格而不返回数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板