访问过滤器 VBA

Posted

技术标签:

【中文标题】访问过滤器 VBA【英文标题】:Access Filter VBA 【发布时间】:2011-01-10 10:48:29 【问题描述】:

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

谁能帮我找到一个好的解决方案?

【问题讨论】:

这可能是一个错字,但Me.Filter = "[Alvo] = " & AlvoAtualMe.FilterOn = TrueMe.Requery 需要分行 @oracle 认证专家 在 *** 中,除非您使用代码按钮、 或 ,否则文本会如上所示。 您确定 Alvo 是记录源中的字段名称而不是控件名称吗?如果 Alvo 是文本,则需要引号,如第二个示例所示,但在第一个示例中未显示。 Access 2007 有一个新属性“FilterOnLoad”,您使用的是 >=2007 吗? 因为当你使用 me.fitler 和 me.filteron 时,你不需要 me.requiry 是值得的。 @VBWhatnow,原始海报:您能否提供更多代码以正确重现您的错误? (除非 HansUp 的回复已经对您进行了排序) 【参考方案1】:

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

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

.Filter = "Filterby = FilterCrit"

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

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

.Filter = "Filterby = " & FilterCrit

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

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

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

【讨论】:

我已经在这个问题上获得了赏金。看到 VBWhatNow 再也没有回来,我会假设这个解决方案有效。【参考方案2】:

尝试用这个替换你的 3 条指令:

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

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

【讨论】:

当语句“[Alvo] =” & AlvoAtual 一定存在一些潜在问题时,我看不出这有什么帮助 我试过 DoCmd.ApplyFilter wherecondition:= "[Alvo] = " & AlvoAtual 或 DoCmd.ApplyFilter wherecondition:= "[Alvo] = 'AAAA'" 但也没有用。当我手动放置条件时,它可以工作,但问题是我无法手动放置全局变量。我正在使用 Office 2007。另一个建议? 尝试添加一行:debug.? “-”,AlvoAtual,“-”到您的 FormLoad 子。加载表单后,按 ctrl+G 查看调试窗口。 你不是说Debug.Print吗?咦——好像是Debug。?相当于立即窗口中的Debug.Print,但是当我将其键入代码时,IDE会自动将其转换为Debug.Print。因此,除了保存在即时窗口中输入的几个字符外,没有多大用处。 鉴于 Debug 对象只有两个成员,因此我可以输入 Debug.p 然后输入 space 并由 Intellisense 完成其余的操作。【参考方案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 的列名。

顺便说一句,我不明白您为什么需要在表单加载事件中进行重新查询。

希望对你有帮助

【讨论】:

【参考方案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

【讨论】:

以上是关于访问过滤器 VBA的主要内容,如果未能解决你的问题,请参考以下文章

访问VBA - 使用书签删除过滤器并保持当前记录

在 VBA 访问子窗体中应用错误的日期过滤器

在vba中使用多个字符串过滤访问报告,获取数据类型不匹配

访问vba docmd.applyfilter了解日期

将名称添加到日期范围搜索。微软访问 VBA

访问过滤器数据