2017-11-14 1 views
0

데이터베이스 (쿼리)와 비교할 수있는 배열을 쓰고 있습니다. 배열에 "또는"논리를 포함 할 수 있도록 어떻게 만들 수 있습니까? 왜냐하면 필터 = 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 

그냥 OR로 구분하여 서로에 필터를 추가 할 수 있습니다

답변

0

최종 하위. 또한 와일드 카드를 사용해야하는 경우에만 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'대신에 (',', not,'; –