在Excel公式中,您可以使用=ISERR(A1)或=ISERROR(A1)
在VBA宏中,您可以使用 IsError(sheet.Cells(1, 1))
但是使用VSTO Excel Addin项目我没有在Microsoft.Office.Interop.Excel API下找到类似的功能.我只想知道单元格中是否有错误,我对错误的类型并不感兴趣.
我目前的解决方法是对所有现有错误消息执行此操作:
if (((Range)sheet.Cells[1, 1]).Text == "#N/A" || ...)
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗.API中有一个简单的功能吗?
Mik*_*lum 66
在.NET中处理CVErr值是一个非常棘手的主题.问题是.NET(理所当然)认为CVErr在错误处理方面已经过时了.但是,CVErr值仍然在Excel单元格中使用,因此这对于Excel自动化来说是一个相当大的遗漏.
幸运的是,有一种解决方法.检查CVErr值的方法是检查单元格所持有的数据类型.如果保持的值被输入为Integer(Int32),则保持的值为CVErr.(请注意,单元格中保存的数值通常键入为Double,只有CVerr值可以作为整数来表示.)
也就是说,在最简单的级别上,要测试CVErr值,您需要做的就是使用以下函数:
bool IsXLCVErr(object obj)
{
return obj is Int32;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要检查特定的CVErr值(例如,#N/A),那么您首先要检查以确保数据类型是整数(Int32),然后检查单元格所持有的特定值,根据这张桌子:
例如,您的代码可能如下所示:
enum CVErrEnum : Int32
{
ErrDiv0 = -2146826281,
ErrGettingData = -2146826245,
ErrNA = -2146826246,
ErrName = -2146826259,
ErrNull = -2146826288,
ErrNum = -2146826252,
ErrRef = -2146826265,
ErrValue = -2146826273
}
bool IsXLCVErr(object obj)
{
return (obj) is Int32;
}
bool IsXLCVErr(object obj, CVErrEnum whichError)
{
return (obj is Int32) && ((Int32)obj == (Int32)whichError);
}
Run Code Online (Sandbox Code Playgroud)
几年前我写了一篇详细的两篇文章:
这些文章是为VB.NET编写的,但原理与C#完全相同.你应该没有翻译的麻烦,但如果你有任何问题,那么请问.(有一天,我希望有时间为C#更新这篇文章.如果在某些时候发生这种情况,我会编辑帖子以包含一个链接.)
希望这可以帮助!
cod*_*ife 12
您可以使用以下WorksheetFunction方法:
Globals.ThisAddIn.Application.WorksheetFunction.IsErr(...)
Run Code Online (Sandbox Code Playgroud)
要么
[Your Excel Object].WorksheetFunction.IsErr(...)
Run Code Online (Sandbox Code Playgroud)
它IsErr在语义上与Excel工作表函数相同,只是代替实际值中的单元格引用传递 - AFAIK.