我正在使用 Microsoft Excel 的 VBA 中的自动筛选器。我对它如何处理过滤数组有疑问;我已经将原来的上下文淡化为简化版本(最初是为了理解这个问题):
在范围 A1:A5 的工作表中,假设我们有Fruit
, Apple
, Banana
, Orange
, and Pear
, 分别。已应用自动过滤器,以便Fruit
是列标题。
运行以下代码将返回预期结果(Apple
, Banana
, and Orange
但不是Pear
):
Range("A1").Select
ActiveSheet.Range("A1:A5").AutoFilter Field:=1, _
Criteria1:=Array("=*an*", "=*app*"), Operator:=xlFilterValues
在我正在开发的项目中,过滤条件作为字符串变量传入,其工作方式如上。问题是并非所有标准每次都会应用,因此其中一些标准应该没有效果。
例如:
Dim A As String, B As String, C As String
A = "=*an*"
B = Empty
C = "=*ap*"
Range("A1").Select
ActiveSheet.Range("A1:A5").AutoFilter Field:=1, _
Criteria1:=Array(A, B, C), Operator:=xlFilterValues
With B
放入混合中,过滤不返回任何记录(无论是否为空,设置为Empty
,或使用通配符,如=*
)。更换B
with Empty
然而,实际条件数组中的(硬编码)返回预期结果。
我过去使用过类似的代码(并且它可以工作),尽管 AutoFilter 是 ListObject 的一部分。此时,我唯一能想到的就是将过滤器连接成一个带有分隔符的字符串,并将其分割成一个数组变量(这样它就是精确的大小,因为集合中未设置的项目也会以同样的方式弄乱它)标准变量可以)。但这似乎不直观且麻烦。
我在这里遗漏了一些明显的东西吗?