ACCESS フォーム起動時イベントの発生する順番

フォーム起動時イベントの発生する順番

ACCESSのフォームを開く時には、様々なイベントが設定可能です。開く時、読み込み時、アクティブ時など。

しかし、このイベントがどの順番で発生するか、ちょっとわかりにくいですよね。

今回は、ACCESSでフォームを起動した際に発生するイベントの発生順序をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

イベントの発生順序

ACCESSのフォームを開く際のイベントは以下の順序で発生します。

イベント名イベント名英語
開く時Open
読み込み時Load
サイズ変更時Resize
アクティブ時Activate
レコード移動時Current

開く時に特定の処理をしたい場合は、この順序を意識して適切なタイミングにイベントプロシージャを設定しましょう。

イベント発生順序の検証

ちなみに、この順序を調べるために、あるフォームに以下のようなプロシージャを書いてみました。



Private Sub Form_Open(Cancel As Integer)

    Debug.Print "開く時"
    
End Sub

Private Sub Form_Load()

    Debug.Print "読み込み時"
    
End Sub

Private Sub Form_Resize()

    Debug.Print "サイズ変更時"
    
End Sub

Private Sub Form_Activate()

    Debug.Print "アクティブ時"
    
End Sub

Private Sub Form_Current()

    Debug.Print "レコード移動時"

End Sub

イベント発生時にイベント名をDebug.Printでイミディエイトウィンドウに記述するプロシージャです。
これを実行すれば実行順にイベント名が記録されます。

実行した結果が以下です。

開く時
読み込み時
サイズ変更時
アクティブ時
レコード移動時

この順序でイベントが実行されていることが分かりますね。

フォームのテキストボックスに値を入れられるタイミング

次は、イベントのどのタイミングからフォームのテキストボックスに値を入れられるかを検証しました。

上記のコードを少し書き換えて以下のようにしました。


Private Sub Form_Open(Cancel As Integer)

    Debug.Print "開く時"
    Me!開く時_テキスト = "〇"
    
End Sub

Private Sub Form_Load()

    Debug.Print "読み込み時"
    Me!読み込み時_テキスト = "〇"
    
End Sub

Private Sub Form_Resize()

    Debug.Print "サイズ変更時"
    Me!サイズ変更時_テキスト = "〇"
    
End Sub

Private Sub Form_Activate()

    Debug.Print "アクティブ時"
    Me!アクティブ時_テキスト = "〇"
    
End Sub

Private Sub Form_Current()

    Debug.Print "レコード移動時"
    Me!レコード移動時_テキスト = "〇"

End Sub

フォームにテキストボックスを作成し、そこに〇を入れるようにしています。

実行してみましょう。

結果はすべて〇が入りました。テキストボックスへの入力は一番実施順が早い開く時イベントでも可能なようです。

フォームのテキストボックスの値を参照できるタイミング

次は、フォームにあるテキストボックスの値を参照できるタイミングを検証してみます。

フォームにさらに2つのテキストボックスを追加しました。

上段は既定値で値を設定してあります。下段はレコードソースを設定し、テーブルの値を読み込みます。

これらの値をフォームを開くイベントで読み込んでみましょう。

さらにVBAのコードを書き換えて、各タイミングでDebug.Printでフォームの値を表示します。


Private Sub Form_Open(Cancel As Integer)

    Debug.Print "開く時"
    Me!開く時_テキスト = "〇"
    Debug.Print Me!既定値_テキスト
    Debug.Print Me!レコードソース_テキスト
    
End Sub

Private Sub Form_Load()

    Debug.Print "読み込み時"
    Me!読み込み時_テキスト = "〇"
    Debug.Print Me!既定値_テキスト
    Debug.Print Me!レコードソース_テキスト

End Sub

Private Sub Form_Resize()

    Debug.Print "サイズ変更時"
    Me!サイズ変更時_テキスト = "〇"
    Debug.Print Me!既定値_テキスト
    Debug.Print Me!レコードソース_テキスト

End Sub

Private Sub Form_Activate()

    Debug.Print "アクティブ時"
    Me!アクティブ時_テキスト = "〇"
    Debug.Print Me!既定値_テキスト
    Debug.Print Me!レコードソース_テキスト

End Sub

Private Sub Form_Current()

    Debug.Print "レコード移動時"
    Me!レコード移動時_テキスト = "〇"
    Debug.Print Me!既定値_テキスト
    Debug.Print Me!レコードソース_テキスト

End Sub

実行した結果のイミディエイトウィンドウがこちら。

開く時
3
2020/01/25
読み込み時
3
2020/01/25
サイズ変更時
3
2020/01/25
アクティブ時
3
2020/01/25
レコード移動時
3
2020/01/25
サイズ変更時
3
2020/01/25

こちらも一番早い開く時イベントで読み込めていますね。

ですので、フォームに対する値の読み書きはどのイベントでもできる、ということになります。

以上、フォーム起動時イベントの発生する順番をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。