创建修改其他单元格而不返回数组的 UDF
您有一个 Excel 加载项,其中包含一个名为 New_Years 的函数,该函数当前返回两个指定年份之间的元旦数组。但是,这需要您选择多个单元格并使用 Ctrl Shift Enter 创建数组。
是否可以避免数组创建?
是的,可以直接从 UDF 修改其他单元格而不返回数组。虽然 Excel 禁止 UDF 对单元格属性进行任何更改,但有一个复杂的解决方案,涉及使用 Windows 计时器和 Application.OnTime 计时器的组合。
解决方案概述
代码实现
以下代码必须放置在常规模块中:
Private Declare Function SetTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long _ ) As Long Private Declare Function KillTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long _ ) As Long Private mCalculatedCells As Collection Private mWindowsTimerID As Long Private mApplicationTimerTime As Date Public Function AddTwoNumbers( _ ByVal Value1 As Double, _ ByVal Value2 As Double _ ) As Double AddTwoNumbers = Value1 + Value2 ' Cache the caller's reference for later use in a non-UDF routine If mCalculatedCells Is Nothing Then Set mCalculatedCells = New Collection On Error Resume Next mCalculatedCells.Add Application.Caller, Application.Caller.Address On Error GoTo 0 ' Set the Windows timer If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1) End Function
定时器例程
定义了两个定时器例程:AfterUDFRoutine1 和 AfterUDFRoutine2。它们处理 UDF 外部代码的调度和执行。
用法示例
在 Excel 工作表的单元格中输入 AddTwoNumbers 函数:=AddTwoNumbers(A1, B1)
这将启动计时器进程。
重要说明
以上是您可以在不返回 Excel 中的数组的情况下修改 UDF 中的单元格吗?的详细内容。更多信息请关注PHP中文网其他相关文章!