初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

中級者のためのエクセルマクロVBA:Accessデータベースへの登録処理

フォームの内容をデータベースに登録する


続きです。今度は登録ボタンを押したら、Accessへ登録フォームの内容を登録します。さっそくやってみましょう。VBEでフォームを作成したと思いますが、ここで追加した「登録ボタンを」右クリックして「コードの表示」を選択します。


f:id:drumer2sh:20141003111843p:plain


すると、このボタンをクリックした時に実行されるプロシージャが自動で作成されます。

Private Sub btnProductRegist_Click()

End Sub

この「btnProductRegist」というのがオブジェクトですよね。もうわかると思いますが、ボタンもオブジェクトです。フォームオブジェクトにこのボタンオブジェクトが引っ付いている形ですね。

では、後はやることはなんでしょうか?

  • 登録するデータを変数に入れる
  • Accessへ接続する
  • 登録するSQL文を作る
  • 実行する


という流れをそのままプログラムで書くだけです。コメントにしますかね。

Private Sub btnProductRegist_Click()

'    - 登録するデータを変数に入れる
'    - Accessへ接続する
'    - 登録するSQL文を作る
'    - 実行する
End Sub


後は必要な変数ですね。まずはAccessに接続するためのオブジェクトを格納する変数、それからフォームの内容を格納する変数などが必要ですね。それらを宣言します。

Private Sub btnProductRegist_Click()

    Dim productId As String
    Dim productName As String
    Dim price As String
    
    Dim mCon As ADODB.Connection             'データベース接続オブジェクト
    
    Dim sql As String
    
'    - 登録するデータを変数に入れる
'    - Accessへ接続する
'    - 登録するSQL文を作る
'    - 実行する
End Sub


はい、できました。後はコメント通りにプログラムを書くだけです。登録するデータを変数に入れるには、フォームオブジェクトを指定してそのValueプロパティを参照すれば良いのです。

Private Sub btnProductRegist_Click()

    Dim productId As String
    Dim productName As String
    Dim price As String
    
    Dim mCon As ADODB.Connection             'データベース接続オブジェクト
    
    Dim sql As String
    
'   登録するデータを変数に入れる
    productId = Me.txtProductId.Value
    productName = Me.txtProductName.Value
    price = Me.txtPrice.Value

'    - Accessへ接続する
'    - 登録するSQL文を作る
'    - 実行する
End Sub


こんな感じです。「はて?Me?( ゚д゚)?」となりそうですが、Meは「自分自身」という意味です。英語のままですね。このプログラムは先ほどに書いた通り、フォームオブジェクトのコードを書く場所に書いています。ですので、ここでMeとするとそれはつまりこのフォームオブジェクトつまりbtnProductRegistそのものをさしていることになるわけです。Meがいやならちゃんと「btnProductRegist.txtProductId.Value」と書いても構いません。これで「btnProductRegistの商品IDテキストボックスのオブジェクトtxtProductIdの値、つまりValueプロパティを参照し、その値を変数productIdに代入、つまり格納することができます。

次にデータベースへの接続ですが、これも以前ブログで書いた標準モジュールから呼び出すだけです。つまり

'   Accessへ接続する
    Set mCon = mdlDbUtil.initDb

ですね。後は、SQL文で登録用のInsert文を作成し、実行したらAccessへ登録できるようになります。

Private Sub btnProductRegist_Click()

    Dim productId As String
    Dim productName As String
    Dim price As String
    
    Dim mCon As ADODB.Connection             'データベース接続オブジェクト
    
    Dim sql As String

'   登録するデータを変数に入れる
    productId = Me.txtProductId.Value
    productName = Me.txtProductName.Value
    price = Me.txtPrice.Value
    
'   Accessへ接続する
    Set mCon = mdlDbUtil.initDb

'   登録するSQL文を作る
    sql = "INSERT INTO Product(id, product_name, price) " & _
          "VALUES('" & productId & "', '" & productName & "', '" & price & "')"

'   実行する
    mCon.Execute sql


End Sub


これで登録ができるのですが、これでは、ボタンを押しても何も言われません。ただ、登録されるだけなので、もう少し使う人にやさしくしてみます。

  • 登録完了のメッセージを表示する
  • フォームをクリアする

などを入れてみます。SQLの実行した結果が問題なければ登録がOKですので、On Error Gotoを使います。その結果がこれ。

Private Sub btnProductRegist_Click()
    On Error GoTo Err

    Dim productId As String
    Dim productName As String
    Dim price As String
    
    Dim mCon As ADODB.Connection             'データベース接続オブジェクト
    Dim adoRS As Object
    
    Dim sql As String

'   登録するデータを変数に入れる
    productId = Me.txtProductId.Value
    productName = Me.txtProductName.Value
    price = Me.txtPrice.Value
    
'   Accessへ接続する
    Set mCon = mdlDbUtil.initDb

'   登録するSQL文を作る
    sql = "INSERT INTO Product(id, product_name, price) " & _
          "VALUES('" & productId & "', '" & productName & "', '" & price & "')"

'   実行する
    mCon.Execute (sql)
    
    MsgBox "登録完了", vbInformation + vbOKOnly, "商品登録"
    Me.txtProductId.Value = ""
    Me.txtProductName.Value = ""
    Me.txtPrice.Value = ""

    Exit Sub
    
Err:
    MsgBox "登録エラー", vbExclamation + vbOKOnly, "商品登録"
    
End Sub


これで完成です。色々やっているように見えますが、やっていることは、先ほど書いた通り・・・

  • 登録するデータを変数に入れる
  • Accessへ接続する
  • 登録するSQL文を作る
  • 実行する


だけです。


今日はここまで!

かしこ