ACCESS フォームで登録ボタンを押した時にレコードを追加する機能(VBAコード公開)

ACCESSのフォームに入力された内容は、基本的にはリアルタイムにテーブルに反映されます。
しかし、時にはリアルタイム反映ではなく登録ボタンを押した時にテーブルに反映したい場合があります。

今回は、ACCESSのVBAを使って、フォームで登録ボタンを押した時にレコードを追加する機能をご紹介します。


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

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

目次

完成形

最初に完成形のフォームを示します。

商品情報を登録するフォームです。
フォームに情報を入力して登録ボタンを押すと、登録確認のメッセージが表示されます。

ここで「はい」を押すと、指定のテーブルのデータを書き込みます。

ただし、登録ボタンを押さないとデータはテーブルに反映されません。
ここが普通に作成するフォームとの違いです。

処理概要

具体的な作成方法に入る前に、処理の概要を説明します。

今回は入力用フォームから登録ボタンを押した際にレコードを初めてテーブルに書き込みます。
そのため、フォームはテーブルと連結させず、レコードソースは未設定で非連結の状態にします。

その上でフォームに値を入力し、登録ボタンを押した際にVBAでテーブルへレコードを書き込む処理を実行します。
この際、ACCESSでテーブルの更新を行うために、ADOを利用します。

では、詳しく見ていきましょう。

テーブルの準備

最初にデータを格納するテーブルを準備します。
今回は、商品情報を登録するテーブルを下記の通り準備しました。

デザインビューで表示すると下記になります。

主キーである商品IDはオートナンバー型で自動取得しており、商品名、仕入先はテキスト型、単価は通貨型、登録日は日付・時刻型です。

フォームの準備

次に、データを入力するフォームを準備します。
フォームは以下のように単票形式で作成します。

デザインビューで見ると以下の形になります。

すべてのテキストボックスが非連結で作成されていることに注意してください。
既に作成済みのテキストボックスを非連結にする際は、プロパティシートのデータタブでコントロールソースを空白にします。

この状態ですとフォームに入力した値は直接テーブルには保存されません。

そこで下段に作成した登録ボタンにVBAでプロシージャを作成し、フォームに入力された値をテーブルに書き込むようにしていきます。
登録ボタンのプロパティシートのイベントタブでクリック時イベントにイベントプロシージャを設定しましょう。

イベントプロシージャの内容はこの後説明します。

VBAプログラミング

登録ボタンに設定する、テーブルにレコードを追加するイベントプロシージャの内容は以下の通りです。
今回の記事は新規登録がメインですが、レコードの更新もできるように作成しています。

ACCESS VBAでテーブルに対してレコードの追加・更新・削除などの処理を行うには、ADOを利用する必要があります。
今回もADOを使った処理になっています。

ADOについて詳しくは以下の記事に書いてありますのでご参照ください。

ADOを使ったレコード操作

内容を解説します。

変数の宣言、ADOの準備

最初の変数の宣言、変数にADOオブジェクトを代入するところまでは、ADOを利用するための決まった手続きです。

今回はrst1というレコードセットオブジェクトを作成しています。
次に作成したレコードセットに書き込む対象テーブルである「test_登録」を代入します。

確認メッセージの表示

処理を始める前に、ユーザーにメッセージを表示します。

このメッセージでは、「はい」「いいえ」を表示させており、ユーザーがどちらのボタンを押したかに応じて、If文を使って後続の処理を分岐させています。

右辺はMsgBox関数を使って確認メッセージを出しています。
If文の条件に、MsgBox関数の戻り値(つまりユーザーが押したボタン)がvbYes(つまり「はい」)だった場合、という条件を設定しています。

このMsgBoxによる条件分岐はよく利用しますので覚えておくとよいでしょう。

レコード追加、更新の判断

そして、今回実施する処理がレコードの追加なのか、更新なのかを判断します。
判断のために、If文を使って以下の2段階で判定を行っています。

1.商品IDが指定されているか否か

最初にフォーム上で商品IDが入力されているか否かを判定します。
商品IDが入力されていなければ自動的にレコード追加となります。

2.指定された商品IDが存在するか否か

次に、商品IDが指定されている場合に、指定された商品IDが存在するか否かを判定します。
ここでは、レコードセットのフィルタープロパティを使用して指定した商品IDのみのレコードを抽出し、RecordCountプロパティでその結果件数を調べて判別しています。

商品IDが存在すれば更新、存在しなければ新規という判定をしています。

レコード追加処理

最終的に、以下の記述でレコード追加処理を実行します。

AddNewから始め、最後にUpdateで完了します。
Updateを忘れやすいので気をつけましょう。

左辺のrst1!〇〇は「test_登録」テーブルのフィールドを指しています。
そこに対して、右辺のMe!〇〇でフォームに入力された値を代入する、という処理を繰り返します。
主キーである商品IDはオートナンバー型で自動採番されるので、ここでは追加処理から除外しています。

このような処理を行うことで、登録ボタンを押したときにテーブルにレコードを追加可能です。

以上、フォームで登録ボタンを押した時にレコードを追加する機能をご紹介しました。

この記事の内容を実際に試したい方へ

本記事の内容を実際にACCESSを動かしながら確認したいという方向けに、記事で紹介した機能が実装されたサンプルファイルを販売しています。記事内で解説しているテーブル、クエリ、フォーム、レポート、VBAのプロシージャなどをそのまま動く形で実装しました。

学習用としてはもちろん、加工して自社業務に利用することも可能です。
ご興味のある方は以下からご覧ください。

フォームで登録ボタンを押した時にレコードを追加する機能

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

そんな時は、ACCESS開発歴20年以上、過去に300以上のACCESSデータベースの開発・修正実績のあるはこにわガジェット(@hakoniwagadget)にお任せください。

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

フッターバナー

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

フォームで登録ボタンを押した時にレコード追加する機能

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次