1

私は3つのフォームを持っています。フォームは親であり、他のフォームは親のサブフォームとして挿入されます:

     f_p            form parent
    /  \
f_c1    f_c2        forms childs 1 and 2

「Current」イベントをフォーム f_c1 でプログラムしたので、ユーザーが f_c1 で選択した行を変更すると、一部のデータが f_c2 にコピーされます。

Private Sub Form_Current()

    Me.Parent("f_c2").Form("field_in_f_c2") = Me("field_in_f_c1")

End Sub

しかし、それはエラー 2455 を返します。

You specified an expression that contains a non valid reference to the Form/Report property.

これが機能するため、エラーは「.Form」部分にあるようです。

Debug.Print Me.Parent("f_c2").Name

しかし、これは機能しません:

Debug.Print Me.Parent("f_c2").Form.Name

つまり、親の子に入ることができないようです。

何が起こっている可能性がありますか?

注: f_c1 は共通フィールドを介して親にバインドされますが、f_c2 は親​​にバインドされません。コントロールのスクロール可能なコンテナーとして f_c2 を使用します。

注 2: テストを行いました: 新しい空白のフォーム ("f_p_test") で、フォーム f_c2 を 2 回 ("f_c2_a" と "f_c2_b") 挿入しました。f_c2 のチェックボックスで「クリック」イベントを構成しました (そのため、イベントは f_c2_a と f_c2_b の両方で使用できます)。このテストでは、f_c2_b フィールドから f_c2_a フィールドにアクセスでき、その逆も可能です。


更新:トリックを試しましたが、機能しません:親フォームにボタンを追加し、それにイベントを割り当てたので、ボタンをクリックすると、「f_c2」テキストボックスの値が表示されます. 結果: ボタンを手動でクリックすると、値が表示されます。しかし、フォーム f_c1 の「Current」イベントにクリック シミュレーションを追加すると、情報が表示されず、同じ古いエラーが発生します。信じられない!


更新 2 : 解決済み、競合状態でした。親フォームは、次のように他のフォームによって開かれます。

DoCmd.OpenForm "f_p"

したがって、子 (サブフォーム f_c1 および f_c2) は親の直後に開かれますが、子は同時にロードされません。子 f_c1 がロードされると、その「Current」イベントが実行され、f_c2 にアクセスしようとしますが、f_c2 はまだロードされていないため、次のコードは失敗します。

Private Sub Form_Current()                  ' "Current" event for f_c1
    Dim f_c2 As Form
    set f_c2 = Me.Parent("f_c2").Form       ' f_c2 could be not loaded
    ' rest of code
End Sub 

解決策は、f_c2 がまだロードされていないことを検出することです。

Private Sub Form_Current()                  ' "Current" event for f_c1
    Dim f_c2 As Form
    On Error Resume Next
    Set f_c2 = Me.Parent("f_c2").Form
    If Err <> 0 Then                        ' if f_c2 is still not loaded, then return
        Exit Sub
    End If
    On Error GoTo 0
    ' rest of code
End Sub 

幸いなことに、親フォーム f_p が開かれると、f_c1 の Form_Current() イベントが自動的に 2 回呼び出されます。2 回目では、f_c2 は既にロードされているため、f_c1 データは f_c2 のコントロールに正常にコピーされます。

4

1 に答える 1