导致#NAME

时间:2018-03-09 07:29:36

标签: c# excel excel-dna xll

我有一个C# ExcelDna XLL函数库,我在启动时从VSTO加载项注册。

this.Application.RegisterXLL(xllPath);

当我shell执行Excel文件(Process.Start .xlsx文件)时,大部分时间一切正常,函数在工作簿打开时进行评估。

以这种方式打开工作簿时,Excel会重用当前正在运行的EXCEL.EXE进程(如果存在)。大多数时候这很好,但在某些情况下,例如,如果Excel通过COM打开然后关闭,那么当Excel实例关闭时,它并没有真正关闭,但是关闭所有加载项并取消注册所有XLLs但仍然存活。当进程调用其中一个僵尸进程时,这些函数显然不再评估。

为了试图解决这个问题,我尝试使用.xlsx文件作为命令行参数直接打开Excel,但在这种情况下,似乎存在某种竞争条件,并且工作簿在XLL已完成注册,功能始终评估为#NAME。如果修改并重新评估单元格,则函数会正确评估。调用Application.CalculateFull()和所有可能的变体都无效。

如果我通过资源管理器打开一个文件(即双击它),那么奇怪的是它现在返回#N\A而不是#NAME,但仍然是同样的问题。

我甚至尝试注册XLL,因此它会在启动时加载(see here),但仍然无效。

有没有其他人遇到过此问题并找到了一种可靠的方法来在打开Excel实例时评估XLL函数?

1 个答案:

答案 0 :(得分:0)

我们发现,如果加载项未正确加载且函数未计算,则执行全局搜索和替换(例如,搜索=替换为=)当常规recalc不起作用时强制重新计算。您可以使用VBA Application.OnTime

自动执行此操作
相关问题