2011-01-10 2 views
10

Я пытаюсь использовать фильтр в VBA, как это:Filter Access VBA

Private Sub Form_Load() 

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

End Sub 

Где AlvoAtual является глобальной переменной, но Nothin бывает. Когда я изменяю AlvoAtual для значения specialc, ничего не происходит. Например:

Private Sub Form_Load() 

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

End Sub 

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


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

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

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

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

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

+0

это может быть опечатка, но 'Me.Filter = "[Alvo] =" & AlvoAtual',' Me.FilterOn = true' и 'Me.Requery' нужно быть в отдельных строках –

+0

@oracle сертифицированный профессионал В Stackoverflow, если вы не используете кнопку кода, {} или
, текст появляется, как указано выше. – Fionnuala

+0

Вы уверены, что Alvo - это имя поля в вашем источнике записи, а не имя контроля? Если Alvo является текстом, вам нужны кавычки, как показано в вашем втором примере, но они не показаны в вашем первом примере. Access 2007 имеет новое свойство FilterOnLoad, используете ли вы> = 2007? – Fionnuala

ответ

0

Попробуйте заменить ваши 3 инструкции по этим:

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

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

+0

Я не вижу, как это поможет, когда должна быть какая-то основная проблема с заявлением «[Alvo] =" & AlvoAtual – Fionnuala

+0

Я пробовал DoCmd.ApplyFilter wherecondition: = "[Alvo ] = "& AlvoAtual или DoCmd.ApplyFilter wherecondition: =" [Alvo] = 'AAAA' " и не работает. Когда я ставлю условие вручную, оно работает, но проблема в том, что я не могу вручную установить глобальную переменную. Я использую офис 2007. Еще один приговор? – user569709

+1

Попробуйте добавить строку, которая говорит: debug.? "-", AlvoAtual, "-" к вашему модулю FormLoad. Загрузите форму, нажмите ctrl + G, чтобы увидеть окно отладки. –

3

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

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

.Filter = "Filterby = FilterCrit" 

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

Если Filterby является числовым типом поля ...

.Filter = "Filterby = " & FilterCrit 

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

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

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

+1

Я наградил щедрость на этот вопрос. Видя, как VBWhatNow никогда не возвращался, я предполагаю, что это решение сработало. –

0

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

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

Надеется, что это помогает

0

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

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