/ / Як знайти названий діапазон комірки - VSTO кидає виняток - c #, excel, vsto

Як знайти назву діапазону комірки - VSTO викидає виключення - c #, excel, vsto

Щоб отримати іменований діапазон клітинки, ви побачите мій код. Працює нормально, якщо кліка, що натиснута, знаходиться на першому аркуші. Але в той момент, коли я вибираю клітинку з іншого аркуша, він просто кидає Виключення з 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;
}
}

Відповіді:

4 для відповіді № 1

Не можна використовувати Intersect, не викидаючи помилку, якщо діапазони знаходяться на різних аркушах. Parent властивість посилаються на той самий лист, перш ніж спробувати Intersect()


0 для відповіді № 2

Мені це подобається Globals.ThisAddIn.Excel є Application об'єкт. Це може бути інший примірник, ніж Globals.ThisAddIn.Application. Згідно з http://www.ureader.com/message/692318.aspx з використанням об'єктів між двома Applications можуть викликати ваше виключення.

Спробуйте змінити код, щоб використовувати той чи інший Application наприклад, не обидва.


0 для відповіді № 3

спробуйте отримати простіший спосіб, щоб отримати назву

Якщо ні (ActiveCell.ListObject - ніщо) Потім MsgBox ActiveCell.ListObject.Name End If