Compile - Syntax Error: When toggling select filter with If Statement

蹲街弑〆低调 提交于 2019-12-23 02:17:19

问题


it's me again - I'll get to know this language better eventually.

Basically - I have a big table of data that has autofilter on - range "$B$5:$Z$1697"

However, there is an additional filter on the R column that I want to be toggled on or off.

Therefore I need an If statement that says when the additional filter is on, remove, whereas, if the filter is not on at the time you press the button - apply it.

I've played around with this and watched more videos that I care to admit. However, there must be something I'm overlooking or don't understand.

The code works up until the Else line, which returns:

"Compile Error, Syntax Error".

Can anyone explain what's happening?

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

EDIT: I have corrected the code, amending this ELSE line to this

Else: Sheets(4).Range("$B$5:$Z$1697").AutoFilter(Field:=17, Criteria1:="=") = True

However, when I run this now it means that it turns the filter On and then Off again with one push of the button. How do I make it so it onl makes on change at a time.

I.e. if the filter is on when the button is pressed it ONLY turns it off.

And vice versa


回答1:


The easiest way to toggle a filter on/off is to use an ActiveX Toggle button. When the toggle button is clicked (enabled) your filter will be applied, when clicked again (disabled) your filter is removed. Change the name of the toggle button and Criteria1 to meets your needs.

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



回答2:


This is NOT a complete answer, but I can't fit all this into a comment...

I've found that continually using compound references to refer to different objects within Excel can really give me headaches. Using intermediate objects doesn't impose any significant performance penalty at all, so I am in the habit of breaking down the compound reference into a series of intermediate objects. Doing this gives me at least two advantages: 1) I can examine the intermediate objects to make sure of the data I think should be there, and 2) I get far fewer syntax errors because each step gets validated.

So, while I can't check if this is correct since I can't access your data, your logic could look like this

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


来源:https://stackoverflow.com/questions/56239377/compile-syntax-error-when-toggling-select-filter-with-if-statement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!