我有一个表,我根据存储在该表中的布尔值进行过滤。每当值为TRUE
时,我希望它显示。因此,我使用自动过滤器和以下VBA代码:
lCol = tbl.ListColumns("xFilter").Index
With tbl
If .AutoFilter.FilterMode Then .AutoFilter.ShowAllData
.Range.AutoFilter Field:=lCol, Criteria1:="TRUE"
End With
这完美无缺。但是,我正在研究Excel的英文实例。每当我尝试用另一种语言(在这种情况下为荷兰语)的实例上执行此操作时,过滤将不再起作用。为了使其工作,我必须手动将标准设置为WAAR
(荷兰语相当于TRUE
)。
但是,我希望我的程序与语言无关,似乎是这种情况,除了这一个自动过滤器。我知道我可以添加multiple criteria 和州:
Criteria1:="WAAR", Operator:=xlOr, Criteria2:="TRUE"
但是,如果我要去德国和西班牙,我需要写一下:
Criteria1:="WAAR", Operator:=xlOr, Criteria2:="TRUE", Operator:=xlOr, Criteria3:="WAHR", Operator:=xlOr, Criteria4:="VERDADERO"
我需要继续添加额外的标准,即使我只想知道一件事:值是否为TRUE
。
是否有一种简单的方法可以criteria1 := TRUE
使用任何语言?
答案 0 :(得分:2)
您可以尝试使用CBool
功能,以避免在设置TRUE
时使用AutoFilter
的字符串或语言相关值。
CBool(1)
在任何语言环境中应为“true”。
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
在澳大利亚英语区域工作:
答案 1 :(得分:0)
尝试一下:
条件1:= CStr(True)
答案 2 :(得分:0)
在俄语Excel中,其他答案对我不起作用,我试图在其中进行一些独立于语言的编码。最后,我不得不利用一组两个单元格,在其中手动放置TRUE
和FALSE
值(俄语中的ИСТИНА
和ЛОЖЬ
),并引用它们的{{ 1}}(这很重要!),而不是.Text
中的.Value2
。看来问题在于Criteria
使用了过滤器中可能不等于文本Criteria
和.Text
的单元格中的True
。
显然,此解决方案还远远不够完美,但是,到目前为止,这是我找到的唯一方法。 Excel最好将布尔值存储为False
和0
:如果以zip文件形式打开工作簿,则可以看到1
之类的文件,其中包含布尔单元格的条目如下:
sheet1.xml
<c r="B5" s="6" t="b">
<v>0</v>
</c>
似乎代表值的类型,在本例中为t
,表示b
。