又是我-最终我将更好地了解这种语言。
基本上-我有一个很大的数据表,其中包含自动过滤功能-范围“ $ B $ 5:$ Z $ 1697”
但是,我想在R列上添加或关闭其他过滤器。
因此,我需要一个If语句,该语句指示在打开其他过滤器时,将其删除,但是,如果在您按下按钮时未打开过滤器,请应用它。
我已经试过了,看了更多我想承认的视频。但是,一定有一些我忽略或不了解的东西。
代码会一直处理到其他行,然后返回:
“编译错误,语法错误”。
任何人都可以解释发生了什么事吗?
If Sheets(4).Range("$B$5:$Z$1697").AutoFilter(Field:=17, Criteria1:="=") = True Then
'If there specific filter on column R is on then
Sheets(4).Range("$B$5:$Z$1697").AutoFilter Field:=17
'Turn off that filter.
Else: Sheets(4).Range("$B$5:$Z$1697").AutoFilter(Field:=17, Criteria1:="=")
'Else, if the filter is off, turn it on.
End If
End Sub
编辑:我已更正代码,将此ELSE行修改为此
Else: Sheets(4).Range("$B$5:$Z$1697").AutoFilter(Field:=17, Criteria1:="=") = True
但是,当我现在运行此按钮时,这意味着它可以通过按一下按钮将过滤器打开,然后再次关闭。我该如何做,这样才能一次改变。
即如果在按下按钮时打开过滤器,则仅将其关闭。
反之亦然
答案 0 :(得分:1)
打开/关闭过滤器的最简单方法是使用ActiveX Toggle button
。单击(启用)切换按钮时,将应用过滤器,再次单击(禁用)时,将删除过滤器。更改toggle button
和Criteria1
的名称以满足您的需求。
Private Sub ToggleButton1_Click()
'when selected(enabled) the filter for Col "Q" will be enabled
If ToggleButton1.Value = True Then
Sheets(4).Range("$B$5:$Z$1697").AutoFilter Field:=17, Criteria1:="2"
Else
'when selected again(disabled) the filter for Col "Q" will be Disabled
Sheets(4).Range("$B$5:$Z$1697").AutoFilter Field:=17
End If
End Sub
答案 1 :(得分:0)
这不是一个完整的答案,但我无法将所有这些都放入评论中……
我发现不断使用复合引用来引用Excel中的不同对象确实让我头疼。使用中间对象根本不会对性能造成任何重大影响,因此我习惯于将复合引用分解为一系列中间对象。这样做至少给了我两个好处:1)我可以检查中间对象以确保我认为的数据应该在那里,以及2)我得到的语法错误要少得多,因为每个步骤都经过验证
因此,虽然由于无法访问您的数据而无法检查这是否正确,但您的逻辑看起来像这样
Sub Example()
Dim fourthWS As Worksheet
Dim filteredData As Range
Set fourthWS = ThisWorkbook.Sheets(4)
Set filteredData = fourthWS.Range("$B$5:$Z$1697")
Dim dataIsFiltered As Variant
dataIsFiltered = filteredData.AutoFilter(Field:=17, Criteria1:="=")
If dataIsFiltered Then
'--- turn off the filter
filteredData.AutoFilter Field:=17
Else
'--- turn on the filter
filteredData.AutoFilter Field:=17, Criteria1:="="
End If
End Sub