2016-09-17 12 views
-1

VBAフォームのコードでは、フォームを閉じるときにプロシージャを呼び出すが、デザインビューに入ると実行したくない。Form Closeでフォームを編集するにはどうすればよいですか?

私のコードでどのように区別できますか?

Private Sub Form_Close() 
    'If NotFormEdit then <--or something? 
    Call MyProcedure() 
End Sub 

コードエラー、それが終了する前に、フォームからデータをフェッチするために、それはデザインビューに入るとき、それはそれを行うことはできません期待するので、私はデザインビューを入力してください。

通常、私はデザインビューに入る唯一の人ですが、他のユーザーがフォームを閉じるときにもプロシージャを実行する必要があります。

私はエラーを投げて取得することができますが、私はそれが正しい練習ではないことを知っています。

近い形と、私は他に何を行うことができ、フォームのデザインビューを入力区別する方法はありませんか?

+0

デザインビューに切り替えるとどういう意味ですか?これらの出来事を区別することはできません。 – Andre

+0

エラーで区別する方法はありますか? – bgmCoder

+0

ユーザーが編集モードでデザインビューに切り替えるようにしましたか?それともあなただけですか? – dbmitch

答えて

1

あなたの質問は今よりはっきりしています。

私はそれを行う唯一の方法は、呼び出されたプロシージャのフォームの状態をテストすることだと思います。しかし、私にとっては(Access 2010)、Closeイベントと呼び出されたプロシージャが実行され、の前にが終了し、デザインビューへの切り替えが実際に実行されます。

(編集:私はちょうどこれはKrishは、上記の彼のコメントに書いたものは基本的であることに気づい)

Public Sub MyProcedure() 

    ' Is form loaded? 
    If SysCmd(acSysCmdGetObjectState, acForm, "frmStart") = 0 Then 
     Debug.Print "Form is not loaded!" 
     Exit Sub 
    End If 

    If Form_frmStart.CurrentView = 0 Then 
     Debug.Print "Form is opened in Design view!" 
     Exit Sub 
    End If 

    ' This is reached and works for me if I switch frmStart to Design view! 
    MsgBox Form_frmStart.product 

End Sub 

これが解決しない場合は、あなたの質問にMyProcedure()のコードを追加し、指定してくださいエラーの場所とメッセージ。

関連する問題