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

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

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


流れ的には更新なのですが、ちょっと面倒くさいので後回しで先に削除処理をします。削除については、どれを?がわかればそれで終わりです。

どれを?をどう削除する?


こっからは仕様の話なので、どうでも良いのですが、商品情報を削除するには商品IDを指定しなければいけません。そのIDを条件に削除処理を行います。例えば、フォームにIDを指定して削除ボタンを押したら、そのIDの商品を削除するでも良いですし、一覧にある商品IDを選択して、削除ボタンを押すことで削除されるでも良いです。

特定する情報をいかにしてとるか?


要は削除する情報が「どれ?」かをちゃんと特定すること。が大切です。削除の処理自体はそんなに難しくありません。他の登録処理と一緒です。SQL作って、実行するだけです。

ではそんなに前置きもないのでコードです。今回は、商品のセルを選択したら、その行の商品が削除されます。間違ってボタンを押しても削除されないように確認画面を付けます。

f:id:drumer2sh:20141015210411p:plain

Private Sub btnProductDelete_Click()
    'On Error GoTo Err

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

    ' 削除するデータを変数に入れる
    productId = Sheet2.Cells(Selection.Row, "A").Value
    productName = Sheet2.Cells(Selection.Row, "B").Value
    
    If Left(productId, 2) <> "PB" Then
        MsgBox "商品が選択されていません。", vbExclamation + vbOKOnly, "エラー"
        Exit Sub
    End If
    
    ' 確認する
    msg = "商品ID:" & productId & vbCrLf & "商品名:" & productName & vbCrLf & vbCrLf & _
    "この商品を削除しますか?"
    ret = MsgBox(msg, vbQuestion + vbOKCancel, "商品削除")
    
    If ret = vbOK Then
        ' Accessへ接続する
        Set mCon = mdlDbUtil.initDb
        
        ' 登録するSQL文を作る
        sql = "DELETE FROM Product WHERE ID = '" & productId & "'"
        
        ' 実行する
        mCon.Execute (sql)
        
        MsgBox "削除しました。", vbInformation + vbOKOnly, "商品削除"
    
    End If
    
    Exit Sub
    
Err:
    MsgBox "登録エラー", vbExclamation + vbOKOnly, "商品削除"
    
End Sub


はい、おしまい。ちょっとだけやっていることを説明すると、処理の流れとしては・・・

削除するデータを変数に入れる。

Selectionオブジェクトを使ってます。Selectionオブジェクトは現在選択されているセルのRangeオブジェクトになるので、SelectionオブジェクトのRowプロパティを参照すると、「現在選択されているセルの行」が選択されるわけです。

選択されている行が商品行か?


Left関数を使って、変数に入れた商品IDがちゃんと商品IDか?を判定しています。ここではとりあえず、変数の最初の2文字を取得してそれが「PB」だったら商品IDとしています。
このあたりは、自分で作る時にどう判定するのか?は考えておくと良いですね。


後は、やっていることは登録と変わらないです。AccessDBへ接続して、SQLを実行した。だけです。



今日はここまで!


かしこ