Фильтр доступа 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