【发布时间】:2017-07-06 21:51:07
【问题描述】:
我试图让一个字符串与一个代码一起工作,在该代码中,我自动执行多个选项卡以按相同的条件进行过滤,以获得从其他工作表中获取小计的工作表。
所以,我做了一些If 和Elses 来检查一些标准并尝试在此分析之后进行过滤,而不是必须执行多个AutoFilters 和多个Ifs。
所以,下面的部分工作得很好,它正在相应地制作字符串 (subStr)
If subBacia = "TODOS" Then
subStr = """<>"""
Else
subStr = """=" & subBacia & QUOTE & " , Operator:=xlOr, Criteria2:=" & QUOTE & "=TOTAIS" & QUOTE & ""
End If
但是,我避免为多个ifs 执行的这部分不起作用:
ActiveSheet.Range("$A$12:$EX$2025").AutoFilter Field:=4, Criteria1:=subStr
我的想法是,它最终会成为下面的构造,例如,具有多个标准:
ActiveSheet.Range("$A$12:$EX$2025").AutoFilter Field:=4, Criteria1:="=AN6b" _
, Operator:=xlOr, Criteria2:="=TOTAIS"`
那么,我做错了什么,或者我应该做什么我不知道? 编辑:这里是完整的代码
Sub Filter()
Dim subBacia, encarregado As String
Dim bm As String
Dim subStr, encStr, bmStr As String
'Application.Calculation = xlCalculationManual
'Application.ScreenUpdating = False
Sheets("Resumo").Select
encarregado = Range("T3")
subBacia = Range("T5")
bm = Range("T4")
Const QUOTE = """"
On Error Resume Next
If encarregado = "TODOS" And bm = "TODOS" And subBacia = "TODOS" Then
Sheets("Dem. Rede").Select
ActiveSheet.ShowAllData
Sheets("Dem. Interceptor").Select
ActiveSheet.ShowAllData
Sheets("Dem.Ramal").Select
ActiveSheet.ShowAllData
Else
If encarregado = "TODOS" Then
encStr = """<>"""
Else
encStr = """=" & encarregado & QUOTE & " , Operator:=xlOr, Criteria2:=" & QUOTE & "=TOTAIS" & QUOTE & ""
End If
If bm = "TODOS" Then
bmStr = """<>"""
Else
bmStr = """=" & bm & QUOTE & " , Operator:=xlOr, Criteria2:=" & QUOTE & "=TOTAIS" & QUOTE & ""
End If
If subBacia = "TODOS" Then
subStr = """<>"""
Else
subStr = """=" & subBacia & QUOTE & " , Operator:=xlOr, Criteria2:=" & QUOTE & "=TOTAIS" & QUOTE & ""
End If
Debug.Print encStr
Debug.Print bmStr
Debug.Print subStr
Sheets("Dem. Rede").Select
ActiveSheet.Range("$A$12:$EX$2025").AutoFilter Field:=2, Criteria1:=bmStr
ActiveSheet.Range("$A$12:$EX$2025").AutoFilter Field:=3, Criteria1:=encStr
ActiveSheet.Range("$A$12:$EX$2025").AutoFilter Field:=4, Criteria1:=subStr
Sheets("Dem. Interceptor").Select
ActiveSheet.Range("$A$12:$EM$137").AutoFilter Field:=2, Criteria1:=bmStr
ActiveSheet.Range("$A$12:$EM$137").AutoFilter Field:=4, Criteria1:=encStr
ActiveSheet.Range("$A$12:$EM$137").AutoFilter Field:=3, Criteria1:=subStr
Sheets("Dem.Ramal").Select
ActiveSheet.Range("$B$11:$Z$1214").AutoFilter Field:=3, Criteria1:=bmStr
ActiveSheet.Range("$B$11:$Z$1214").AutoFilter Field:=2, Criteria1:=encStr
ActiveSheet.Range("$B$11:$Z$1214").AutoFilter Field:=1, Criteria1:=subStr
Sheets("Cadastro Ramal").Select
ActiveSheet.Range("$A$9:$K$841").AutoFilter Field:=2, Criteria1:=bmStr
End If
'Application.Calculation = xlCalculationAutomatic
'Application.ScreenUpdating = True
End Sub
编辑:顺便说一句,Debug.Print 正在返回,例如:"=9" , Operator:=xlOr, Criteria2:="=TOTAIS"
或者干脆"<>"
这正是它应该的方式,但是,我似乎无法按照我希望的方式连接代码中的字符串。
【问题讨论】:
-
我可以看到您用于通话的代码吗? ActiveSheet.Range("$A$12:$EX$2025").AutoFilter Field:=4, Criteria1:=subStr ActiveSheet.Range("$A$12:$EX$2025").AutoFilter Field:=4, Criteria1:= & subStr
-
嘿@JoshAnstead 我已经编辑并添加了完整的代码