如何查找单元格的命名范围 - VSTO抛出异常

时间:2012-03-17 19:40:49

标签: c# excel vsto

要获得单元格的命名范围,请参阅我的代码。如果单击的单元格位于第一张纸上,则工作正常。但是当我从其他工作表中选择一个单元格时,它只会抛出HRESULT的异常:0x800A03EC错误

在堆栈上看到类似的问题但dint从这些帖子中得出结论: 这是我的代码:

            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;
                }
            }

3 个答案:

答案 0 :(得分:4)

如果范围在不同的工作表上,则不能在不抛出错误的情况下使用Intersect。在尝试Parent

之前,请检查每个范围的Intersect()属性是否引用同一工作表

答案 1 :(得分:0)

我认为Globals.ThisAddIn.Excel是一个Application对象。它可能与Globals.ThisAddIn.Application不同。根据{{​​3}},使用两个Application之间的对象可以触发您的异常。

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

答案 2 :(得分:0)

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

如果不是(ActiveCell.ListObject什么都不是)那么     MsgBox ActiveCell.ListObject.Name   结束如果