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中文网其他相关文章!