Accessでフォームを複数作成した場合に、画面遷移をスムーズに行えるようにすることが、業務効率を向上させるための方策です。この時、メインフォームにサブフォームを埋め込んでいると、参照先を間違えた際に、思わぬ挙動をすることになります。
そこで、今回は画面遷移をスマートに行えるように、切り替え用のコマンドボタンをフォーム上に設置することとし、VBAを用いた機能の追加方法をを紹介していきます。
VBAと聞くと、難しいと感じられる方がいるかもしれませんが、サンプルのとおりに作成していくことで簡単に機能を追加することができますので、最後までご覧いただければと思います。
画面遷移で用いるVBAのコード
フォームの遷移を行うに当たっては「DoCmd」オブジェクトを用います。「DoCmd」オブジェクトのメソッドを使用すると、Accessの様々なアクションを実装できます。 アクションによって、ウィンドウを閉じる、フォームを開く、コントロールの値を設定する、などのタスクを実行することができます。
そこで、今回作成するサンプルでは画面遷移先のフォームを開くとともに、画面遷移元のフォームは閉じることとします。これにより、画面が切り替わったような視覚効果を与えることができます。
■画面を開くコードDoCmd.OpenForm (FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)
ここで、DoCmd.OpenFormの各引数を表1にまとめていますのでご確認ください。
表1 DoCmd.OpenFormの引数
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
FormName | 必須 | バリアント型 | カレント データベースのフォームの有効な名前を文字列式で指定します。 OpenForm メソッドを含む Visual Basic コードをライブラリ データベースで実行すると、この名前のフォームが、最初にライブラリ データベースで、次にカレント データベースで検索されます。 |
View | 省略可能 | AcFormView | フォームを開くビューを指定する AcFormView 定数。 既定値は acNormal です。 |
FilterName | 省略可能 | バリアント型 (Variant) | カレント データベースのクエリの有効な名前を文字列式で指定します。 |
WhereCondition | 省略可能 | バリアント型 (Variant) | 有効な SQL WHERE 句を文字列式で指定します。ただし、WHERE という語を指定する必要はありません。 |
DataMode | Optional | AcFormOpenDataMode | フォームのデータ入力モードを指定する AcFormOpenDataMode 定数。 この設定は、フォーム ビューまたはデータシート ビューで開いたフォームにのみ適用されます。 既定値は acFormPropertySettings です。 |
WindowMode | 省略可能 | AcWindowMode | フォームを開くウィンドウ モードを指定する AcWindowMode 定数。 既定値は acWindowNormal です。 |
OpenArgs | 省略可能 | バリアント型 | 文字列式。 この式は、フォームの OpenArgs プロパティを設定するために使用されます。 この設定は、Open イベント プロシージャなどのフォーム モジュールのコードで使用可能です。 OpenArgs プロパティは、マクロや式でも参照できます。
たとえば、帳票フォームのクライアント一覧を開くとします。 フォームが開くときに特定のクライアントのレコードにフォーカスを移動するには、そのクライアントの名前を OpenArgs 引数で指定し、FindRecord メソッドを使って、指定した名前のクライアントのレコードにフォーカスを移動できます。 |
続いて、画面を閉じるコードを確認しましょう。
■画面を開くコード
DoCmd.Close (ObjectType, ObjectName, Save)
DoCmd.Closeの引数については表2にまとめています。
表2 DoCmd.Closeの引数
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
ObjectType | 省略可能 | AcObjectType | 閉じるオブジェクトの種類を表す AcObjectType 定数。 |
ObjectName | 省略可能 | Variant | 引数 ObjectType で指定した種類のオブジェクトの有効な名前を文字列式で指定します。 |
Save | Optional | AcCloseSave | オブジェクトに加えた変更を保存するかどうかを指定する AcCloseSave 定数。 既定値は acSavePrompt です。 |
さらに、「AcObjectType」で指定する値を表3に示します。今回のサンプルではフォームを取り扱いますので、「acForm」を用います。
表3 AcObjectTypeの値
名前 | 値 | 説明 |
---|---|---|
acDatabaseProperties | 11 | Database プロパティ |
acDefault | -1 | |
acDiagram | 8 | データベース ダイアグラム (Access プロジェクト) |
acForm | 2 | フォーム |
acFunction | 10 | 関数 |
acMacro | 4 | マクロ |
acModule | 5 | モジュール |
acQuery | 1 | クエリ |
acReport | 3 | レポート |
acServerView | 7 | サーバー ビュー |
acStoredProcedure | 9 | ストアド プロシージャ (Access プロジェクト) |
acTable | 0 | テーブル |
acTableDataMacro | 12 | データ マクロ |
以上が、DoCmdオブジェクトを用いた画面遷移に必要なコードです。次からは、実際のフォームを作成しながら、実装方法を確認していきます。
メインフォームとサブフォームの作成
データベースのメイン画面となるフォームとして「F_メイン」フォームを作成していきます。
図1に示すように、フォームヘッダーを追加し、ヘッダー部分にラベルを追加しています。また、メインフォーム側ではレコード移動が発生しない設計としますので、フォームプロパティのうち、レコードセレクタ、移動ボタンのプロパティは「いいえ」とします。
ここでいったん、サブフォームとして「F_サブ」フォームを作成します。図2に示すようにフォームヘッダー側に帳票のタイトルをラベルで追加し、詳細セクションにテキストボックスを配置します。
また、詳細セクションの表示方法を帳票形式とするため、「既定のビュー」プロパティで「帳票フォーム」を選択します。
これで、サブフォームの準備ができましたので、メインフォームにサブフォームを埋め込んでいきます。
改めて「F_メイン」フォームを開いたのち、フォームデザインツールで「サブフォーム/サブレポート」アイコンをクリックします。アイコンの位置は図3をご参照ください。
マウスカーソルが切り替わりますので、図4に示すように「F_メイン」フォームの詳細セクションに「F_サブ」フォームを埋め込む場所を決めます。
そして埋め込んだオブジェクトの名前を「F_サブ」とし、ソースオブジェクトプロパティを「F_サブ」とします。これにより、埋め込んだオブジェクトが「F_サブ」フォームを参照するようになります。
以上で、サブフォームを持つフォームを作成することができました。今回のサンプルでは別のフォームからメインフォームへ画面遷移する機能を設けていきます。
トップ画面用のフォーム作成
画面遷移前のフォームとして、「F_トップ」フォームを作成します。このフォームはAccessを起動した際に画面に表示される設定とします。
図5に示すようにラベル、コマンドボタンを配置します。ここで、コマンドボタンの名前は「cmd_F_メインへ」とします。本フォームでは、レコード移動が発生しませんので、フォームプロパティのうち、レコードセレクタ、移動ボタンのプロパティは「いいえ」と、スクロールバーは「なし」とします。
次に、「cmd_F_メインへ」コマンドボタンに対し、画面遷移するためのイベントプロシージャを追加します。図6に示すようにプロパティを開き「クリック時」のプロパティにイベントプロシージャを設定した後、右側の「…」ボタンをクリックしVBA画面を開きます。
ここでVBA画面が開きますので、以下のコードを追加してください。
Private Sub cmd_F_メインへ_Click() DoCmd.OpenForm "F_メイン", acNormal DoCmd.Close acForm, "F_トップ" End Sub
これらのコードは上述のとおり、DoCmdオブジェクト用いてフォームを開く処理と、元々開いていたフォームを閉じる処理となります。この際に、「F_メイン」の代わりに「F_サブ」と記載すると、サブフォームだけが開くことになりますので、注意してください。
続いて、Accessを起動した際に「F_トップ」フォームが自動で表示するための設定をします。ファイルタブをクリックし、画面左下にある「オプション」をクリックすることで図8に示す画面が表示されます。
ここで、「フォームの表示」に「F_トップ」を選択します。設定後、Accessファイルを再起動することで設定が完了します。
これで、一通りの設定が完了しましたので、動作確認をしていきましょう。
画面遷移機能の動作確認
Accessファイルを開くと、図9のように「F_トップ」画面が開きます。
続いて、「cmd_メインフォームへ」コマンドボタンをクリックすると、画面遷移し図10のように「F_メイン」フォームが開きます。この際に、「F_トップ」フォームが閉じていることも確認できます。
このようにして、VBAでたった2行コードを追加するだけで、簡単に画面遷移を設定することができました。
まとめ
今回は、Accessフォームの画面遷移するための機能設定方法を紹介しました。処理内容は非常にシンプルですが、Accessを多数のユーザーが用い、画面遷移が必要な場合には便利な機能です。これにより業務効率を改善することも期待できますので、本記事を参考に機能実装をしていただければと思います。
VBAは一度コードを覚えると、将来様々な場面で使用することができますので、専門書をお手元に一冊用意されることをお勧めします。
スポンサーリンク
コメント