【问题标题】:How to find the named range of a cell - VSTO throws exception如何查找单元格的命名范围 - VSTO 引发异常
【发布时间】:2012-03-18 11:11:10
【问题描述】:

要获得单元格的命名范围,这是我的代码。如果单击的单元格在第一张纸上,则可以正常工作。但是当我从其他工作表中选择一个单元格时,它只会抛出 Exception from HRESULT: 0x800A03EC Error

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

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

【问题讨论】:

  • 在哪一行抛出异常?
  • 我很好奇。 InteropReference 是干什么用的?在我的经验中,我不记得曾经需要(或看到)它。
  • 那是一个自定义对象。我已经更新了代码以忽略那件事。

标签: c# excel vsto


【解决方案1】:

如果范围位于不同的工作表上,则不能使用 Intersect 而不会引发错误。添加检查以查看每个范围的 Parent 属性是否引用同一工作表,然后再尝试 Intersect()

【讨论】:

    【解决方案2】:

    在我看来 Globals.ThisAddIn.Excel 是一个 Application 对象。它可能与Globals.ThisAddIn.Application 不同。根据http://www.ureader.com/message/692318.aspx 在两个Applications 之间使用对象可以触发您的异常。

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

    【讨论】:

    • 啊,我看到您在问题中删除了对Globals.ThisAddIn.Excel 的引用。你测试了吗?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      相关资源
      最近更新 更多