プロが教えるわが家の防犯対策術!

フォームを作成すると同時にイベントを作成する方法は?

アクセスなのですが
標準モジュールで
Sub フォームを作成()
Dim myForm As Form
Set myForm = CreateForm
DoCmd.Close acForm, myForm.Name, acSaveYes
End Sub
をしたと同時に、
そのフォーム内に
Private Sub Form_Open(Cancel As Integer)
MsgBox "開きました"
End Sub
のようなイベントを同時に生成するにはどうすればいいでしょうか?

クラスモジュールを使うのですか?
クラスモジュールの使い方がまったくわからないのですが
サンプルコードを頂けないですか?

A 回答 (1件)

・・・ひょっとして、ランタイム環境下での開発用インター


フェースでも作成されていたりするのでしょうか・・・?


新規作成したフォームにイベントを組み込む場合の
ポイントとなるのは
 ・FormオブジェクトのModuleプロパティの使用
  (それを経由しての、AddFromStringメソッドを
  使用したコードの追加)
 ・Formオブジェクトの当該イベントプロパティへの
  「[Event Procedure]」の設定
になります。


具体的には以下の通りです(標準モジュールでOk):

Public Sub フォームを作成()
On Error GoTo エラー処理

  Dim myForm As Form, myModule As Module

  '追加するコードを予め定数として宣言
  '(変数で宣言して、コード内で編集してもOk)
  Const cCode As String = "Private Sub Form_Open(Cancel As Integer)" & vbCrLf _
      & "MsgBox ""開きました""" & vbCrLf _
      & "End Sub"

  Set myForm = CreateForm

  '明示的に『コード保持』プロパティを「はい」に設定
  '(なくても自動で設定されるようですが、念のためで)
  myForm.HasModule = True

  '『開く時』イベントに「[イベント プロシージャ]」を設定
  myForm.OnOpen = "[Event Procedure]"

  'AddFromStringを使用して、フォームモジュールに
  'コードを追加
  Set myModule = myForm.Module
  myModule.AddFromString cCode

  DoCmd.Close acForm, myForm.Name, acSaveYes

終了処理:
  'オブジェクト変数を明示的に解放
  Set myModule = Nothing
  Set myForm = Nothing

  Exit Sub

エラー処理:
  MsgBox Err.Number & ":" & Err.Description, vbCritical, "フォームを作成"
  Resume 終了処理

End Sub


・・・以上です。

なお、何らかの原因で一旦上記のコード実行中にエラーが
発生した際に、次に再度実行するとフォームが保存されない
現象が見られました。

もしこの現象が再現するような場合は、一旦そのAccessの
ファイルを閉じ、開き直してから再実行してみてください(汗)
(オブジェクト変数myForm/myModuleを明示的に解放して
 はいるものの、残骸が内部に残っているのかもしれません)
「フォームを作成すると同時にイベントを作成」の回答画像1
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2013/03/10 08:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!