Microsoft Access:尝试检测父窗体中子窗体触发的插入

时间:2012-08-06 07:41:37

标签: ms-access ms-access-2007 access-vba

是否仍然可以在父窗体中检测子窗体执行的插入操作?

澄清一下:我有一系列数据输入表格,每个表格都有一个按钮,用于在适当的表格中添加一个条目(使用表格中提供的数据)。我试图将它们中的每一个依次设置为“向导”父表单中的子表单,该表单将遍历所有数据输入表单。

当涉及到表单之间的切换时,我的问题就出现了,因为很明显,这个父表单中的AfterInsert事件没有检测到子表单中包含的表单触发的插入。我知道我可以将插入的触发器移动到父窗体中的按钮;但是,据我所知,这需要为数据输入表单中的每个按钮设置click事件的代码为public,以便可以从父表单的代码中调用它们。我很乐意这样做,因此希望有其他选择。

1 个答案:

答案 0 :(得分:1)

以父表单创建公共过程。

Public Sub Listener(ByVal pMsg As String)
    MsgBox pMsg
End Sub

然后,在每个子表单中,从After Insert。中调用该过程。

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