我正在尝试在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),希望得到答案,而不是像我advised那样复制。
我试图用局部变量做同样的事情。
当我手动定义值时,我的过滤器正常工作,但是当我引入变量时,过滤器不再起作用
Forms![frmPendingActions]![qryPendingAction subform].Form.Filter = "Filterby = FilterCrit"
有人能帮我找到一个好的解决方案吗?
答案 0 :(得分:3)
你(VBAWhatnow)说“当我手动定义值时,我的过滤器工作正常,但当我引入变量时,过滤器不再有效”。
然后在您的过滤器分配...
.Filter = "Filterby = FilterCrit"
所以我假设FilterCrit
是你的局部变量的名字。如果是这样,请使用变量的值而不是其名称来构建过滤器表达式。
如果Filterby
是数字字段类型...
.Filter = "Filterby = " & FilterCrit
如果Filterby
是文字字段类型...
.Filter = "Filterby = """ & FilterCrit & """"
如果这些变体都不适合您,请向我们提供有关Filterby
和FilterCrit
的更多信息。
答案 1 :(得分:0)
尝试用以下方法替换3条说明:
DoCmd.ApplyFilter wherecondition:= "[Alvo] = " & AlvoAtual
请注意,您也可以手动设置条件,并将FilterOnLoad选项设置为True并保存表单。在这种情况下不需要编程。
“最好的宏不是宏......”
答案 2 :(得分: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。
希望这有帮助
答案 3 :(得分: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