Access VBAでフォームを開くには、DoCmd.OpenFormメソッドを使用します。
また、開いたフォームを閉じる場合は DoCmd.Closeメソッドを使用します。
- AccessフォームをVBAで開く方法(OpenFormメソッド)
- フォームを閉じる方法(Closeメソッド)
- ポップアップでフォームを開く方法
- Access起動時にフォームを自動で開く方法(AutoExecマクロ)
もくじ
フォームを開く基本コードは次のとおりです。
DoCmd.OpenForm "フォーム名"
フォームを閉じる場合は次のコードを使用します。
DoCmd.Close acForm, Me.Name
Accessの解説書を勉強して、テーブルやクエリの操作ができるようになると、 「もっと使いやすい画面にできないのかな?」と思うことがあります。
ナビゲーションウィンドウから毎回オブジェクトを探して開くのは、 実際の業務では少し不便です。
そこで使われるのが、フォームをボタンから開く「画面遷移」です。
Accessでは、こうした処理をマクロやVBAで作ることができます。
特にVBAを使うことで、業務システムのような動作を柔軟に作ることが可能になります。
フォームの開閉は、Access VBAを学ぶうえで最初に覚えておきたい基本操作です。
また、この記事では、サンプルデータベースをダウンロードできます。
購買用データベースからプログラムコードを全て削除しているので、実際にプログラムを書くときに活用してください。
さらに、「Accessのフォームとは何?」といった疑問に答えた記事も書いていますので、フォームについてもう少し知りたいという方は、よかったらこちらもご覧ください。
Access VBAでフォームを開く方法(OpenFormメソッド)
DoCmd.OpenFormメソッドは、指定したフォームを開くためのAccess VBAの基本的な命令です。
フォーム名を指定することで、ボタンなどの操作から別の画面を表示することができます。
Access VBAでフォームを開くには、DoCmd.OpenFormメソッドを使用します。
基本構文は次のとおりです。
DoCmd.OpenForm "フォーム名", acNormal
今回のサンプルでは、次のコードでフォーム「F01部品マスタM」を開きます。
DoCmd.OpenForm "F01部品マスタM", acNormal
このコードをボタンのクリックイベントに設定することで、ボタンを押したときにフォームを開くことができます。
1.メインフォームを開く
サンプルデータベースにはプログラムコードが入っていないので、開いてもフォームが開いていない状態です。

オブジェクトウィンドウから、フォーム「F00メイン」をクリックして開きます。

メイン画面が開きました。

2.デザインビューを開く
フォームの見出し部分を右クリックし、デザインビューを選択します。

フォームのデザインビューに切り替わります。
デザインビューでは、ボタンやテキストボックスなどのパーツを配置したり、VBAコードを設定したりすることができます。

3.ボタンのクリックイベントを設定する
ここでは「部品マスタ」ボタンにフォームを開くためのプログラムを追加します。
ボタンをクリックし、プロパティを表示させます。

プロパティが表示されていない時は、ボタンを右クリックすると、メニューが表示されます。
一番下にある「プロパティ」を選択します。

4.イベントプロシージャを作成する
「部品マスタ」ボタン、プロパティのイベントタブの順にクリックし、「クリック時」の「イベントプロシージャ」を選択します。

VBE(Visual Basic Editor)が起動します。

VBEを確認すると、「部品マスタ_Click」というイベントプロシージャが自動で作成されています。
Private Sub 部品マスタ_Click()
End Sub

このように、Accessフォームのデザインビューから、パーツと動作を選ぶことで、簡単にイベントプロシージャを作成できます。
5.OpenFormコードを記述する
以下のように、フォームを開くコードを記述します。
Private Sub 部品マスタ_Click()
DoCmd.OpenForm "F01部品マスタM", acNormal
End Sub

6.動作を確認する
上書き保存した後に、見出しを右クリックし、フォームビューに戻します。
動作確認のために「部品マスタ」ボタンをクリックしましょう。

すると、メイン画面は開いたままの状態で指定したフォームが開きます。

これで、メイン画面から一覧フォームを表示させるVBAコードの実装は完了です。
フォームを閉じる方法(Closeメソッド)
Access VBAでフォームを閉じるには、DoCmd.Close メソッドを使用します。
基本構文は次のとおりです。
DoCmd.Close acForm, Me.Name
このコードを実行すると、現在開いているフォームを閉じることができます。
今回は、部品マスタ用のフォームに「戻る」ボタンを設置し、メイン画面に戻る処理を作成します。
1.デザインビューを開く
部品マスタの見出しを右クリックし、デザインビューをクリックします。

2.戻るボタンのクリックイベントを設定する
右上の戻るボタンを右クリックし、VBEを起動させます。

3.Closeメソッドを記述する
右上のアイコン付きの「戻る」ボタンに、フォーム「F00メイン」に戻るためのコードを追加します。
Private Sub 戻る_Click()
DoCmd.Close acForm, Me.Name
End Sub

4.動作を確認する
フォームビューに戻り、「戻る」ボタンをクリックします。
すると、部品マスタフォームが閉じて、メイン画面に戻ることが確認できます。
Me.Nameの意味
ここでVBAの文法について補足します。
フォームを開く時は、対象のフォーム名を開く必要がありますが、閉じる時はMeを記入します。
Meは、コードを記録しているフォーム自身になります。
Meを記載することで、フォーム名などオブジェクト名の指定を省略することができます。
VBAやVB.NET独自の文法になりますが、とても便利です。
ポップアップでフォームを開く方法
フォーム「F01部品マスタM」部品マスタをデザインモードで開きましょう。
「項目編集」ボタンを選択してコードを挿入します。
以下のようにコードを入力します。
Private Sub 項目編集_Click()
DoCmd.OpenForm "F01部品マスタT", acNormal
End Sub

