こんにちは、Accessブロガーの「なかぜん」です。
「昨日まで動いてたVBAが突然エラーに…」「クリックしても何も反応しない!」
業務でAccessを使っていると、こんな“予期せぬトラブル”に直面すること、ありますよね。今回は、そんなときに慌てず対応するためのVBAが動かなくなったときの確認手順を、初心者にもわかりやすくご紹介します。
この記事を読めば、エラーの原因をスムーズに特定でき、再発防止にもつながりますよ。
1. まず最初に確認すべき3つのポイント
① モジュールが保存されているか
意外と見落としがちなのが「保存漏れ」。VBAコードを編集したのに保存せずに実行すると、変更が反映されません。
- VBE(Visual Basic Editor)でCtrl+Sを押して保存
- Access本体も上書き保存しておくと安心
② イベントが正しく設定されているか
フォームのボタンなどにVBAを設定している場合、イベントプロパティを確認しましょう。
例えば、「クリック時」に設定されていないと、どんなにコードが正しくても動きません。
【手順】
- フォームをデザインビューで開く
- 該当ボタンを選択
- プロパティシートの「イベント」タブを開く
- 「クリック時」に「[イベント プロシージャ]」と表示されているか確認
③ エラーが発生していないか
VBAには「ステップ実行」でコードの流れを確認できる機能があります。
' 例:クリックイベント内の処理
Private Sub btn実行_Click()
MsgBox "処理を開始します"
DoSomething
End Sub
このとき、F8キーでステップ実行すると、どこで止まるのかがわかります。
2. よくある原因別・対処チェックリスト
① 参照設定エラー(Missing参照)
外部ライブラリ(Excel操作やOutlook連携など)を使っている場合、「参照設定」が切れている可能性があります。
確認方法:
- VBEで「ツール」→「参照設定」
- 一覧の中に「参照不可:○○」がある場合はチェックを外すか、正しい参照先に変更
② コントロール名の変更
フォーム上のコントロール名を後から変更すると、VBA側のコードが「前の名前のまま」になってエラーになります。
' 修正前(古い名前のまま)
Me.txt入力値.Value
' 修正後(コントロール名を変えた場合)
Me.txtCustomerInput.Value
エラーが出た箇所のコントロール名を再確認しましょう。
③ 変数名やモジュール名の競合
「Dim Date As String」など、予約語と同じ名前を使っていると、動作が不安定になります。
モジュール名を「Form」とか「Report」などにしてしまうのもNG。既存オブジェクトと被らない命名を心がけましょう。
3. 中級者向け:ログ出力で原因特定を自動化しよう
毎回ステップ実行するのは面倒…。そんなときは、エラー発生時にログを出す仕組みを作っておくと便利です。
' 汎用的なエラーハンドリングテンプレート
On Error GoTo ErrorHandler
' --- 通常処理 ---
Call DoSomething
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & Err.Description
Debug.Print "エラー番号:" & Err.Number
Resume Next
「Debug.Print」はVBEの「イミディエイトウィンドウ」に出力されるので、ログ確認に役立ちます。
4. それでも動かない時の最終手段
- Accessを再起動する(メモリ関連の不具合が直ることがあります)
- PCごと再起動(別プロセスが影響している可能性も)
- 別のPC・Access環境で試す(バージョン差異による動作不具合の切り分け)
5. まとめ:慌てず、一歩ずつチェックしよう
今回は「VBAが突然動かなくなったときの確認手順」について、初心者にもわかりやすくご紹介しました。
- 保存・イベント・エラーの3点チェックが基本
- 参照設定やコントロール名も要注意
- 中級者はログ出力やテンプレート化も検討を
Access VBAは、ちょっとした設定や記述ミスで動かなくなってしまうことがあります。でも、今回のチェックポイントを覚えておけば、慌てず対応できます。
今後は、「自作ツールのエラーハンドリング標準化」や「自動デバッグログの取り方」なども記事にしていく予定です!
「なかぜん」でした。次回もお楽しみに!
