ACCESS フォームで登録ボタンを押した時にレコードを追加する機能(VBAコード公開)
ACCESSのフォームに入力された内容は、基本的にはリアルタイムにテーブルに反映されます。
しかし、時にはリアルタイム反映ではなく登録ボタンを押した時にテーブルに反映したい場合があります。
今回は、ACCESSのVBAを使って、フォームで登録ボタンを押した時にレコードを追加する機能をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。
完成形
最初に完成形のフォームを示します。
商品情報を登録するフォームです。
フォームに情報を入力して登録ボタンを押すと、登録確認のメッセージが表示されます。
ここではいを押すと、指定のテーブルのデータを書き込みます。
ただし、登録ボタンを押さないとデータはテーブルに反映されません。
ここが普通に作成するフォームとの違いです。
処理概要
具体的な作成方法に入る前に、処理の概要を説明します。
今回は入力用フォームから登録ボタンを押した際にレコードを初めてテーブルに書き込みます。
そのため、フォームはテーブルと連結させず、レコードソースは未設定で非連結の状態にします。
その上でフォームに値を入力し、登録ボタンを押した際にVBAでテーブルへレコードを書き込む処理を実行します。
この際、ACCESSでテーブルの更新を行うために、ADOを利用します。
では、詳しく見ていきましょう。
テーブルの準備
最初にデータを格納するテーブルを準備します。
今回は、商品情報を登録するテーブルを下記の通り準備しました。
デザインビューで表示すると下記になります。
主キーである商品IDはオートナンバー型で自動取得しており、商品名、仕入先はテキスト型、単価は通貨型、登録日は日付・時刻型です。
フォームの準備
次に、データを入力するフォームを準備します。
フォームは以下のように単票形式で作成します。
デザインビューで見ると以下の形になります。
すべてのテキストボックスが非連結で作成されていることに注意してください。
既に作成済みのテキストボックスを非連結にする際は、プロパティシートのデータタブでコントロールソースを空白にします。
この状態ですとフォームに入力した値は直接テーブルには保存されません。
そこで下段に作成した登録ボタンにVBAでプロシージャを作成し、フォームに入力された値をテーブルに書き込むようにしていきます。
登録ボタンのプロパティシートのイベントタブでクリック時イベントにイベントプロシージャを設定しましょう。
イベントプロシージャの内容はこの後説明します。
VBAプログラミング
登録ボタンに設定する、テーブルにレコードを追加するイベントプロシージャの内容は以下の通りです。
Private Sub 登録_ボタン_Click()
'変数の宣言
Dim cnn As ADODB.Connection
Dim rst1 As ADODB.Recordset
'変数にADOオブジェクトを代入
Set cnn = CurrentProject.Connection
Set rst1 = New ADODB.Recordset
rst1.CursorLocation = adUseClient
'レコードセットを取得
rst1.Open "test_登録", cnn, adOpenKeyset, adLockOptimistic
'登録確認
If vbYes = MsgBox("登録します。" & vbCrLf & "よろしいですか?", vbQuestion + vbYesNo, "登録確認") Then
'レコードを追加
rst1.AddNew
rst1!商品名 = Me!商品名
rst1!仕入先 = Me!仕入先
rst1!単価 = Me!単価
rst1!登録日 = Me!登録日
rst1.Update
End If
'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing
End Sub
ACCESS VBAでテーブルに対してレコードの追加・更新・削除などの処理を行うには、ADOを利用する必要があります。
今回もADOを使った処理になっています。
ADOについて詳しくは以下の記事に書いてありますのでご参照ください。
内容を解説します。
最初の変数の宣言、変数にADOオブジェクトを代入するところまでは、ADOを利用するための既定手続きです。
今回はrst1というレコードセットオブジェクトを作成しています。
rst1に、
'レコードセットを取得
rst1.Open "test_登録", cnn, adOpenKeyset, adLockOptimistic
で、レコードを書き込む対象テーブルである「test_登録」を代入します。
次の
'登録確認
If vbYes = MsgBox("登録します。" & vbCrLf & "よろしいですか?", vbQuestion + vbYesNo, "登録確認") Then
は登録処理前の確認メッセージを出す処理です。
If文を使って分岐させています。
右辺はMsgBox関数を使って確認メッセージを出しています。
If文の条件に、MsgBox関数の戻り値(つまりユーザーが押したボタン)がvbYes(つまり「はい」)だった場合、という条件を設定しています。
このMsgBoxによる条件分岐はよく利用しますので覚えておくとよいでしょう。
その後、レコード追加処理を実行します。
'レコードを追加
rst1.AddNew
rst1!商品名 = Me!商品名
rst1!仕入先 = Me!仕入先
rst1!単価 = Me!単価
rst1!登録日 = Me!登録日
rst1.Update
AddNewから始め、最後にUpdateで完了します。
Updateを忘れやすいので気をつけましょう。
左辺のrst1!〇〇は「test_登録」テーブルのフィールドを指しています。
そこに対して、右辺のMe!〇〇でフォームに入力された値を代入する、という処理を繰り返します。
主キーである商品IDはオートナンバー型で自動採番されるので、ここでは追加処理から除外しています。
このような処理を行うことで、登録ボタンを押したときにテーブルにレコードを追加可能です。
以上、フォームで登録ボタンを押した時にレコードを追加する機能をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。