【问题标题】:Access Filter VBA访问过滤器 VBA
【发布时间】:2023-03-17 16:40:02
【问题描述】:

我正在尝试像这样在 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 认证专家 在 Stackoverflow 中,除非您使用代码按钮、{} 或
    ,否则文本会如上所示。
  • 您确定 Alvo 是记录源中的字段名称而不是控件名称吗?如果 Alvo 是文本,则需要引号,如第二个示例所示,但在第一个示例中未显示。 Access 2007 有一个新属性“FilterOnLoad”,您使用的是 >=2007 吗?
  • 因为当你使用 me.fitler 和 me.filteron 时,你不需要 me.requiry 是值得的。
  • @VBWhatnow,原始海报:您能否提供更多代码以正确重现您的错误? (除非 HansUp 的回复已经对您进行了排序)

标签: ms-access vba


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多