我正在开发一个将VBA代码移植到C#for Spreadsheet Gear的项目。我的团队成功移植了大约150个自定义Excel加载项功能。对于其中一个函数,我们的回归电子表格返回148个函数调用中的4个#value,其余的返回预期结果。当我单步执行代码时,所有内容都按预期运行,并将正确的结果写入result.Number,但在Spreadsheet Gear中解析为#value。我完全不知所措!请帮助我 - 我甚至不知道从哪里开始。
该功能的结尾如下:
if (retval < 0)
{
result.Text = UtilFuncs.ErrorNum(retval);
}
else
{
result.Number = retval;
}
retval
包含从单独DLL调用返回的正确结果。当我将鼠标悬停在result.Number
上时,它也包含正确的结果。但我得到一个#value。
如有必要,我可以提供更多代码。我最大的问题是为什么它适用于除了4个之外的所有人。
答案 0 :(得分:1)
如果没有更具体的例子,就不可能为此提供明确的答案。不过,我会在黑暗中拍摄。
如果您使用IArguments方法,例如IArguments。GetNumber(...), GetLogical(...)等,要访问自定义函数的参数,您可以阅读这些文档。例如,请参阅GetLogical(...)的以下注释:
因此,如果您将一个非布尔值传递给您期望布尔值的参数,那么您的函数可能最终会设置此内部“错误”标志,从而导致#VALUE!无论您在方法结束时设置结果对象,都会显示此单元格的错误。
如果是这种情况,您可以使用IArguments。ClearError(...)方法清除错误。