将布尔自动筛选条件应用于不同的语言

Apply boolean autofilter criteria to different language

我有一个 table,我根据布尔值对其进行过滤。

每当值为 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)。

我可以添加 并说明:

Criteria1:="WAAR", Operator:=xlOr, Criteria2:="TRUE"

但是,如果我去德国和西班牙,我需要写:

Criteria1:="WAAR", Operator:=xlOr, Criteria2:="TRUE", Operator:=xlOr, Criteria3:="WAHR", Operator:=xlOr, Criteria4:="VERDADERO"

有没有办法让 Criteria1:="TRUE" 以任何语言工作?

您可以尝试使用 CBool 函数来避免在设置 AutoFilter 时为 TRUE 使用字符串或依赖于语言的值。

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:=CStr(真)

其他答案在俄语中对我不起作用 Excel,我试图在俄语中进行一些独立于语言的编码。最后,我不得不使用一组两个单元格,在其中手动输入 TRUEFALSE 值(俄语中的 ИСТИНАЛОЖЬ)并引用它们的 .Text(这很重要!)而不是 Criteria 中的 .Value2。似乎问题在于 Criteria 使用过滤器中单元格中的 .Text,这可能不等于文本 TrueFalse.

显然,此解决方案远非完美,但到目前为止,这是我找到的唯一方法。 Excel 将布尔值存储为 01 很好:如果您将工作簿作为 zip 文件打开,您可以看到像 sheet1.xml 这样的文件,其中包含这样的条目对于布尔单元格:

<c r="B5" s="6" t="b">
<v>0</v>
</c>

t 似乎表示值的类型——在本例中为 b,这意味着 boolean.