創建父形式的公共過程。
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