【问题标题】:Subform not requerying after combobox change组合框更改后子表单不重新查询
【发布时间】:2019-01-08 13:57:09
【问题描述】:

我目前正在使用 Access 2007 创建一个表单,其中组合框过滤可编辑的子表单。

子表单基于一个查询,该查询从组合框中获取一个 Project_ID,并根据该 Project_ID 号过滤子表单表。在表单视图中,我可以更改组合框并在手动刷新过滤子表单后。但是,子表单不会随着组合更改而自动过滤。

我不知道出了什么问题。我尝试了多种 VBA 变体,但没有任何效果。更改后,我目前正在使用此 VBA 脚本来加载子表单。

Private Sub cboProjectSelect_AfterUpdate()

  Me!Project_Tracker_Subform.Form.Requery

End Sub

【问题讨论】:

    标签: vba forms ms-access


    【解决方案1】:

    您当前的AfterUpdate 代码只是要求子表单重新查询现有的过滤条件,这将导致显示相同的记录。

    在您的情况下,您希望更新子表单过滤条件以引用在 ComboBox 中选择的新值。为此,您需要这样的东西:

    Dim mssql As String
    
    If Len(Me.cboProjectSelect.Value & "") > 0 Then
        mssql = "[Project_ID] = " & Me.cboProjectSelect.Value
        Me.Project_Tracker_Subform.Form.Filter = mssql
        Me.Project_Tracker_Subform.Form.FilterOn = True
    End If
    

    如果在 ComboBox 中选择了一个值,此代码只会更新子表单(即,如果用户清除 ComboBox 值,If 语句将阻止更新子表单)

    然后这段代码设置你的新过滤器并告诉子表单使用FilterOn = True执行过滤器。

    如果用户确实清除了 ComboBox,您可能希望从子表单中删除所有过滤。在这种情况下,您可以添加一个Else 子句,例如:

    Else
        Me.Project_Tracker_Subform.Form.FilterOn = False
    End If
    

    【讨论】:

    • 听起来是对的。我复制了你的代码,但它似乎仍然不起作用。我仍然遇到子表单将根据组合过滤但我必须手动刷新的问题。 ** 这是代码。 Private Sub cboProjectSelect_AfterUpdate() Dim mssql As String If Len(Me.cboProjectSelect.Value & "") > 0 Then mssql = "[Project] = " & Me.cboProjectSelect.Value Me.Project_Tracker_Subform.Form.Filter = mssql Me.Project_Tracker_Subform .Form.FilterOn = True Else Me.Project_Tracker_Subform_(1).Form.FilterOn = False End If** End Sub
    • 我不确定我是否理解您所说的“子表单将根据组合过滤但我必须手动刷新”的意思。请用更清晰的详细信息更新您的原始问题,说明您最初打开表单时在子表单中显示哪些记录,以及在您选择组合框中的项目后显示哪些记录。
    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2011-05-09
    • 2016-01-12
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多