【初心者向け】Accessのセキュリティと基本的なバリデーション
nanikatoaccess
なにか to Access
以下では、「初心者向け VBA入門:簡単なコードサンプルと手順」をテーマに、Microsoft AccessでVBA(Visual Basic for Applications)を初めて使う方向けに解説します。Accessではマクロ機能もありますが、VBAを身につけると外部ファイル操作や高レベルなエラー処理、他システムとの連携など、より高度な開発が可能になります。
メリット
- 自由度が高い:プログラミング言語なので豊富な構文とロジックが組める
- エラー処理やステップ実行など、デバッグ環境が整っている
- Office他製品やファイル操作がしやすい
VBAの最も簡単なコード例として、**メッセージボックス(MsgBox)**を出すだけのサブルーチンを紹介します。
Public Sub ShowHello()
MsgBox "こんにちは!VBAの世界へようこそ", vbInformation
End Sub
ShowHello
というSubを定義。=ShowHello()
を設定(または「イベントプロシージャ」でVBA内から呼ぶ)すると、ボタンを押したときに「こんにちは!」と表示されます。ポイント
vbInformation
はアイコンの種類(情報アイコン)を示す。Public
は他のフォームやモジュールからも呼べるようにする修飾子。
Private Sub txt顧客名_BeforeUpdate(Cancel As Integer)
If IsNull(Me.txt顧客名) Or Me.txt顧客名 = "" Then
MsgBox "顧客名は必須入力です。", vbExclamation
Cancel = True ' 更新をキャンセル
End If
End Sub
解説
Cancel = True
と書くとデータ更新自体が中断されるため、ユーザーはフォームを閉じたり他のレコードに移動できなくなる。MsgBox "..."
で警告メッセージを出し、vbExclamation
アイコンを表示。
VBAでは、DAO (Data Access Objects) や ADO (ActiveX Data Objects) を使ってSQL文を発行したり、レコードセットを操作できます。クエリを自動生成したりレコードを追加/更新したい場合は覚えておくと便利です。
Public Sub UpdateRecordDAO()
Dim db As DAO.Database
Dim strSQL As String
Set db = CurrentDb
strSQL = "UPDATE tbl_顧客 SET 電話番号 = '000-1111-2222' WHERE 顧客ID = 1"
db.Execute strSQL, dbFailOnError
MsgBox "ID=1 の顧客電話番号を更新しました。"
End Sub
db.Execute strSQL
でDML(INSERT/UPDATE/DELETE)クエリを実行。dbFailOnError
フラグによりエラーが起きると即座に実行が中断される。Public Sub FetchRecordADO()
Dim cn As Object
Dim rs As Object
Dim strSQL As String
Set cn = CreateObject("ADODB.Connection")
' (ここで cn.Open 接続文字列を設定する例など)
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Database\Sample.accdb"
strSQL = "SELECT 顧客ID, 会社名 FROM tbl_顧客 WHERE 顧客ID < 5"
Set rs = CreateObject("ADODB.Recordset")
rs.Open strSQL, cn, 1, 3 ' adOpenKeyset, adLockOptimistic
Do Until rs.EOF
Debug.Print "ID=" & rs("顧客ID"), "会社名=" & rs("会社名")
rs.MoveNext
Loop
rs.Close : Set rs = Nothing
cn.Close : Set cn = Nothing
End Sub
Debug.Print
でイミディエイトウィンドウ(VBAエディタの[表示]→[イミディエイト])に値を出力して確認。Private Sub ボタン名_Click()
が作成される。Private Sub btnUpdate_Click()
' 例: ID=1の顧客を更新
Dim strSQL As String
strSQL = "UPDATE tbl_顧客 SET 電話番号='000-9999-8888' WHERE 顧客ID=1"
CurrentDb.Execute strSQL
MsgBox "更新完了!", vbInformation
End Sub
Public Sub SimpleErrorDemo()
On Error GoTo ErrHandler
' 本処理
Dim x As Integer
x = 10 / 0 ' 整数0除算エラー発生
MsgBox "OK!", vbInformation
Exit Sub
ErrHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbExclamation
End Sub
On Error GoTo ErrHandler
でエラー時に飛び先を定義。Err.Description
や Err.Number
でトラブル内容を取得可能。Option Explicit
を入れると、変数が未宣言だとコンパイルエラーになり、スペルミスを防げるDim 変数名 As 型
をきちんと書く習慣を付ける[ ]
で囲むなどきちんと対処するDoCmd.Echo False
で画面更新抑制など)' コメント文
を入れて、何のための処理なのかを残す。後々メンテナンスが楽になるOn Error
)や**デバッグ手法(ステップ実行、ウォッチ式)**を覚えると、開発効率が格段にアップ初心者の方は、マクロで組んでいた操作を少しずつVBAに置き換えてみたり、テキストボックスのBeforeUpdateイベントをVBAで制御してみるなど、手堅いところから始めるとよいでしょう。慣れてくれば、API連携やファイル操作などより高機能なアプリにもチャレンジできます。
関連記事
最初は難しく感じるかもしれませんが、小さなサブプロシージャからでも書き始めればだんだんVBAの仕組みが理解できるようになります。ぜひ日々の業務にVBAを役立て、Access開発の幅を大きく広げてみてください。