ExcelとAccessの学習サイトです

AccessのVBAでフォームを開く方法について

「Accessの解説書を勉強して、テーブル・クエリなど一通りの操作を行えるようになったけど、もっと使いやすくならないのかな?数あるオブジェクトの中から操作したいものを探して開くのも大変だよね。」

多くのAccessの解説書には、オブジェクト(テーブル・クエリ・フォーム・レポート)の作り方については掲載されています。
しかし、業務システム的な動作を行うための方法を解説している書籍は少ないようです。

Accessをシステム的な動作を行うためには、マクロかVBAを使う必要があります。

  • マクロはプログラムコードを書かない
  • VBAはプログラムコードをエディタに書く

Accessのマクロは、Excelのマクロとは多少意味合いがちがいますので、要注意です。
Accessのマクロでもある程度自動化を行うことは出来ますが、細かいカスタマイズを行うためには、VBAを活用しなければまりません
今回は、VBAの習得の中でも、一番初めに身に付けてほしい内容を記事に書きました

AccessのVBAでまずマスターするべき事は、フォームを開けるようになる事です。

コードが短く、動きが一番分かりやすいです。

この記事を読むことで、次のようなメリットがあります。

  • Accessフォームの開き方と閉じ方がわかる
  • VBAを使う事の便利さを感じる事ができる

この記事では、サンプルデータベースをダウンロードできます。

購買用データベースからプログラムコードを全て削除しています。

購買管理DB_コードなし

一般に、フォームなどの入力画面を切り替えることを「画面遷移」と言います。

システム作成を行う時に必ず使われる用語ですので、是非覚えておきましょう。


また、「Accessのフォームとは何?」といった疑問に答えた記事も書いていますので、フォームについてもう少し知りたいという方は、よかったらこちらもご覧ください。

https://sys-daddy.com/access-form-beginner/

フォームを開く方法と閉じる方法

データベースを開くと、フォームが開いていない状態です。

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

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

見出しを右クリックしてデザインビューを選択します。

フォームのデザインビューに切りかわりました。

デザインビューでは、ボタンやテキストボックスなどのパーツを配置することができます。

ここでは、「部品マスタ」ボタンにフォームを開くためのプログラムを追加します。

「部品マスタ」ボタンをクリックし、プロパティを表示させます。

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

プロパティのイベントタブを選択します。
「クリック時」の「イベントプロシージャ」を選択します。

VBEが起動します。

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

このように、Accessフォームのデザインビューから、パーツと動作を選ぶことで、簡単にイベントプロシージャを作ることができます。

「Private Sub 部品マスタ_Click()」と「End Sub」の間に以下のようにコードを記述します。

DoCmd.OpenForm "F01部品マスタM", acNormal
DoCmd.Close acForm, Me.Name

写真では分かり易いようにコメントを入れていますが、コメントを外しても正しく作動します。

ここでVBAの文法について補足します。
フォームを開く時は、対象のフォーム名を開く必要がありますが、閉じる時はMeを記入します。
Meは、コードを記録しているフォーム自身になります。
Meを記載することで、フォーム名などオブジェクト名の指定を省略することができます。
VBAやVB.NET独自の文法になりますが、とても便利なので私もMeをよく使っています。

上書き保存した後に、見出しを右クリックし、フォームビューに戻します。
ボタンをクリックすると、指定したフォームが開いて、メイン画面が閉じます。

今度は、部品マスタ用のフォームに、画面遷移プログラムをコーディングします。
部品マスタの見出しを右クリックし、デザインビューをクリックします。

右上のボタンを右クリックし、VBEを起動させます。

次は、右上のアイコン付きの「戻る」ボタンに、フォーム「F00メイン」に戻るためのコードを追加します。

DoCmd.OpenForm "F00メイン", acNormal
DoCmd.Close acForm, Me.Name

試しにボタンをクリックすると、メイン画面に戻ることが確認できます。

ポップアップでフォームを開く方法

フォーム「F01部品マスタM」部品マスタをデザインモードで開きましょう。

「項目編集」ボタンを選択してコードを挿入します。
以下のようにコードを入力します。

DoCmd.OpenForm "F01部品マスタT", acNormal

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

「F01部品マスタT」を閉じて、コードを以下のように修正します。

DoCmd.OpenForm "F01部品マスタT", acNormal, , , , acDialog

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

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

また、フォームプロパティで、表示形式でポップアップにすれば、同じ動作を設定することができます。

どちらにするかは好みで決めて大丈夫ですが、複数人数で保守する場合はコードで記載した方がメンテナンスしやすいです。

起動時に自動でフォームを開く方法

VBEを開き、メイン画面を開くためのプログラムをコーディングします。

まず標準プロシージャを作成します。
VBEのオブジェクトウインドウ(左側)のどこでもよいので、右クリックします。
「挿入」→「標準モジュール」の順に選択します。

「Module1」が作成されます。

以下のようにコードを入力します。

Function メイン開く()
    DoCmd.OpenForm "F00メイン", acNormal
End Function

ここでは、SubプロシージャではなくFuntionプロシージャを書きます。
Subプロシージャでは、Access起動時に動作しません。

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

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

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

マクロ名を「AutoExec」として保存します。

ここで、別のマクロ名にしても正しくプログラムが作動しません。

AutoExec以外の名前にすることはできません。

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

マクロに指定するプロシージャは、subだと作動しません。Functionにする必要があります。

Runtime版のAccessでシステムを運用させる場合は、AutoExecの作成が必要になります。
Runtime版はオブジェクトウインドウが表示されないので、AutoExecを作成していないと何も表示されなくなります。

実践で使うフォームの開き方

Accessで画面遷移する場合は、メイン画面は常に残しておいたほうが便利です。
メイン画面を残しておけば、複数の画面を同時に確認する事が出来ます。

遷移する時にメイン画面を閉じてしまうと、タブでメイン画面を選ぶことができません。

Accessデータベースを使用すると、違う画面を同時に確認したい場面に出くわします。
メイン画面が残っていれば、メイン画面のタブをクリックすることで別の画面を開く事が出来ます。
ただし、データの整合性などから開けるフォームを一つにしたい時は、メイン画面を閉じる設計にしてもよいです。

システムを使っている場面をイメージして、ふさわしい方法を選択しましょう。

まとめ

Accessのフォームを遷移させるプログラムは、簡単なコードで作ることが出来ます。

データの集計プログラムや入力関連のプログラムなど、他にもマスターしておかないといけないものはありますが、まずは画面遷移をマスターしましょう。
画面遷移の動作を体感できると、システムを動かしている実感が沸き、次のAccessプログラミング学習へのモチベーションが高まります。

システムを自作できるようになる効果はとても大きいです。
無駄な入力や集計作業をなくし、大きな業務改善を達成することができます。
社内での業務改善に大きく貢献できれば、社内でのあなたの評価も高まります。


最後に、Access VBAをしっかりと学習したい方に、オススメ本について紹介した記事を書いています。
興味のある方は、こちらも併せてご覧ください。

https://sys-daddy.com/recommend-book-for-access-vba-begginer/

本日もありがとうございました。

  • B!