gpt4 book ai didi

excel - 无论计算模式如何,您将如何编写手动计算的 excel udf?

转载 作者:行者123 更新时间:2023-12-04 20:19:59 26 4
gpt4 key购买 nike

我目前有一个使用表单的宏,以便在外部程序的帮助下执行一些计算。它所做的只是将一些工作表值写入文件以供另一个程序(外部 .exe)使用作为输入(该程序是封闭源代码)。所述程序然后编写自定义格式输出,我用 VBA 将其废弃,然后将返回值传递回工作表。通过指定源和目标范围的用户表单调用宏。

我想要做的是用 UDF 替换通过用户窗体调用计算的方法。使用GUI方式,更新计算比较麻烦;也不可能知道在目标范围数据中执行了哪些计算。出于性能考虑,选择此路径而不是 UDF。由于计算速度很慢,我不能只重用调用外部程序的用户表单代码部分作为 UDF 并完成它,因为它太慢了。 VBA 中似乎没有异步执行(与 Excel 2010 中的 xll 不同)。

一个可能的解决方案是在 UDF 开始执行时立即退出它,除非将全局设置为 true。除非从特定的功能区按钮调用重新计算,否则该全局总是错误的。问题是它不断地执行 UDF,一直将这些范围发送到 #N/A 值,所以我无法引用这些范围。另一种方法是创建假公式,即在指定参数和目标范围的单元格上添加注释。这也有很多问题。

所以。关于如何实现假异步计算 UDF 的任何想法?

谢谢!

最佳答案

如果我理解正确,您希望有一个 VBA UDF,如果全局为假,则返回先前计算的值,否则执行完整的慢速计算。有几种不同的可能方法,它们都有不同的缺点:

  • 使用 application.caller.value .这将导致循环引用并要求您打开迭代计算
  • 使用 application.caller.text .这很简单,无需迭代计算即可工作,但会获取格式化值,因此您需要确保您的 UDF 不会丢失精度等
  • 在 udf 导出处将值存储在 中全局数组 由索引
    完整的调用单元地址并在 udf 入口处检索它。这将
    除非您存储全局数组,否则不会保留在已保存的工作簿中
    在某处保存/关闭并在打开时检索。
  • 写一个XLLXLM检索
    上一个值
  • 关于excel - 无论计算模式如何,您将如何编写手动计算的 excel udf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8746117/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com