ACCESS VBAでフォームを開く方法
ACCESS VBAで最もよく使う機能の一つが、フォームを開く機能です。
ACCESSにはDoCmd.OpenFormという命令文が用意されていますので、こちらを使ってフォームを開く機能を作成します。
その際、単純にフォームを開くだけでなく、特定のレコードを指定して開くことも可能です。
今回は、ACCESS VBAでフォームを開く方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
目次
DoCmd.OpenFormメソッド
ACCESS VBAでフォームを開く際は、DoCmd.OpenFormメソッドを利用します。
構文は以下の通りです。
DoCmd.OpenForm ( フォーム名 , ビュー , フィルター名 , 抽出条件 , データモード , ウィンドウモード , OpenArgs )
引数が複数ありますが省略可能ですので、最も基本的な使い方でいうとフォーム名だけを指定してフォームを開くことができます。
その他の引数でよく利用するものについて、簡単に解説します。
ビュー
ビューとは、フォームを開く時のフォームのビューの設定です。
通常のフォームビュー以外にデザインビュー(acDesign)やデータシートビュー(acFormDS)、印刷プレビュー(acPreview)で開くことが可能です。
が、フォームはフォームビューで開くことが多い(印刷用には別途レポートを作成する)ため、既定値のacNormalもしくは省略で問題ないでしょう。
抽出条件
この引数はよく利用します。
フォームを開く際に特定のレコードを指定して開くために利用する引数です。
具体的な利用方法は後述のサンプルでご紹介します。
データモード
フォームを開く際に既存のレコードの編集も可能な状態で開くか、データ追加用で開くかを設定できます。
既存のレコードも編集可能な状態で開く場合は引数を省略し、データ追加用で開く場合はacFormAddを選択します。
ウィンドウモード
フォームを開く際のフォームの表示方法を設定できます。
ダイアログ表示(最前面にポップアップする)や非表示を選択できます。
既定値のacWindowNormalでは、フォームのプロパティで設定したモードで開きます。
ダイアログ表示をさせたい場合はacDialog、非表示で開きたい場合はacHiddenを選択します。
VBAでフォームを開く方法
まずは、VBAでフォームを開く方法についてです。
サンプルとして以下のメニュー画面を用意しました。
ボタンが複数並んでいます。
まずは売上検索ボタンを押すと、売上検索フォームが開くように設定してみましょう。
フォームをデザインビューで開きます。
売上検索ボタンのプロパティシートで、クリック時イベントを設定します。
クリック時の行の一番右にある「・・・」ボタンを押してみましょう。
ビルダーの選択が表示されます。
ここではコードビルダーを選択しましょう。
すると、Visual Vasic Editor(VBE)が起動します。
Private Sub 売上検索ボタン_Click()
と表示されていると思いますので、その下にフォームを開く命令文を記載していきます。
DoCmd.OpenForm "売上検索"
これだけです。
DoCmd.OpenFormとは、その次に指定したフォームを開くコマンドです。
これで、メインメニューの売上検索ボタンを押すと、売上検索フォームが開くようになりました。
新規追加の状態でフォームを開く
先ほどは単純にフォームを開いただけでした。
次は、新規追加の状態でフォームを開いてみましょう。
今度は、売上伝票入力ボタンにクリック時イベントを登録します。
このボタンに設定するプロシージャは以下の通りです。
Private Sub 売上伝票入力ボタン_Click()
DoCmd.OpenForm "売上伝票入力", , , , acFormAdd
End Sub
先ほどと同じくDoCmd.OpenFormを使用して「売上伝票入力」フォームを指定しています。
異なるのは、最後の引数にacFormAddを指定していることです。
この指定を行うことで、フォームを新規レコード追加状態で開くことが可能です。
実際に、ボタンを押下するとフォームがこの状態で開きます。
主キーである売上IDが「新規」となっていて、新規レコードであることが分かりますね。
acFormAddは、このように入力用フォームを新規追加で開く際に利用します。
特定のレコードを指定してフォームを開く
最後に、特定のレコードを指定してフォームを開く方法をご紹介します。
下記のフォームをご覧ください。
レコードが一覧表示された検索フォームです。
このフォームから、特定のレコードを選択して詳細情報を表示させる機能を作ります。
フォームをデザインビューで開いてみましょう。
今回は主キーである売上IDにダブルクリック時イベントを設定します。
必ずしもダブルクリック時イベントである必要ななく、別途詳細表示ボタンなどを設置しても良いでしょう。
設定するプロシージャは以下の通りです。
Private Sub 売上ID_DblClick(Cancel As Integer)
DoCmd.OpenForm "売上伝票入力", , , "売上ID = " & Me!売上ID
End Sub
こちらもDoCmd.OpenFormメソッドですが、最後の引数にWhere条件を設定しています。
"売上ID = " & Me!売上ID
ですね。
ここでは、開くフォームの売上IDは、Me(操作した売上検索フォーム)の売上IDと同じもの、という指定をしています。
“売上ID = ” と”で囲っているのは、抽出条件をテキストデータとして扱うためで、最後のMe!売上IDだけは変数のために”の外に置いてあります。
このあたり、抽出条件の書き方は最初は慣れないと思いますが、他の方が書いたコードをコピーして少しずつ直して使うことで、徐々に自分でも理解できるようになると思いますので試してみてください。
このコードを書けば、ダブルクリックした売上IDのレコードを指定して売上伝票入力フォームを開くことができます。
例えば売上ID:13をダブルクリックすれば、
売上ID:13のフォームが開きます。
この機能は非常によく使うのでマスターすると便利でしょう。
以上、VBAでフォームを開く方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。