VBAから Access のテーブルにレコードを追加するには、いくつか方法があります。まずは Recordsetオブジェクトの AddNew メソッドを使う方法です。
【1】Accessのファイル「SampleDB020.mdb」を起動し、テーブル「T01Prefecture」を開きます。
【2】最後のレコードが、「47 沖縄県」になっていることを、確認しておいてください。
レコードを確認したらテーブルを閉じます。
【3】続いて VBE を起動し、標準モジュールの test6 を表示します。
*VBEは「Altキー」+「F11キー」で起動できます。
【4】「test6」に以下のように、Subプロシージャ addData() を追加します。
Sub addData(pCd As Integer, pName As String)
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("T01Prefecture")
rs.AddNew
rs!PREF_CD = pCd
rs!PREF_NAME = pName
rs.Update
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
Debug.Print "レコードを追加しました。"
dispData
End Sub
プログラムの準備ができたら、早速実行してみましょう。
【5】イミディエイト ウィンドウから addData() を実行してください。
call addData(99, "ハワイ")
*PREF_CD は 1~47は既に使われているので、他の番号にしてください。
【6】追加のメッセージと、レコードが表示されました。
【7】イミディエイト ウィンドウをスクロールすると、新しいレコードが追加されていることが確認できます。
【8】テーブル「T01Prefecture」を開き、レコードが追加されていることを確認してください。
【9】addData()を使って、レコードを追加する練習をしてください。
【解説】
(1)イミディエイト ウィンドウから、addData() を引数を指定して呼び出しています。
call addData(99, "ハワイ")
1番目の引数は整数型なのでそのまま書きます。2番目の引数は文字列型なので、半角の「"」ダブルクォーテーションで囲みます。
Call ステートメントを使わない場合は、()カッコを付けないで書きます。
addData 99, "ハワイ"
*PREF_CD に重複する値を使うことはできません。
(2)整数型(Integer)と文字列型(String)の引数を、2つ受け取ります。
Sub addData(pCd As Integer, pName As String)
(3)実際にレコードを追加している部分です。
rs.AddNew
rs!PREF_CD = pCd
rs!PREF_NAME = pName
rs.Update
Recordsetオブジェクトに対して操作を行なっています。AddNew から Updatete までをセットで覚えてください。
rs.AddNew で新しいレコード(空)を作成して、rs.Update で保存します。Updateを忘れると、テーブルに反映されませんのでご注意ください。
引数として受け取った値を、新しいレコードのデータにしています。
(4)メッセージを表示している部分です。
Debug.Print "レコードを追加しました。"
(5)レコードを表示している部分です。
dispData
*引数の無い Subプロシージャ は Call を省略できます。
既にSubプロシージャ dispData() は作成済みなので、レコードを表示する複雑な機能が、たった1行で呼び出せます。これがSubプロシージャを定義するメリットです。