パソコン情報

【Access】レコードを直接削除するVBAならシンプルだね

マイクロソフトアクセス(Access)にて、操作ミスや入力ミスを防ぐためにテーブルを直接操作できないように、非連結のフォームを使って対応する場合があります。

しかし、

ポイント

頻繁にテーブルを使うような作業やレコード数が少ないような場合は、シンプルにフォームにテーブルをレコードソースにして方が簡単

です。

編集許可機能の実装

テーブルをフォームにしていると確実に困るのが、一回の操作ミスで誤入力してしまったり、削除してしまったりしてしまうことです。気づかずにデータがおかしいという事で無駄な時間を費やしてしまう事もありました。

そこで、確実にやっておいた方がよいのが、

デフォルトで編集制限機能

だと考えます。

間違って編集しそうになっても、許可ボタンをクリックして編集モードにしない限り編集がされませんので誤操作するリスクが低減します。

過去の記事にまとめてありますので参考にどうぞ。

https://pctips.jp/pc-soft/access-typo201907/

レコード削除機能の実装

さらに詳しく

非連結フォームだと、テーブルから対象レコードの抽出などをしなければなりません。

https://pctips.jp/pc-soft/access-serach-vba-howto201907/

しかし、非連結でないフォームの場合は、該当レコードが選択されていれば、簡単なコードで削除することが可能です。

VBA削除コード

Private Sub client_del_Click()
Dim lans As Long
    
    If Me.NewRecord = True Then
        MsgBox "新規レコードは削除できません"
        Exit Sub
    End If
    
        
    lans = MsgBox("クライアント削除してもよろしいですか?", vbYesNo + vbInformation, "確認")
    If lans = vbNo Then
        Exit Sub
    End If
    
On Error GoTo ErrExit
    
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdDeleteRecord
    DoCmd.SetWarnings True
    
    Exit Sub

ErrExit:
    MsgBox "編集モードになってない為か、エラーが発生した為、削除できませんでした" & vbCrLf & "エラー内容: " & Err.Description


End Sub

 

上のVBAコードを削除ボタンに貼り付けるだけで削除機能が実装できました。

 

もちろん、

 

ココがポイント

編集モードにしない場合は、エラーで操作は停止します。

 

このような簡単な機能で人的ミスも低減できると思いますので参考にどうぞ。

 

あくまでも、レコードが少ないデータの場合であり、沢山のレコードが存在するようなテーブルでは、フォームにレコードソースをダイレクトにするのは避けた方がいいですね。