次のコードでは、AutoFilter()の2回目の呼び出しでのみ、上記のエラーが発生します。
string FilterValue1 = tbSysCat1.Text.FilterDoesNotContain();
string FilterValue2 = tbSysCat2.Text.FilterDoesNotContain();
string FilterValue3 = tbSysCat3.Text.FilterDoesNotContain();
string[] SysCat = new string[6]; // EDIT: originally tried object[]; still got error
SysCat[0] = FilterValue1;
SysCat[1] = FilterValue1.ToUpper();
SysCat[2] = FilterValue2;
SysCat[3] = FilterValue2.ToUpper();
SysCat[4] = FilterValue3;
SysCat[5] = FilterValue3.ToUpper();
VApplication.ActiveSheet.Range[VWorkingRange].AutoFilter(9, Missing.Value, Missing.Value, Missing.Value, true);
VApplication.ActiveSheet.Range[VWorkingRange].AutoFilter(9, SysCat, MSExcel.XlAutoFilterOperator.xlFilterValues, Missing.Value, true);
注:FilterDoesNotContain()は、「含まない」のExcel固有のワイルドカードを追加するための拡張メソッドです。
私の他の調査によると、このエラーは、AutoFilterを実行時にRangeオブジェクトに関連付けることができなかったことを示しています(動的タイプであるため)。ただし、最初の呼び出しでは問題なく関連付けられていました。それは不可解な部分です。
最初の呼び出しは、列9のフィルターをクリアするためです。
環境:.NET 4.0を使用したVS2010のVSTO (編集:MS Excel 2007 Pro)
あなたの助けに感謝!