課題
エクセルの列数が変動するため、C# + VSTO で動的にオートフィルターの適用範囲を変更しようとしてはまりました。
Excel.Range A1 = Cells[1, 1];
if (AutoFilterMode)
A1.AutoFilter();
A1.AutoFilter();
というコードを実行すると、
RangeクラスのAutoFilterメソッドが失敗しました。
という例外が発生します。
環境
アセンブリ | Version |
---|---|
C# | 4.0.0.0 |
Microsoft.Office.Tools | 10.0.0.0 |
解決
型を Excel.Range ではなく dynamic でとるとうまくいきました。
dynamic A1 = Cells[1, 1];
if (AutoFilterMode)
A1.AutoFilter();
A1.AutoFilter();
参考
C# と VB.NET の質問掲示板 / Excelにフィルターを設定する方法
余談
解決はしましたが、原因というか、なぜこれでうまくいくのかの理屈がわからない。
MSDNみる限り、Rangeのメソッドだと思うんですが…?