当范围很大时,VSTO 4和C#NamedRange.RefersToRange会抛出Comexception

我正在使用NamedRanges存储我的Excel工作表的“视图”。 所以当用户select一个视图时,它将获取该视图的NamedRange(一组行),然后隐藏这些行。 但是,似乎当NamedRange中的实际范围变得太大,我得到一个COMexception,每当我尝试引用RefersToRange属性

'(ViewRange).RefersToRange'抛出一个exception的types'System.Runtime.InteropServices.COMException'

真正有趣的部分是,我可以在Excel中selectNamedRange,它将突出显示整个范围就好,其他属性如.RefersTo.RefersToR1C1返回就好。

我通过首先创build所有行的Range来创buildNamedRange,然后将其命名。

这里是当我收到COM错误时,RefersToR1C1返回的内容的一个例子

“= Sheet1中R13:R23,工作表Sheet1 R26:R39,工作表Sheet1 R41的Sheet1 R43:!R46,工作表Sheet1 R48:R49,工作表Sheet1 R51:R72,工作表Sheet1 R76:R78,工作表Sheet1 R83:R84,工作表Sheet1! R137:R147,工作表Sheet1 R150:R163,工作表Sheet1 R165的Sheet1 R167:!R170的Sheet1 R172:R173,工作表Sheet1 R175:R196,工作表Sheet1 R200:R202,工作表Sheet1 R207:R208,工作表Sheet1 R261:R271, !工作表Sheet1 R274:R287,工作表Sheet1 R289的Sheet1 R291:!R294的Sheet1 R296:R297,工作表Sheet1 R299:R320,工作表Sheet1 R324:R326,工作表Sheet1 R331:R332,工作表Sheet1 R385:R395,工作表Sheet1 R398! R411,R413工作表Sheet1,工作表Sheet1 R415:!R418,R420工作表Sheet1!R421,R423工作表Sheet1!R 444的Sheet1 R448:R450,R455工作表Sheet1!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 

任何帮助将不胜感激,或者如果你有更好的方式来完成我的“视图”,或者有什么办法甚至使用上面的公式地址来实例化一个范围,然后我可以隐藏?

UPDATE!

好吧,所以这不回答原来的问题,这就是为什么我编辑而不是回答。 如果有信誉良好的“Stack Overflowers”,请告诉我是否应该回答。

我想出了一个方法来访问有问题的范围,这确实解决了我的眼前的问题。 我结束了使用下面的代码行

 Globals.Sheet1.InnerObject.get_Range(viewName, System.Type.Missing).EntireRow.Hidden = true; 

谢谢,皮特

仍然不知道为什么失败,但工作解决scheme是通过工作表的get_Range()方法访问名称范围。

 Globals.Sheet1.InnerObject.get_Range(viewName, System.Type.Missing).EntireRow.Hidden = true;