2012-02-22 32 views
1

我使用NamedRanges來存儲我的Excel工作表的「視圖」。 因此,當用戶選擇一個視圖時,它將獲取該視圖的NamedRange(一組行),然後它將隱藏這些行。然而,看來當NamedRange實際範圍變得太大我得到一個COM異常,每當我試圖指RefersToRange物業當範圍很大時,VSTO 4&C#NamedRange.RefersToRange拋出Com異常

「(ViewRange).RefersToRange」扔 類型的異常「 System.Runtime.InteropServices.COMException」

最有意思的是,我可以在Excel中選擇NamedRange,它會突出顯示整個範圍就好了,也喜歡.RefersTo其他屬性.RefersToR1C1回報很好。

我創建了NamedRange,首先用所有行創建一個Range,然後給它命名。

這裏是什麼是RefersToR1C1當我收到COM返回錯誤的例子

「= 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,工作表Sheet1 R413的Sheet1 R415:!R418的Sheet1 R420:R421,工作表Sheet1 R423:R 444 ,Sheet1!R448:R450,Sheet1!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 

任何幫助,將不勝感激的代碼,或者如果你有完成我的「意見」的一個更好的辦法,或者是有沒有辦法甚至使用公式上面的地址來實例化我可以隱藏的範圍?

UPDATE !!!

好吧所以這並不回答原來的問題,這就是爲什麼我編輯而不是回答。如果有信譽良好的「Stack Overflowers」,請告訴我是否應該回答。

我想出了一種方法來訪問有問題的範圍,這確實解決了我的直接問題。最後我用下面的代碼行

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

感謝, 皮特

+0

老兄,如果這是解決方案,它解決了你的問題,你可以請把它標記爲答案。這樣可以避免其他人浪費時間來解決已經解決的問題。順便說一句+1 – 2012-03-16 00:02:16

+0

我也有這個。接受的答案是非常令人不滿意的答案,因爲它使RefersToRange毫無意義。如果您檢查NamedRange.Name它也是空的,這似乎發生在範圍內發生更改時 – 2015-08-06 13:36:27

回答

1

仍然不知道爲什麼會失敗,但工作的解決方案是通過工作表的get_Range()方法來訪問的名稱範圍。

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