ACCESS VBAを学習しています。
今回はVBAを使って、一覧画面(フォーム)からボタンクリックで詳細編集画面(フォーム)を開く方法について学びます。
この記事では、使い方と使用例を掲載しています。
使い方については、よく使う部分だけを抜粋してご紹介しています。
詳細は公式のドキュメントをご覧ください。
説明・パラメータ
詳細画面はDoCmd.OpenFormを使って開きます。
※関連:フォームを開く
書式
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Private Sub button_詳細_Click() #フォーム内の[列名]で指定した値が空白でなければ If Me![列名] <> "" Then #今選択されているレコード内の[列名]の値と #テーブル・クエリ内の[列名]の値が一致するレコードの[詳細画面のフォーム]を開く #間にある「,」は必ず3つ必要 DoCmd.OpenForm "[詳細画面のフォーム]", , , "[列名] = '" & Me![列名] & "'" #フォーム内の[列名]で指定した値が空白でなければ Else #[新規登録]フォームを開く DoCmd.OpenForm "[新規登録のフォーム]名" End If End Sub |
If節の中では、既に値が入力されている既存のデータに対して処理を行います。↓の図にある「詳細」ボタンを押すと、そのレコード中の「顧客番号」(例えば「8008888888」)の値が、元になっているテーブル・クエリ内の「顧客番号」の値(「8008888888」)と一致するデータの詳細画面を開きます。
↓の図はフォーム画面しかありませんが、もともと顧客情報を一元的に管理している「顧客情報一覧」というようなテーブル・クエリが別に存在しています。
Else以降は、↓では最下段の空白、つまり新規レコードの「詳細」ボタンを選択した場合を指します。この時は新規レコード追加として新規登録画面に映ります。
DoCmd.OpenForm()について:「,」が3つも必要な理由
書式の項目の中では、「DoCmd.OpenForm()」の行の中に3つも「,」がありましたが、これはフォームを開く際のパラメータを指定しています。パラメータを指定するには順番があり、今回は指定したデータを持つデータを探すためのパラメータ指定位置が後ろの方に遭ったことになります。
DoCmd.OpenForm(FormName, View,FilterName,WhereCondition,DataMode,WindowMode,OpenArgs)
書式に記載したコードは、↑の書き方に倣っています。FormNameはそのままフォーム名、指定した値を持つデータを探すためにWhereConditionの位置で指定しています。
使用例(コード)
前提
事前に3つ画面を用意しています。サンプルとしてこの記事を書きながら作成していっているので、まだまだ発展途上です。
こちらは新規顧客登録画面
こちらは個別詳細画面
こちらは一覧画面です。
一覧画面から詳細画面を開く
1 2 3 4 5 6 7 8 |
Private Sub button_詳細_Click() If Me!顧客番号 <> "" Then Debug.Print Me!顧客番号 DoCmd.OpenForm "F_04_個別詳細画面", , , "顧客番号 = '" & Me!顧客番号 & "'" Else DoCmd.OpenForm "F_新規顧客登録" End If End Sub |
ちなみに、「顧客番号」列の値は文字列型で設定しているので、「”顧客番号 = ‘” & Me!顧客番号 & “‘”」のように「Me!顧客番号」で指定した値も文字列となるようにしていますが、
「顧客番号」列の値を何らかの数値型で設定している場合は「”顧客番号 = ” & Me!顧客番号」というように書くことができます。データ型によって微妙に異なります。
※関連:テキストボックスの値を取得して、フォームでフィルタ・検索する
こちらの記事のVBAコード内でSQL構文を扱う部分についてもご覧ください。
以下の図の一番上のデータ「顧客番号」が「1001111111」の行(レコード)にある「詳細」ボタンをクリックすると、
↓のように「1001111111」の詳細画面に移動することができました。
行(レコード)ごとに「詳細」ボタンがありますが、きちんとその行(レコード)内のデータを取得してくれます。
また、以下の図の一番下の何もデータがない行(レコード)内の「詳細」をクリックすると、
↓のように新規顧客登録画面に移動します。
参考
公式ドキュメントです。
DoCmd.OpenForm メソッド (Access) | Microsoft Learn
ACCESSの記事を一覧にしています。ACCESS VBAの正式な情報は公式ドキュメントを読むべきですが、このサイトでは実際に使う場面を想定して紹介しているので、公式ドキュメントと併せて読んでいただくと理解が深まると思います。
コメント