【发布时间】:2020-03-16 03:09:51
【问题描述】:
我正在尝试将用户定义的 VBA 函数中的一些中间结果写入工作表。我已经测试了这个功能,它可以正常工作。我知道我无法从 UDF 修改/写入单元格,因此我尝试将相关结果传递给我希望随后能够写入电子表格的子程序。
很遗憾,我的方案不起作用,我正在努力思考这个问题。
Public Function f(param1, param2)
result = param1 * param2
call writeToSheet(result)
f = param1 + param2
end
public sub writeToSheet(x)
dim c as range
c = range("A1")
c.value = x
end
我想在单元格 A1 中查看 param1 和 param2 的乘积。不幸的是,它并没有发生 - 子例程在尝试执行第一条语句时突然结束(c = range("A1") )。我做错了什么,我该如何解决?
如果根本不可能以这种方式写入电子表格,是否有其他方法可以存储中间结果以供以后查看?我的现实生活问题比我上面的程式化版本要复杂一些,因为我每次经过一个循环时都会生成一组新的中间结果,并希望将它们全部存储起来以供审查。
【问题讨论】:
-
Set c = Range("A1"). -
您可以随时写入即时窗口或全局数组(您可以稍后阅读)
-
考虑从子程序运行您的分析,而不是从工作表中驱动它。函数以这种方式工作得很好。只有当您从单元格公式中调用它们时,您才会有限制......按设计。
-
如果您想要一个不那么不稳定的替代方案,而不是写入工作表,也许将数据写入文本文件。你甚至可以设置一个 application.ontime 调用来将文本文件中的数据加载到一个单元格(或范围)中。
-
将 UDF 结果存储在全局字典中,并在 AfterCalculation 事件中输出,该事件在处理完所有 UDF 后触发,这就是为什么您可以在任何单元格中输出而不会违反。
标签: excel vba user-defined-functions subroutine