Как найти именованный диапазон ячейки - исключение VSTO выдает - PullRequest
1 голос
/ 17 марта 2012

Чтобы получить именованный диапазон ячейки, вот мой код.Работает нормально, если ячейка, на которую нажали, находится на первом листе.Но в тот момент, когда я выбираю ячейку из какого-то другого листа, он просто выдает исключение из HRESULT: 0x800A03EC Ошибка

Увидел похожий вопрос по стеку, но я не получил вывод из этих сообщений:мой код:

            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 ]

4 голосов
/ 18 марта 2012

Вы не можете использовать Intersect, не выдав ошибку, если диапазоны находятся на разных листах. Добавьте проверку, чтобы увидеть, относится ли свойство Parent каждого диапазона к одному и тому же листу, прежде чем пытаться Intersect()

0 голосов
/ 18 марта 2012

попробуйте более простой способ получить имя

Если нет (ActiveCell.ListObject ничего не значит), то MsgBox ActiveCell.ListObject.Name End If

0 голосов
/ 18 марта 2012

Мне кажется, Globals.ThisAddIn.Excel это Application объект.Это может быть другой экземпляр, чем Globals.ThisAddIn.Application.Согласно http://www.ureader.com/message/692318.aspx использование объектов между двумя Application s может вызвать ваше исключение.

Попробуйте изменить код для использования одного или другого экземпляра Application, а не обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...