访问过滤器 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] = " & AlvoAtual
、Me.FilterOn = True
和Me.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 & """"
如果这些变体都不是您的答案,请向我们提供有关 Filterby
和 FilterCrit
的更多信息。
【讨论】:
我已经在这个问题上获得了赏金。看到 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的主要内容,如果未能解决你的问题,请参考以下文章