我使用NamedRanges存储Excel表格的“视图”。 因此,当用户选择一个View时,它将获取该View(一组行)的NamedRange,然后它将隐藏这些行。但是,看来当NamedRange中的实际Range变得太大时,每当我尝试引用RefersToRange属性时,我都会收到COM异常
'(ViewRange).RefersToRange'引发了类型异常 'System.Runtime.InteropServices.COMException'
真正有趣的部分是我可以在Excel中选择NamedRange,它会突出显示整个范围,还有其他属性,如 .RefersTo 和 .RefersToR1C1 返回很好。
我创建了NamedRange,首先创建一个包含所有行的Range,然后命名它。
这是我收到COM错误时RefersToR1C1返回的内容的示例
!“= Sheet 1中R13:R23,工作表Sheet R26:R39,Sheet 1中R41,Sheet 1中R43:!R46,Sheet 1中R48:R49,Sheet 1中R51:R72,Sheet 1中R76:R78,Sheet 1中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工作表Sheet 1,工作表Sheet R415:!R418,R420工作表Sheet:R421,R423工作表Sheet:R 444,工作表Sheet R448:R450,R455工作表Sheet: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;
谢谢, 皮特
答案 0 :(得分:1)
仍然不知道它失败的原因,但工作解决方案是通过Worksheet的get_Range()方法访问名称范围。
Globals.Sheet1.InnerObject.get_Range(viewName, System.Type.Missing).EntireRow.Hidden = true;