Фильтр доступа VBA

Я пытаюсь использовать фильтр в vba следующим образом:

Private Sub Form_Load()

    Me.Filter = "[Alvo] = " & AlvoAtual  
    Me.FilterOn = True  
    Me.Requery  

End Sub

Где AlvoAtual - глобальная переменная, но ничего не происходит. Когда я изменяю AlvoAtual для значения specialc, ничего не происходит. Вот так:

Private Sub Form_Load()

     Me.Filter = "[Alvo] = 'AAAA'"
     Me.FilterOn = True
     Me.Requery

End Sub

Кто-нибудь знает проблему?


Я принимаю этот вопрос (VBAWhatnow) в надежде, что он получит ответ, а не сделает дубликат, поскольку я был советом.

Я пытаюсь сделать то же самое, кроме локальных переменных.

Мой фильтр работает правильно, когда я вручную определяю значения, но когда я ввожу переменные, фильтр больше не работает

Forms![frmPendingActions]![qryPendingAction subform].Form.Filter = "Filterby = FilterCrit"

Может ли кто-нибудь помочь мне найти хорошее решение?

Ответ 1

Вы (VBAWhatnow) сказали: "Мой фильтр работает правильно, когда я вручную определяю значения, но когда я ввожу переменные, фильтр больше не работает".

Затем в вашем назначении фильтра...

.Filter = "Filterby = FilterCrit"

Итак, я предполагаю, что FilterCrit - это имя вашей локальной переменной. Если это так, создайте выражение фильтра, используя значение переменной, а не его имя.

Если Filterby - тип числового поля...

.Filter = "Filterby = " & FilterCrit

Если Filterby - тип текстового поля...

.Filter = "Filterby = """ & FilterCrit & """"

Если ни один из этих вариантов не является ответом для вас, дайте нам дополнительную информацию о Filterby и FilterCrit.

Ответ 2

Попробуйте заменить 3 команды следующим образом:

    DoCmd.ApplyFilter wherecondition:= "[Alvo] = " & AlvoAtual

Обратите внимание, что вы также можете установить условие вручную и установить для параметра FilterOnLoad значение True и сохранить форму. В этом случае не требуется программирование.
"Лучший макрос не является макросом..."

Ответ 3

Привет, попробуйте изменить код на следующее:

Private Sub Form_Load() 
    If Len(AlvoAtual & "") > 0 Then
        Me.Filter = "[Alvo] = '" & AlvoAtual & "'"   
        Me.FilterOn = True   
        'Me.Requery 
        MsgBox AlvoAtual
    Else
       Msgbox "No Value set for variable AlvoAtual"
    End If
End Sub 

Если имя переменной указано справа и содержит строковое значение, тогда фильтр должен работать. Также при условии, что у вас есть имя столбца Alvo в текущей форме.

Кстати, я не понимаю, почему вам нужно сделать Requery в событии загрузки форм.

Надеюсь, что это поможет

Ответ 4

Проблема с обработкой ваших одиночных и двойных кавычек. Попробуйте это и будет работать

Private Sub Form_Load()

    Me.Filter = "[Alvo] = '" & AlvoAtual & "'"""  'make sure to copy all these quotes correctly. "" is to print 1 double quote.
    Me.FilterOn = True  
    Me.Requery  

End Sub