不同语言的VBA Excel:翻译布尔自动筛选条件

时间:2017-05-16 08:23:36

标签: vba excel-vba boolean autofilter multiple-languages

我有一个表,我根据存储在该表中的布尔值进行过滤。每当值为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使用任何语言?

3 个答案:

答案 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

在澳大利亚英语区域工作:

enter image description here

答案 1 :(得分:0)

尝试一下:

条件1:= CStr(True)

答案 2 :(得分:0)

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

显然,此解决方案还远远不够完美,但是,到目前为止,这是我找到的唯一方法。 Excel最好将布尔值存储为False0:如果以zip文件形式打开工作簿,则可以看到1之类的文件,其中包含布尔单元格的条目如下:

sheet1.xml

<c r="B5" s="6" t="b"> <v>0</v> </c> 似乎代表值的类型,在本例中为t,表示b