访问过滤器VBA

时间:2011-01-10 10:48:29

标签: ms-access vba access-vba

我正在尝试在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"

有人能帮我找到一个好的解决方案吗?

4 个答案:

答案 0 :(得分:3)

你(VBAWhatnow)说“当我手动定义值时,我的过滤器工作正常,但当我引入变量时,过滤器不再有效”。

然后在您的过滤器分配...

.Filter = "Filterby = FilterCrit"

所以我假设FilterCrit是你的局部变量的名字。如果是这样,请使用变量的值而不是其名称来构建过滤器表达式。

如果Filterby是数字字段类型...

.Filter = "Filterby = " & FilterCrit

如果Filterby是文字字段类型...

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

如果这些变体都不适合您,请向我们提供有关FilterbyFilterCrit的更多信息。

答案 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