我当前正在使用Access 2007创建一个表单,其中组合框过滤了可编辑子表单。
子表单基于一个查询,该查询从组合框中获取一个Project_ID,并根据该Project_ID号过滤子表单表。在窗体视图中时,我可以更改组合框,并在手动刷新后过滤子窗体。但是,子窗体不会随组合更改自动过滤。
我不知道出了什么问题。我已经尝试了多个VBA版本,但没有任何效果。更改后,我目前正在使用此VBA脚本来展开子窗体。
Private Sub cboProjectSelect_AfterUpdate()
Me!Project_Tracker_Subform.Form.Requery
End Sub
答案 0 :(得分:-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