2017-11-14 1 views
0

私のデータベース(クエリ)と比較できる配列を書いています。配列内に "Or"ロジックを含めることができるようにするにはどうすればいいのでしょうか?フィルタ= myArray(0)またはmyArray(1)またはmyArray(2)のような出力を取得したいので...私は配列の数がないので、ユーザーの入力数に依存します私はmyArray(x)を持っています。 ありがとうございます。MS Accessで配列をフィルタリングする方法

Private Sub TestButton_Click() 
Dim myArray As Variant 
Dim Status_Input As Variant 
Dim x As Variant 
Dim i As Variant 
Dim Status_Filter As Variant 

Status_Input = Forms![try2].StatusInput 

myArray = Split(Status_Input, ";") 

For x = LBound(myArray) To UBound(myArray) 
MsgBox " " & myArray(x) & " "    'MsgBox = 03 20 27 (3 MsgBoxes) 

Status_Filter = _ 
"[Status] Like " & myArray(x) 

Debug.Print Status_Filter 
Me.Filter = Status_Filter 
Me.FilterOn = True 

Next x 

End Subの

答えて

0

あなたはORで区切っ、お互いにフィルタを追加することができます。また、ワイルドカードを使用する必要がある場合にのみLikeを使用することをお勧めします。

Likeを使用しない場合は[Status] Like 1 OR [Status] Like 2 OR [Status] Like 3ではなく[Status] IN(1, 2, 3)を使用してコードを最適化できます。

Status_Filter = "[Status] Like " & myArray(LBound(myArray)) 'Note: fails if myArray is empty 
For x = LBound(myArray) + 1 To UBound(myArray) 
    Status_Filter = Status_Filter & " OR [Status] Like " & myArray(x) 
Next x 
Me.Filter = Status_Filter 
Me.FilterOn = True 
+0

クール!できます!ありがとう、エリック。 –

0

最終的に別のパスを試すことができます。 STATUS_INPUTがすでにリストであるので、値が数値であれば、上記の作業、および効率的である必要があり、

status_filter = "status IN (2, 4, 6)" 

status_filter = "status IN (" & replace(status_input,";",",") & ")" 

これは次のように評価する必要があります。

+0

アドバイスをいただきありがとうございます。彼らは数字ではないのですか? –

+1

フィルタを動作させるために入力テキストに ''を追加する必要があることがわかったので。例えば'ABCD'; 'EDKN'; 'JTS' –

+0

@BeckoChiuそうだけど、代わりに 'ABCD'、 'EDKN'、 'JTS' –

関連する問題