フォーム内操作

Access VBA リストボックス内の値をテーブルへ追加

リストボックス内の値をテーブルへ追加

フォーム内に設置したリストボックス内のデータをテーブルへ追加するプログラムを説明します。前記事(リストボックスに値を追加)の続きになります。

listbox04
リストボックス内の全データをテーブルへ新規レコードとして追加します。
・登録コマンドを押す
・リスト内のデータをカウント
・データをテーブルへ追加
では、実際にVBAをどのように組み込んでいくのか説明します。

コマンドボタン(登録)のクリックイベント

コマンドボタンのイベントは「クリック時」になります。
コマンドボタンを押した際にリスト内のデータを順に読み込み、テーブルへ新規レコードとして追加していきます。
実際のプログラムは以下のようになります。

リストボックス内のデータをテーブルへ追加するプログラム例

Private Sub 登録コマンド_Click()

Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim I As Integer

If MsgBox(“登録を行います。よろしいですか?”, vbQuestion + vbYesNo, “登録の確認”) = vbYes Then

Set CN = CurrentProject.Connection
Set RS = New ADODB.Recordset

RS.Open “T_社員マスタ2013”, CN, adOpenStatic, adLockOptimistic

For I = 1 To 入力リスト.ListCount – 1

RS.AddNew

RS!社員コード = 入力リスト.Column(0, I)
RS!名前 = 入力リスト.Column(1, I)
RS!性別コード = 入力リスト.Column(2, I)
RS!所属部署コード = 入力リスト.Column(4, I)
RS!入社年月日 = 入力リスト.Column(6, I)
RS!更新日 = 入力リスト.Column(6, I)

RS.Update

Next I

RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing

MsgBox “登録が完了しました。”, vbInformation, “登録完了”

End If

End Sub

プログラムの説明

・【For I = 1 To 入力リスト.ListCount – 1】
For Next文を使用し、リストボックス内のデータ数(ListCount)からマイナス1を行った数で繰り返し処理をします。(変数Iをリストの行数とする)
リストボックスの行と列のカウントは「0」(ゼロ)から始まります。一番上の0行目はリストボックスの「見出し行」ですので、テーブルへは入力させません。リストボックスのデータ数をカウントしマイナス1を行う理由は「見出し行」を除く為です。また、「見出し行」をテーブルへ入力させない為に「I = 1」としています。(0行目は見出し行の為)

・【RS!社員コード = 入力リスト.Column(0, I)】
リストボックスの値を取得するには「Column」を使用します。
Column(列,行)ですので、上記画像の一番上の社員コードを取得するには「Column(0, 1)」になります。列は追加したいテーブルのフィールドと同様なので、各フィールドに合った列数を指定します。行はFor Next文で繰り返し処理を実施しますので変数の「I」を記述しています。

listbox05
テーブル内に新規レコードが追加されていれば完成です。

こちらの記事もおすすめ!