【问题标题】:Spreadhseet code reuse电子表格代码重用
【发布时间】:2016-03-30 20:30:58
【问题描述】:

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

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

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

Using a UDF in Excel to update the worksheet

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

【问题讨论】:

  • 这不是重复问题,因为问题比引用的问题更开放。
  • 这不清楚。 “将工作表包装为 UDF 函数”是什么意思? VBA 是一种成熟的编程语言。您在一个中编写的宏和 UDF 可以在其他地方重用,也许包含在 Add-ins 中。也许你想写一个插件?
  • 它可以是一个插件,但是插件的功能是由一组电子表格单元格定义的。
  • UDF“设置某些输入单元格的值”是什么意思?如果 UDF 正在设置值(如果没有奇怪的 hack,UDF 是不可能做到的——为什么不使用 sub?)那么这些不是输出单元格吗?你需要解释你真正想要做什么。

标签: excel spreadsheet udf


【解决方案1】:

UDF 的设计目的不是改变任何单元格的值,而不是它正在使用的单元格。

在某些用例中存在一些适用于此的技巧。然而,这不是 UDF 的设计功能,而是对 Excel 中其他设计的巧妙操作。无论如何,我认为大多数人都会同意这些类型的 hack 可能不稳定,并且肯定不建议将其用于生产环境。

如果您想同时更改多个单元格,最好写一个Sub。这为您提供了更多的控制权,行为有据可查,并且总体而言,您的计算不依赖于可能会或可能不会在任何给定补丁中中断的非官方变通办法。

【讨论】:

  • 好答案。也许补充一点,一种常见的技术是将 subs 与worksheet change 事件链接起来,以模拟 UDF 根据单元格值的变化即时更新的能力。
  • 我与自己进行了辩论,但最终删除了该引用,因为我考虑得越多,想到的破解它的方法就越多,它只是变得太大而无用这个答案。如果你愿意的话,我认为它超出了范围。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我认为主要问题与计算依赖性有关。如果您创建一个单独的实例,那么您就不太可能陷入无限循环。
    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多