创建父形式的公共过程。
Public Sub Listener(ByVal pMsg As String)
MsgBox pMsg
End Sub
然后,在每个子窗体中,从插入后调用该过程。
Private Sub Form_AfterInsert()
Dim strMsg As String
strMsg = Me.Name & " inserted row."
Call Me.Parent.Listener(strMsg)
End Sub
如果窗体也可以单独使用(没有父),Me.Parent
将抛出错误#2452,“您输入表达式有一个无效引用Parent属性。”你可以创建一个单独的函数来检查当前表单是否具有父级,并将代码基于函数的返回值。
Private Sub Form_Open(Cancel As Integer)
Dim strPrompt As String
If HaveParentForm(Me) = True Then
strPrompt = "I am a subform to '" & _
Me.Parent.Name & "'."
Else
strPrompt = "I am a top level form."
End If
MsgBox strPrompt
End Sub
功能...
Public Function HaveParentForm(ByRef frm As Form) As Boolean
Dim blnReturn As Boolean
Dim strMsg As String
On Error GoTo ErrorHandler
blnReturn = (Len(frm.Parent.Name) > 0)
ExitHere:
HaveParentForm = blnReturn
On Error GoTo 0
Exit Function
ErrorHandler:
Select Case Err.Number
Case 2452 ' The expression you entered has an invalid '
' reference to the Parent property. '
Case Else
strMsg = "Error " & Err.Number & " (" & Err.Description _
& ") in procedure HaveParentForm"
MsgBox strMsg
End Select
blnReturn = False
GoTo ExitHere
End Function
有一件事我忘了要注意的是,这些个人数据输入形式也意在精灵外使用,所以我不得不添加一些测试是否有实际上是父母形式。奇怪的是,尽管我在测试父对象是向导之前测试了父对象并非null,但如果是,则会触发错误,然后调用该对象。我通过设置错误处理忽略了这个问题来解决问题,但如果有人能够解释它为什么会发生,我会很感激。 – 2012-08-08 21:15:31
正确的,你不能测试Me.Parent'是否'为null,因为你不能引用'Me.Parent'水平,除非'Me'是子窗体。所以你必须捕获错误#2452“你输入的表达式对Parent属性有一个无效的引用。” – HansUp 2012-08-09 00:46:41