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

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

10 голосов
/ 10 января 2011

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

Private Sub Form_Load()

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

End Sub

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

Private Sub Form_Load()

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

End Sub

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


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

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 15 июня 2012

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

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

.Filter = "Filterby = FilterCrit"

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

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

.Filter = "Filterby = " & FilterCrit

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

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

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

0 голосов
/ 22 июня 2012

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

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
0 голосов
/ 18 июня 2012

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

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 в событии загрузки форм.

Hopeэто помогает

0 голосов
/ 10 января 2011

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

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

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

...