2017-05-16 10 views
4

私はそのテーブルに格納されているブール値に基づいてフィルタリングするテーブルを持っています。値がTRUEの場合はいつでも表示したいです。したがって、私はオートフィルタと次のVBAコードを使用します:異なる言語でのVBA Excel:ブールオートフィルタ条件の変換

lCol = tbl.ListColumns("xFilter").Index 
With tbl 
    If .AutoFilter.FilterMode Then .AutoFilter.ShowAllData 
    .Range.AutoFilter Field:=lCol, Criteria1:="TRUE" 
End With 

これは完全に動作します。しかし、私はExcelの英語のインスタンスに取り組んでいます。別の言語(この場合はオランダ語)のインスタンスでこれを実行しようとするたびに、フィルタリングはもう機能しません。それを動作させるには、基準をWAAR(オランダ語のTRUE相当)に手動で設定する必要があります。

しかし、自分のプログラムが言語に依存しないようにするために、この1つのオートフィルタを除いて、そうであるようです。私はその後、私が書く必要があるだろうドイツとスペインに行くならば、しかし

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

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

を私がする必要があるでしょう、私はmultiple criteria や状態を追加することができます知っています値がTRUEかどうかを知りたければ、余分な条件を追加してください。

criteria1 := TRUEはどの言語でも簡単に使用できますか?

+1

使用 'Criteria1:= "TRUE"':= true'の代わりに 'Criteria1の? (AFAIK、VBAは、どの言語バージョンが使用されていても定数、メソッド、プロパティなどのために英語を使用しますが、Excel内で 'String'を' Boolean'にキャストしなければならない場合は、そのExcelのバージョンに)。 – YowE3K

+0

これは動作していないようです。私は 'Criteria1:= TRUE'を試しましたが、うまくいきませんでした。 VBAがTRUEを変数名と考えることができると思いました。だから、変数 'Tr = TRUE'に続いて' Criteria1:= Tr'を設定しましたが、それでもうまくいきませんでした。 –

+2

カラム 'lCol'の式があれば、' 1'や '回避策として「0」の結果(例えば、 '= IF(foo、1,0)')? –

答えて

2

あなたはAutoFilterを設定するときにTRUEのための文字列や言語に依存した値を使用しないようにCBool機能を使用してみてください。

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