2011-01-10 82 views
10

我试图使用过滤器在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" 

谁能帮我找到一个好的解决办法?

+0

,这可能是一个错字,但`Me.Filter = “[Alvo] =” AlvoAtual`,`Me.FilterOn = TRUE`和`Me.Requery`需要分开行 – 2011-01-10 10:51:45

+0

@oracle认证专家在Stackoverflow中,除非您使用代码按钮{}或
,否则文本如上所示。 – Fionnuala 2011-01-10 12:31:32

+0

您确定Alvo是您的记录源中的字段的名称,而不是控件的名称吗?如果Alvo是文本,则需要引号,如第二个示例中所示,但这些不会显示在第一个示例中。 Access 2007有一个新的属性“FilterOnLoad”,你使用> = 2007? – Fionnuala 2011-01-10 12:46:51

回答

0

尝试通过此更换你的3个指令:

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

请注意,您也可以手动设置条件,并设置FilterOnLoad选项设置为True并保存表单。在这种情况下不需要编程。
“最好的宏是没有宏...”

3

你(VBAWhatnow)说:“我过滤器工作正常,当我手动定义的值,但是当我介绍变量过滤器不再工作”。

在你的过滤器分配

则...

.Filter = "Filterby = FilterCrit" 

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

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

.Filter = "Filterby = " & FilterCrit 

如果Filterby是一个文本字段类型...

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

如果没有这些变化的是你的答案,给我们有关FilterbyFilterCrit的更多信息。

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