在以下代码中,我仅在第二次调用 AutoFilter() 时收到上述错误。
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 列的过滤器。
环境:VS2010 中的 VSTO 使用 .NET 4.0 (编辑:MS Excel 2007 Pro)
感谢你的帮助!