I have a table which I filter based on a Boolean value.
Whenever the value is TRUE, I want it to show.
I use an autofilter and the following working VBA code:
lCol = tbl.ListColumns("xFilter").Index
With tbl
If .AutoFilter.FilterMode Then .AutoFilter.ShowAllData
.Range.AutoFilter Field:=lCol, Criteria1:="TRUE"
End With
I am working on an English instance of Excel. When I try this on an instance in Dutch I have to manually set the Criteria to WAAR (Dutch equivalent of TRUE).
I can add multiple criteria and state:
Criteria1:="WAAR", Operator:=xlOr, Criteria2:="TRUE"
However, if I would then go to Germany and Spain I would need to write:
Criteria1:="WAAR", Operator:=xlOr, Criteria2:="TRUE", Operator:=xlOr, Criteria3:="WAHR", Operator:=xlOr, Criteria4:="VERDADERO"
Is there a way to have Criteria1:="TRUE" work in any language?
You can try use the CBool function to avoid using a string or language-dependent value for TRUE when setting the AutoFilter.
CBool(1) should be 'true' in any locale.
Option Explicit
Sub TestLanguageIndependentBooleanForAutoFilter()
Dim ws As Worksheet
Dim tbl As ListObject
Dim lCol As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set tbl = ws.ListObjects(1)
lCol = tbl.ListColumns("xFilter").Index
With tbl
If .AutoFilter.FilterMode Then .AutoFilter.ShowAllData
.Range.AutoFilter Field:=lCol, Criteria1:=CBool(1)
End With
End Sub
Works in an Australian English locale: