Я использую NamedRanges для хранения «Представлений» моего листа Excel.Таким образом, когда пользователь выбирает View, он получает NamedRange для этого View (набор строк) и затем скрывает эти строки.Однако оказывается, что когда фактический диапазон в NamedRange становится слишком большим, я получаю исключение COM, когда пытаюсь сослаться на свойство RefersToRange
'(ViewRange) .RefersToRange' выдает исключениевведите 'System.Runtime.InteropServices.COMException'
Действительно интересная часть заключается в том, что я могу выбрать NamedRange в Excel, и он будет отлично выделять весь диапазон, а также другие свойства, такие как .RefersTo и .RefersToR1C1 возвращают просто отлично.
Я создаю NamedRange, сначала создав диапазон со всеми строками, а затем просто назвав его.
здесьпример того, что возвращает RefersToR1C1, когда я получаю сообщение об ошибке COM *
"= Sheet1! R13: R23, Sheet1! R26: R39, Sheet1! R41, Sheet1! R43: R46, Sheet1! R48: R49, Лист1 R51: R72, Лист1 R76: R78, Лист1 R83: R84, Лист1 R137: R147, Лист1 R150: R163, Лист1 R165, Лист1 R167:! R170, Лист1 R172: R173!, Лист1 R175: R196, R200 Лист1: R202, R207 Лист1: R208, Лист1! R261: R271, Лист1 R274: R287, Лист1 R289, Лист1 R291:! R294, Лист1 R296: R297, Лист1 R299: R320, Лист1 R324: R326, Лист1 R331: R332, Лист1 R385: R395, Лист1! R398: R411, Лист1! R413, Лист1! R415: R418, Лист1! R420: R421, Лист1! R423: R444, Лист1! R448: R450, Лист1! R455: R456 "
Вот код, где у меня возникла проблема
Excel.Range rngAll = _Blocks.DataRange;
rngAll.EntireRow.Hidden = false;
Excel.Name ViewRange = Globals.ThisWorkbook.Names.Item(viewName, System.Type.Missing);
string addy = ViewRange.RefersToR1C1 as string; //this line works fine
ViewRange.RefersToRange.EntireRow.Hidden = true; //this line throws the COM Exception
Любая помощь будет признательна, или если у вас есть лучший способ выполнить мои «Представления», или есть способ даже использовать адрес формулывыше, чтобы создать экземпляр диапазона, который я мог бы затем скрыть?
ОБНОВЛЕНИЕ !!!
Хорошо Так что это не отвечает на первоначальный вопрос, поэтому я отредактировал вместо ответа.Если здесь есть уважаемые «Переполнители стека», пожалуйста, дайте мне знать, если я должен ответить вместо этого.
Я нашел способ доступа к рассматриваемому диапазону, который решает мою непосредственную проблему.В итоге я использовал следующую строку кода
Globals.Sheet1.InnerObject.get_Range(viewName, System.Type.Missing).EntireRow.Hidden = true;
Спасибо, Пит