1

親フォームのままでサブフォームによって実行された挿入操作を検出することは可能ですか?

明確にするために:私はデータ入力用の一連のフォームを持っています、それらはそれぞれ適切なテーブルにエントリを追加するためのボタンを持っています(フォームで提供されたデータを使用して)。私はそれらのそれぞれを、すべてのデータ入力フォームを循環する「ウィザード」親フォームのサブフォームに順番に設定しようとしています。

この親フォームのAfterInsertイベントが、サブフォームに含まれるフォームによってトリガーされた挿入を検出していないことが明らかになったため、フォームの切り替えに関して問題が発生します。挿入のトリガーを親フォームのボタンに移動できることはわかっています。ただし、私の知る限り、これには、データ入力フォームの各ボタンのクリックイベントのコードをパブリックとして設定して、親フォームのコードから呼び出せるようにする必要があります。私はこれを行うのが気が進まないので、他のオプションを望んでいました。

4

1 に答える 1

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 がスローされます。「入力した式には、親プロパティへの無効な参照があります。」親であり、関数の戻り値に基づいてコードを作成します。

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
于 2012-08-06T14:24:17.877 に答える