如何find一个单元格的命名范围 – VSTO抛出exception

要获得一个单元格的命名范围,请查看我的代码。 如果单击的单元格位于第一张纸上,则可以正常工作。 但是当我从其他工作表中select一个单元格时,它只是从HRESULT:0x800A03EC错误中引发exception

在堆栈上看到类似的问题,但力量从这些post得出的结论:这是我的代码:

Microsoft.Office.Interop.Excel.Workbook _workbook = ThisAddIn.Application.ActiveWorkbook; Microsoft.Office.Interop.Excel.Range Target = (Microsoft.Office.Interop.Excel.Range)Globals.ThisAddIn.Application.ActiveCell; foreach (Microsoft.Office.Interop.Excel.Name name in _workbook.Names) { Microsoft.Office.Interop.Excel.Range intersectRange = _workbook.Application.Intersect(Target, name.RefersToRange); if (intersectRange != null) { rangeName = name.Name; break; } } 

如果范围位于不同的工作表上,则不能使用相交而不抛出错误。 在尝试使用Intersect()之前,添加一个检查来查看每个范围的Parent属性是否引用同一张工作表。

它看起来像Globals.ThisAddIn.Excel是一个Application对象。 它可能是与Globals.ThisAddIn.Application不同的实例。 根据http://www.ureader.com/message/692318.aspx使用两个Application之间的对象可以触发你的exception。

尝试更改您的代码来使用一个或另一个Application实例,而不是两个。

尝试一个更简单的方法来获取名称

如果不是(ActiveCell.ListObject是Nothing)那么MsgBox ActiveCell.ListObject.Name End If