2016-08-17 28 views

回答

1

你可能是从UDF内部调用这个。普通的UDF不能读取工作表的其他部分 - 想法是将所需的信息作为参数传递给函数。

您可以将Excel-DNA函数标记为“宏表单功能”,这可以使其工作。 (在ExcelFunction属性中设置IsMacroType = true。)但是,这对计算顺序有其他副作用,例如,您可能正在从该单元格获取与计算开始前相同的值。

所以最好坚持Excel的功能风格,并将额外的依赖关系传递给您的UDF。


另一种可能性是您从后台工作线程调用此函数。 Excel C API(通过ExcelReference类型使用)只能从主Excel线程中调用(对于线程安全UDF有一些例外)。所以你需要让你的后台代码在主线程上运行。

Excel基本上是单线程的,所以在使用COM对象模型时也是如此 - 在COM实际运行之前,所有调用都由COM编组到主Excel线程。

在Excel-DNA加载项中,您可以使用ExcelAsyncUtil.QueueAsMacro(...)帮助程序将代码作为宏运行在主线程上。您传入的代理将尽快运行,并且可以安全地进行所询问的C API调用。

相关问题