我正在尝试根据不同的条件和不同的标准创建动态过滤器。假设用户正在提供一些数据,例如
Sal>100 and sal<1000 and not equal to 500
我能够动态创建具有所有条件和值的字符串并将其存储在变量中。
这里是示例:
Filter_con
具有以下值
Criteria1:=">10", Operator:=xlAnd, Criteria2:="<100000000",Operator:=xlFilterValues
当我尝试执行代码时
Selection.AutoFilter Field:=235, Filter_con
我遇到了错误:
运行时错误:1004 范围类的自动筛选方法失败。
这是代码
t_lastrow = Cells(Rows.Count, 1).End(xlUp).Row
Range("A3:XFD" & t_lastrow).Select
If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or
ActiveSheet.FilterMode Then
Selection.ShowAllData
End If
Filter_Con=">10","<100000000"
Filter_numric_data = Split(Replace(Filter_Con, Chr(34), ""), ",")
UBU = UBound(Filter_numric_data)
Filter_Con = ""
For i__ = 0 To UBU
If i__ <> UBU Then
MsgBox (Filter_numric_data(i__))
Filter_Con = Filter_Con & " Criteria" & i__ + 1 & ":=" &
Filter_numric_data(i__) & ", Operator:=xlAnd,"
Else
Filter_Con = Filter_Con & " Criteria" & i__ + 1 & ":=" &
Filter_numric_data(i__)
End If
Next
Range("A3:XFD" & t_lastrow).Select
Selection.AutoFilter Field:=Filter_Field & "," & Filter_Con
答案 0 :(得分:0)
创建一个要显示的所有值的字典。将字典项用作带有xlfiltervalues的条件。
Option Explicit
Sub sdfgh()
Dim vals As Variant, i As Long, dict As Object
Set dict = CreateObject("scripting.dictionary")
With Worksheets("sheet1")
If .AutoFilterMode Then .AutoFilterMode = False
vals = .Range(.Cells(2, "IA"), .Cells(.Rows.Count, "IA").End(xlUp)).Value2
For i = LBound(vals, 1) To UBound(vals, 1)
Select Case True
Case vals(i, 1) > 100 And vals(i, 1) < 1000 And vals(i, 1) <> 500
'xlFilterValues requires text
dict.Item(vals(i, 1)) = CStr(vals(i, 1))
Case Else
'do nothing
End Select
Next i
With .Cells(1, "A").CurrentRegion
.AutoFilter field:=235, Criteria1:=dict.items, Operator:=xlFilterValues
End With
End With
End Sub