ACCESS 一覧フォームから詳細フォームを開く方法(VBAコード公開)

一覧フォームから詳細フォームを開く方法

ACCESSでは複数のレコードをまとめて表示する一覧表形式のフォーム(表形式)と、一つのレコードの内容を詳細に表示するフォーム(単票形式)の2つがよく使われます。

一覧表の方が視認性がよいので、最初は表形式で自分の見たいレコードを探し、そこから細かい情報を単票形式で確認する、という処理が一般的です。

この際、表形式のフォームでレコードを指定し、そのレコードを単票形式のフォームで開く、という機能を作成します。
この機能はACCESSを開発する場合は、ほぼ毎回作成するといっても過言ではないほどよく使う機能です。

今回は、一覧フォームから詳細フォームを開く方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。

完成形

最初に、完成形から示しましょう。

下記は売上伝票を一覧で表示し、検索するためのフォームです。

このフォームで売上伝票を探し、詳しく見たい売上伝票を見つけたら、売上IDをダブルクリックします。

すると、詳細フォームが表示されます。

ACCESSでは一つのレコードに紐づく情報量が多く、また、リレーショナルデータベースの構造をとると必ずしも1つのレコードの情報を一行で表示できない場合もあります。
例えば、1枚の売上伝票に対して売上明細が複数紐づく場合などです。

こうしたときに、検索性や視認性が高い一覧表フォームと、情報の網羅性が高い詳細フォームを組み合わせて使用すればかなり便利に利用することができるのです。
また、実際のデータ入力は詳細フォームで行う方が入力支援や自動入力がしやすいでしょう。

機能作成方法

では、上記の機能の作成方法を説明します。
一覧フォーム、詳細フォームはそれぞれご準備ください。

イベントプロシージャの呼び出し

まず、一覧表フォーム側で売上IDのダブルクリック時イベントに対して、イベントプロシージャを設定します。

操作方法は、左側のデザインビューで売上IDを選択し、右側のプロパティシートのイベントタブからダブルクリック時イベントの行を選択し、一番右に出てくる「…」を押したあとに「コードビルダー」を選択すればOKです。

ここでは売上IDにイベントを設定していますが、詳細フォームを開くトリガーとなるアクションは、詳細フォームの主キーが特定できるものであれば構いません。
今回のデータベースでは詳細フォームは売上IDが主キーのため、売上IDに対してイベントを設定しています。

また、イベントもダブルクリック時ではなくクリック時でも構いません。
ただ、クリック時イベントにするとユーザーの意図しないクリックで詳細フォームが開いてしまう可能性があるため、ダブルクリック時イベントに設定した方が誤操作を防ぐことができるでしょう。

プログラム内容

上記で設定する実際のイベントプロシージャが下記になります。


Private Sub 売上ID_DblClick(Cancel As Integer)


If Me!売上ID >= 1 Then

    DoCmd.OpenForm "売上伝票入力", , , "売上ID = " & Me!売上ID

Else

    DoCmd.OpenForm "売上伝票入力", , , , acFormAdd

End If

End Sub
 

最初にIf文で分岐をさせています。

これは、ダブルクリックした行が売上IDがすでに入っている行か、それとも空白の行かを識別しています。
すでに売上IDが入っていればその売上IDのフォームを開けばよいわけですが、空白の場合は新規登録でフォームを開きたいのでその判別をしているのです。

そして、売上ID >= 1 つまり売上IDが入力されている行がダブルクリックされていた場合は、


 DoCmd.OpenForm "売上伝票入力", , , "売上ID = " & Me!売上ID
 

を実行します。

DoCmd.OpenFormで「売上伝票入力」フォームを開くのですが、4つ目の引数であるWhereConditionで売上IDを指定しています。

“売上ID = ” & Me!売上ID の中で、最初に記載された売上IDは、開くフォーム「売上伝票入力」 の売上IDを指しています。
そしてそれが、Me!売上ID、つまりイベントのトリガーとなった「売上検索」フォームでダブルクリックされた売上IDと同じである、という条件式なわけです。

Where条件の記載方法

この WhereCondition は基本的にテキスト型の引数ですので条件式を””で囲っています。

この””が途中までになっているのには理由があります。
売上ID = まではテキストとして扱ってほしいのですが、 Me!売上ID はそのままテキストではなく参照した値を数値として扱いたいので、””の外側に置いています。

“売上ID = Me!売上ID” としてしまうと、「Me!売上ID」という売上IDを探してしまうので、合致するものがなくエラーになってしまいます。
このあたり、条件式の指定でどこまでをテキスト型で扱うかは、慣れるとすぐにできますが初心者の方がつまづきやすいポイントでしょう。

最後に、売上検索画面で売上IDが空白の行をクリックした場合には、If文のElse側で


 DoCmd.OpenForm "売上伝票入力", , , , acFormAdd 
 

を実行し、フォームを新規作成で開くようにしています。
5つ目の引数にadFormAddを指定すると、新規レコードでフォームを開くことができます。

この機能は非常によく使われますので、覚えておいて損はないでしょう。

以上、一覧フォームから詳細フォームを開く方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。