电子表格代码重用

Spreadhseet code reuse

有谁知道将工作表包装为 UDF 函数的方法吗?

基本上我想创建一个工作表或工作簿来执行某些计算,然后在其他工作表或工作簿中重复使用此代码。理想情况下,UDF 会设置某些输入单元格的值,并 return 来自某个输出单元格的值。

这个问题的答案有问题,但效果不佳。

Using a UDF in Excel to update the worksheet

理想情况下,我想在 Excel 中执行此操作,但我愿意接受替代电子表格软件、第三方 excel 工具或完全替代平台的建议。

UDF 的设计目的不是为了更改除使用它的单元格以外的任何单元格的值。

在某些用例中有一些技巧可以解决这个问题。然而,这不是 UDF 的设计特征,而是对 Excel 中其他设计的巧妙操作。无论如何,我认为大多数人会同意这些类型的 hack 可能不稳定并且肯定不推荐用于生产。

如果一次要更改多个单元格,最好写一个Sub。这为您提供了更多控制权,该行为已得到充分记录,并且总体而言,您的计算不依赖于可能会或可能不会在任何给定补丁中中断的非官方解决方法。

我找到了我自己的问题的答案。似乎 UDF 无法更改调用它们的 excel 实例中的单元格值。我想要的行为可以通过创建 Excel 的新实例并在第二个实例中打开当前工作簿的副本来实现。然后,第一个实例可以调用修改第二个实例的 UDF。因此,电子表格中的计算可以成功地包含在 UDF 中。

Option Explicit
Public xl As Excel.Application
Public wb As Workbook
Public ws As Worksheet


Function calc(x As Double) As Double

If xl Is Nothing Then


    Set xl = CreateObject("Excel.Application")

    Set wb = xl.Workbooks.Open(ThisWorkbook.FullName)
    xl.Visible = False

    Set ws = wb.Worksheets("CalcluationModule")


End If

ws.Range("i").Value = x
wb.Application.Calculate

calc = ws.Range("PV").Value



End Function

这是真的'有点... 但是,您的 UDF 可以调用激活 Win API 计时器的函数,使用您从中调用它的单元格引用。然后回调函数可以对该单元格执行您想要的操作...