使用主窗体中的未绑定文本框过滤 Microsoft Access 中的子窗体

Posted

技术标签:

【中文标题】使用主窗体中的未绑定文本框过滤 Microsoft Access 中的子窗体【英文标题】:Filtering a subform in Microsoft Access using an unbound textbox in main form 【发布时间】:2016-02-11 19:09:07 【问题描述】:

我有两个表单:“Job Sheet”(主表单)和“Jobs sub”(子表单)。

我正在尝试使用 'afterupdate' 函数和一个名为 yrcheck 的未绑定文本框来过滤子表单的数据表视图,由 JbYr 字段。

请告诉我,这段代码有什么问题?

Private Sub yrcheck_AfterUpdate()

Dim yr As Integer
yr = Me.yrcheck
[Jobs sub].Form.Filter "JbYr='" & yr & "'"
[Jobs sub].Form.FilterOn = True

End Sub

我收到“无效使用财产”错误。

怎么了?

【问题讨论】:

什么是 JbYr?字符串、数字还是日期? JbYr 是一个“长整数”,数字类型字段。 我认为 yr 应该是整数,但是当我尝试这样做时,错误并没有消失。 【参考方案1】:

告诉我们哪一行触发了错误会很有帮助。既然你没有,我猜这条线是罪魁祸首......

[Jobs sub].Form.Filter "JbYr='" & yr & "'"

如果我的猜测是正确的,请在Filter 和字符串表达式之间添加一个= 符号...

[Jobs sub].Form.Filter = "JbYr='" & yr & "'"
                       ^
                      here

如果JbYr字段的数据类型是数字,去掉yr值前后的单引号...

[Jobs sub].Form.Filter = "JbYr=" & yr

我还会通过Me 引用子表单控件,类似于@Smandoli 的建议,但我认为这不是您最初错误的根源...

Me![Jobs sub].Form.Filter = "JbYr=" & yr

【讨论】:

嗨,汉斯,谢谢您的回复。我尝试了每个人的解决方案的组合,错误要么持续存在,要么什么也没有发生。为了消除混淆,我将过滤器本身存储为字符串。这是我的新代码:` Private Sub yrcheck_AfterUpdate() Dim yr As Integer Dim strFilter As String strFilter = "JbYr= " & yr & "" yr = Me.yrcheck Me![Jobs sub].Filter = strFilter Me![Jobs sub].FilterOn = True End Sub ` ___ 我用过等号,去掉等号,用过单引号,去掉单引号,错误依旧。我迷路了。 试过了,没有我! [乔布斯子]之前。当我运行它时,会发生同样的错误,但下面的行 Me![Jobs sub].FilterOn = True 是标记错误的行。删除了我!在那一行之前,然后我得到了另一种错误,整个方法声明都标记了一个错误。 请注意,当我复制和粘贴 Smandoli 的代码时,它不会产生错误,也不会产生结果。没有任何反应,没有打开过滤器。 我希望我可以,但是数据库是为我的办公室使用的,并且上面有机密信息,显然,所以我没有获得许可:(谢谢,我认为没有什么问题代码。 我希望我能解释一下并理解它......实际上对我来说最安全的做法是制作数据库的“模拟”副本,在那里尝试代码,看看它是否有效,如果没有,发给你?请稍等。【参考方案2】:

可能是您引用子表单的方式。试试:

Private Sub yrcheck_AfterUpdate()

    Dim yr As Integer
    yr = Me.yrcheck
    Me![Jobs sub].Filter "JbYr='" & yr & "'"
    Me![Jobs sub].FilterOn = True

End Sub

【讨论】:

谢谢,我一直在尝试,没有出现错误,但没有任何反应(抱歉,错误不会像我之前输入的那样持续存在)。从字面上复制并粘贴您的代码。 注意:我已经删除了单引号 IRT 别人的建议。然后错误再次发生。把单引号放回去,错误仍然发生并且不会停止发生。 D:【参考方案3】:

非代码解决方案是保留此过滤器,只在主字段中包含文本框并展开子字段:

[Id],[yrcheck]
[ParentID],[JbYr]

这也将删除用户删除此过滤器的选项。

【讨论】:

我以为我之前评论过你,但似乎没有发送,对不起。我需要用户能够删除过滤器以查看所有记录,并根据需要以这种方式重新过滤。

以上是关于使用主窗体中的未绑定文本框过滤 Microsoft Access 中的子窗体的主要内容,如果未能解决你的问题,请参考以下文章

使用两个未绑定的文本框按日期范围过滤表单记录

在子报表的子窗体中引用未绑定的文本框

Microsoft Access - 子窗体中的组合框基于主窗体组合框

如何通过文本框过滤数据表视图中的子表单? #likeoperator #where 子句

如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串

未绑定主窗体上的列表框链接到绑定子窗体产生 3021(无当前记录)错误