Spreadhseet代码重用

时间:2015-12-24 11:23:47

标签: excel spreadsheet udf

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

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

这个问题的答案有一个黑客,但是效果不好。

Using a UDF in Excel to update the worksheet

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

3 个答案:

答案 0 :(得分:1)

UDF并非旨在更改除正在使用的单元格之外的任何单元格的值。

在某些用例中可以使用hack。然而,这不是UDF的设计特征,而是巧妙地操纵Excel中的其他设计。在任何情况下,我认为大多数人会同意这些类型的黑客可能不稳定,肯定不建议用于生产。

如果您想要更改多个单元格,最好写一个Sub。这为您提供了更多控制,行为记录良好,并且您的计算总体上不依赖于在任何给定补丁中可能会或可能不会中断的非官方解决方案。

答案 1 :(得分:0)

我找到了自己问题的答案。似乎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

答案 2 :(得分:0)

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