我有frmParentForm,其中有多个控件用于为frmSubForm构建过滤器。
在frmParentForm_Load上,我正在做(简化示例):
Me.sbfInvoice_List.Form.filter = "[created_on] >= #" & Me.RecentOrderDateCutoff & "#"
Me.sbfInvoice_List.Form.FilterOn = True
问题是,在初始加载时,似乎首先发生子窗体加载,因此加载整个表。
是否有办法(在不同的事件中可能)从父窗体正确设置子窗体过滤器,以便在子窗体初始数据加载之前应用它? (子表单可以单独存在,也可以作为许多不同父表单的子表单(有时是过滤的,有时不是),所以我宁愿不在子表单中加入一些复杂的hack来实现这一点。)
答案 0 :(得分:2)
由于子窗体在父窗体之前加载,因此父窗体在初始加载子窗体之前无法设置子窗体过滤器。
如果你想灵活使用子表单(单独使用所有记录,但不同父表单中包含不同的记录子集),我认为你必须修改子表单才能完成。
Private Sub Form_Open(Cancel As Integer)
Dim strParent As String
Dim strMsg As String
On Error GoTo ErrorHandler
strParent = Me.Parent.Name
Select Case strParent
Case "frmYourParentForm"
'set filter to only records from today '
Me.Filter = "[created_on] >= #" & Date() & "#"
Me.FilterOn = True
Case "frmSomeOtherParent"
'do something else '
End Select
ExitHere:
On Error GoTo 0
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 2452
'The expression you entered has an invalid reference to '
'the Parent property. '
Resume Next
Case Else
strMsg = "Error " & Err.Number & " (" & Err.Description _
& ") in procedure Form_Open"
MsgBox strMsg
End Select
GoTo ExitHere
End Sub
编辑:如果要跟踪父表单和子表单中的事件序列,可以将类似这样的过程添加到表单的模块中。
Private Sub Form_Load()
Debug.Print Me.Name & ": Form_Load"
End Sub
以下是我跟踪父表单和子表单的Open和Load事件时得到的结果。
fsubChild: Form_Open
fsubChild: Form_Load
frmParent: Form_Open
frmParent: Form_Load