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

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

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

お待たせしました。更新処理です。基本的な動作は新規作成や削除と何ら変わりはありません。今回の方針では変更する場合、すべての入力列を更新する方針で行います。
理由はその方が楽だからです。w

さて、もろもろ危険性はありますが、処理としては更新ということがわかれば良いので、ざっくりと以下で行きます。

・削除と同じく選択した行の値を取得して更新画面を表示する
・更新画面は登録画面と同じで、商品情報が入力された状態
・更新ボタンで更新ができる。


です。

ボタンを押したらフォームを値が入った状態で表示する

さてコードです。

まずはシート側に商品更新ボタンを作成し、そのボタンを押したら更新画面を表示させるところです。

Private Sub btnProductUpdate_Click()
    'On Error GoTo Err

    Dim productId As String
    Dim productName As String
    Dim productPrice As String
    
    ' 登録するデータを変数に入れる
    productId = Sheet2.Cells(Selection.Row, "A").Value
    productName = Sheet2.Cells(Selection.Row, "B").Value
    productPrice = Sheet2.Cells(Selection.Row, "C").Value
    
    If Left(productId, 2) <> "PB" Then
        MsgBox "商品が選択されていません。", vbExclamation + vbOKOnly, "エラー"
        Exit Sub
    End If
    
    frmProductUpdate.txtProductId.Value = productId
    frmProductUpdate.txtProductName.Value = productName
    frmProductUpdate.txtPrice.Value = productPrice
    
    frmProductUpdate.Show
    
End Sub


ここでは、削除処理とまずは同じで、条件を満たしていなければエラーとしています。
そうでなければ、更新処理を行うフォームオブジェクトの各コントロールに表の値を設定して、フォームの画面を表示しています。このfrmProductUpdate.txtProductId.Value = productIdという部分が値を設定している部分です。何も難しいことはしていないということを理解してほしいと思います。やっていることはただただ、

・オブジェクトを正しく頭から指定する。
・設定したい値をプロパティに代入式で代入する

これだけです。オブジェクトは日本語の「の」を「.」でつなぐのでしたね。すなわち、

「更新フォームfrmProductUpdateの商品IDテキストボックスtxtProductIdの値を変数productIdに入っている値で設定する」

「frmProductUpdate.txtProductId.Value = productId」

となるわけですね。

フォームのボタンを押すと更新する


次に更新処理ですね。これも簡単です。フォームの値を取得して、SQL文を作成し、実行したらそれで終わりです。接続などは共通のプロシージャを利用するのは登録や削除と同じです。

ではコードです。

Private Sub btnProductUpdate_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 = "UPDATE Product SET id = '" & productId & "', product_name = '" & productName & "', price = '" & price & "'" & _
          "WHERE id = '" & productId & "'"

'   実行する
    mCon.Execute (sql)
    
    MsgBox "更新完了", vbInformation + vbOKOnly, "商品更新"
    Me.Hide
    
    Exit Sub
    
Err:
    MsgBox "更新エラー", vbExclamation + vbOKOnly, "商品登録"
    
End Sub


はい、こんな感じですね。
これで、更新ボタンを押すと更新し、完了するとフォームを閉じてくれます。
閉じる命令文はHideプロシージャですね。Showの反対です。



いかがでしょうか?これでDBとの基本的な連携についてはこれでおしまいです。データベースと連携することでより複雑なアプリケーションが作成できるようになります。是非皆さん一度試してみてください。


今日はここまで。


かしこ