2012-02-22 1 views
1

私は、NamedRangesを使用してExcelシートの "Views"を保存しています。 ユーザーがビューを選択すると、そのビュー(行のコレクション)のNamedRangeを取得し、それらの行を非表示にします。しかし、NamedRangeの実際の範囲は、私がRefersToRangeプロパティVSTO 4&C#NamedRange.RefersToRangeは、範囲が大きいときにCom例外をスローします。

「(ViewRange).RefersToRange」を参照してみたときに、私はCOM例外を取得しています大きくなりすぎたときにタイプ の例外を投げたことが表示されますSystem.Runtime.InteropServices.COMException」

本当に興味深い部分は、私がExcelでNamedRangeを選択することができ、それはまた、うまく.RefersTo.RefersToR1C1のような他の特性を全範囲をハイライト表示するということです良い結果を返す。

まず、すべての行を含むRangeを作成して名前を付けるだけで、NamedRangeを作成します。ここ

は、私はCOMのエラーを取得していたときにRefersToR1C1によって返されるものの一例である

「=シート1 R13:!R23、シート1 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 R200、R202、Sheet1!R207:R208、Sheet1!R261:R271、Sheet1!R274:R287、Sheet1!R289、Sheet1!R291:R294、Sheet1!R296:R297、Sheet1 R212:R420、Sheet1!R420:R421、Sheet1!R423:R444、Sheet1!R420:R421、Sheet1!R420:R421、Sheet1! 、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 !!!

[OK]これは元の質問には答えられないため、私は答えずに編集しました。ここに評判の良い「Stack Overflowers」がある場合は、私が答えなければならないかどうか教えてください。

問題の範囲にアクセスする方法を見つけましたが、これは私の直面する問題を解決します。私は

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

次のコード行を使用して終了、それが失敗した理由のおかげで、 ピート

+0

これは解決策であり、問​​題が解決した場合は答えとしてマークしてください。これにより、既に修正されている問題を解決しようとする時間を無駄にしている他の人が節約されます。 BTW +1 –

+0

私もこれを持っています。受け入れられた回答は、RefersToRangeを無意味にするため、非常に不満足なものです。 NamedRange.Nameをチェックするとnullになりますが、これは範囲に変更が発生したときに発生します –

答えて

1

はまだ知らないが、実用的なソリューションは、ワークシートのget_Range()メソッドを使って名前の範囲にアクセスすることです。

Globals.Sheet1.InnerObject.get_Range(viewName, System.Type.Missing).EntireRow.Hidden = true; 
関連する問題