2016-01-13 4 views
0

После обширных исследований мне еще предстоит найти ответ на мою проблему. Мне сложно провести поле со списком «Мульти-значение». Я хотел бы иметь возможность добавить это многозначное поле со списком в мою форму поиска. Но мой код, похоже, не работает. Мои исследования показывают, что данные многозначных полей хранятся где-то в другом месте. Вот мой код, я надеюсь, что смогу войти в правильное направление.Многозначные поля - Поиск фильтра Доступ

Например, поле «Цвет» представляет собой всплывающее окно с несколькими значениями: красный, синий, желтый Вы можете выбрать несколько вариантов, чтобы это поле отличалось от других полей. Этот код отлично подходит для всех моих других полей. Пожалуйста, дай мне знать, что ты думаешь. Благодаря

If Nz(Me.Color) <> "" Then 
strWhere = strWhere & " AND " & "tblFlower.Color = '" & Me.Color & "'" 
End If 
+0

Вы имеете в виду добавить элемент управления, скажем, список, в форму поиска, которая заполнена опциями, доступными в нескольких значениях? –

+0

Помогает ли это? https://support.office.com/en-us/article/Using-multivalued-fields-in-queries-6f64f92d-659f-411c-9503-b6624e1e323a –

+0

TblFlower.color.value вам нужно использовать, я считаю, –

ответ

0

Если я хорошо понимаю, что вы говорите о ListBox, а не ComboBox.

Вам нужно перебирать выбранных элементов и добавить их в ИНЕКЕ:

Dim ctl  As ListBox 
Dim varItem As Variant 

Set ctl = Me.Color 

If ctl.ItemsSelected.Count >= 1 Then 
    'write begining of strWhere clause 
    strWhere = strWhere & " AND tblFlower.Color IN(" 

    'iterate throught selected items to add them to the list) 
    For Each varItem In ctl.ItemsSelected 
     strWhere = strWhere & "'" & ctl.ItemData(varItem) & "'," 
    Next varItem 

    'remove last comma and close parentheses 
    strWhere = Left(strWhere, Len(strWhere) - 1) 
    strWhere = strWhere & ")" 
End If 

это должно добавить «И tblFlower.Color IN („красный“,„желтый“)» в строку strWhere, если вы выбрали эти 2 цвета.

EDIT: для MultiSelect ComboBox

Значение ComboBox хранится в массиве. Вам необходимо пройти итерацию по этому массиву:

Dim strWhere As String 
Dim i   As Integer 

'first control if values have been selected 
'then loop through array 
If IsArray(Me.Color.Value) Then 

    'write begining of strWhere clause 
    strWhere = strWhere & " AND tblFlower.Color IN(" 

    For i = 0 To UBound(Me.Color.Value) 
     strWhere = strWhere & "'" & Me.Color.Value(i) & "'," 
    Next i 

    'remove last comma and close parentheses 
    strWhere = Left(strWhere, Len(strWhere) - 1) & ")" 

End If 
+0

Фактически это поле со списком, а не список. Это, по сути, многокомпонентный комбинированный блок: например, у меня есть tblFlower и tblColor. tblColor имеет список различных цветов красного синего ... tblFlower имеет поле под названием color и я связал это поле с tblcolor, он создал выпадающее меню и в параметрах loup, которые я сказал Разрешить множественный выбор –

+0

Я никогда не использовал эту функцию до , Я отредактировал свой ответ с куском кода для работы с несколькими избранными полями. – Guillaume

+0

, кажется, не работает, я не знаю, что я делаю неправильно, это тип поля, у меня есть https://support.office.com/en-us/article/Guide-to-multivalued-fields-7c2fd644- 3771-48e4-b6dc-6de9bebbec31? CorrelationId = 864bb826-b28b-40fb-8b74-2e45d38d40fd & ui = en-US & rs = en-US & ad = US # BM7 проблема в том, что я не знаю, как получить доступ или ссылаться на эти поля в статусах if. Я также опубликовал предыдущий вопрос об обязательных полях, но без решения. Эти многозначные поля действительно дают мне трудное время. –

Смежные вопросы