上書き保存して、フォームビューに戻します。
「項目編集」ボタンをクリックすると、フォーム「F01部品マスタT」が開きます。

「F01部品マスタT」を閉じて、コードを以下のように修正します。
Private Sub 項目編集_Click()
DoCmd.OpenForm "F01部品マスタT", acNormal, , , , acDialog
End Sub

もう一度フォームを開くと、ポップアップで表示されていることを確認できました。

リストの項目を単票フォームで編集する時は、ポップアップにした方が操作しやすくなります。
ポップアップ形式で開いたフォームは最小化すれば、元のリストを確認することができます。
また、フォームプロパティで、表示形式でポップアップにすれば、同じ動作を設定することができます。

どちらにするかは好みで決めて大丈夫ですが、複数人数で保守する場合はコードで記載した方がメンテナンスしやすいです。
起動時に自動でフォームを開く方法
VBEを開き、メイン画面を開くためのプログラムをコーディングします。
まずは標準モジュールを作成します。
VBEのオブジェクトウインドウ(左側)のどこでもよいので、右クリックします。
「挿入」→「標準モジュール」の順に選択します。

「Module1」が作成されます。

以下のようにコードを入力します。
Function メイン開く()
DoCmd.OpenForm "F00メイン", acNormal
End Function
ここでは、SubプロシージャではなくFuntionプロシージャを書きます。
Subプロシージャでは、Access起動時に動作しません。

次に、起動用のマクロを作成します。
マクロの新規作成をクリックします。

マクロの動作を選べるようになっていますが、ここではプロシージャの実行を選択します。

プロシージャを指定する必要がありますので、「メイン開く()」と指定します。

マクロ名を「AutoExec」として保存します。
ここで、別のマクロ名にしても正しくプログラムが作動しません。
AutoExec以外の名前にすることはできません。

一旦データベースを閉じて開き直すと、メイン画面が初めに自動で開きます。

マクロに指定するプロシージャは、Subだと作動しません。Functionにする必要があります。
Runtime版のAccessでシステムを運用させる場合は、AutoExecの作成が必要になります。
Runtime版はオブジェクトウインドウが表示されないので、AutoExecを作成していないと何も表示されなくなります。
DoCmd.OpenFormでよくあるエラー
DoCmd.OpenFormメソッドを使ってフォームを開く処理を作成すると、うまくフォームが開かない場合があります。
ここでは、Access VBAでフォームを開くときに よく発生するエラーと対処方法を紹介します。
フォーム名が間違っている
DoCmd.OpenFormでは、開きたいフォーム名を文字列で指定します。
例えば次のコードでは、フォーム「F01部品マスタM」を開きます。
DoCmd.OpenForm "F01部品マスタM"
このとき、フォーム名のスペルが間違っていると、次のようなエラーが表示されます。
Microsoft Access はフォーム '○○○' を見つけることができません。
このエラーが出た場合は、ナビゲーションウィンドウでフォーム名が正しく指定されているかを確認しましょう。
フォームがすでに開いている
すでに同じフォームが開いている状態で、再度OpenFormを実行すると、意図しない動作になることがあります。
このような場合は、次のように フォームが開いているかを確認してから処理する方法があります。
If CurrentProject.AllForms("F01部品マスタM").IsLoaded Then
DoCmd.Close acForm, "F01部品マスタM"
End If
DoCmd.OpenForm "F01部品マスタM"
このコードでは、フォームが開いている場合は一度閉じてから再度フォームを開くようにしています。
フォームが削除されている
開こうとしているフォームが削除されている場合も、OpenFormは正常に動作しません。
Accessでシステムを作成していると、フォーム名を変更したり、不要になったフォームを削除したりすることがあります。
その場合は、VBAコード側のフォーム名も最新のフォーム名に合わせて修正する必要があります。
VBAコードが実行されていない
ボタンをクリックしてもフォームが開かない場合、イベントプロシージャが設定されていない可能性があります。
ボタンのプロパティを確認し、イベントタブの 「クリック時」 が
イベントプロシージャ
になっているか確認しましょう。
エラーが出たときの確認ポイント
OpenFormがうまく動作しない場合は、次のポイントを確認すると原因を特定しやすくなります。
- フォーム名が正しいか
- フォームが削除されていないか
- クリックイベントが設定されているか
- VBAコードが正しく保存されているか
これらを確認することで、ほとんどの場合は問題を解決できます。
補足
OpenFormメソッドは、Access VBAの中でも 最も基本的で使用頻度の高い処理の一つです。
エラーの原因を理解しておくことで、画面遷移の処理をスムーズに作成できるようになります。
まとめ
Accessのフォームを遷移させるプログラムは、簡単なコードで作ることが出来ます。
データの集計プログラムや入力関連のプログラムなど、他にもマスターしておかないといけないものはありますが、まずは画面遷移をマスターしましょう。
画面遷移の動作を体感できると、システムを動かしている実感が沸き、次のAccessプログラミング学習へのモチベーションが高まります。
システムを自作できるようになる効果はとても大きいです。
無駄な入力や集計作業をなくし、大きな業務改善を達成することができます。
社内での業務改善に大きく貢献できれば、社内でのあなたの評価も高まります。
最後に、Access VBAをしっかりと学習したい方に、オススメ本について紹介した記事を書いています。
興味のある方は、こちらも併せてご覧ください。
本日もありがとうございました。

