Excel UDF:修改单元格而不返回数组
Excel 中用户定义函数 (UDF) 的局限性之一是它们无法直接修改单元格或工作簿属性。然而,存在一种解决方法,尽管很复杂,它允许 UDF 实现单元格修改。
使用 Windows 和应用程序计时器来规避 UDF 限制
从一个单元格内修改单元格采用了 UDF,Windows 计时器和 Application.OnTime 计时器的巧妙组合。 Windows 计时器启动 Application.OnTime 计时器,该计时器在 Excel 允许单元格修改时安全地执行代码。
实现
UDF 调用 Windows 计时器例程,该例程调度一个具有特定时间参数的Application.OnTime计时器。然后,Application.OnTime 例程执行 UDF 本身无法执行的代码。
示例代码
以下代码演示了如何实现此解决方法:
Public Function AddTwoNumbers(ByVal Value1 As Double, ByVal Value2 As Double) As Double AddTwoNumbers = Value1 + Value2 ' Schedule the Windows timer mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1) End Function Public Sub AfterUDFRoutine1() ' Schedule the Application.OnTime timer mApplicationTimerTime = Now Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2" End Sub Public Sub AfterUDFRoutine2() ' Perform modifications outside the UDF '... End Sub
注意事项
这个解决方法并非没有限制。使用它的 UDF 不应是易失性的、传递易失性函数或包含易失性公式/函数的引用单元格。此外,只有当计时器在安全环境中触发时才会发生单元格修改(没有打开的对话框或单元格编辑)。
以上是Excel UDF 可以修改单元格而不返回数组吗?的详细内容。更多信息请关注PHP中文网其他相关文章!