イナカモノのよもやま話

イナカモノが職場で作ったExcel・AccessのVBAや、感じた事をまったり書いていくブログです。

「AccessでイベントプロシージャをWithEventsで追加したら、×ボタンでAccessが強制終了してしまう」を直してみた

  • 会社でOffice2016を(やっと)導入したさいに、同じエラーで強制終了するようになった。

answers.microsoft.com

◎環境

Windows7・Access2016

◎発生個所

原因は分からないが、FormのUnloadイベントのEnd Subが終わったところで強制終了する。

Private Sub Form_Unload(Cancel As Integer)
'↓End Subを実行したら強制終了する。
End Sub

◎対応方法

WithEventsを宣言しているオブジェクト変数に、Form_Unloadの辺りでNothingをSetする。

'TestClass クラスモジュール
Public WithEvents AccessTextBoxEvents As Access.TextBox

Public Sub セット(ByRef txtbox As Access.TextBox)
        Set AccessTextBoxEvents = txtbox
        AccessTextBoxEvents.OnChange = "[EVENT PROCEDURE]"
End Sub
Private Sub AccessTextBoxEvents_Change()
    MsgBox "TEST"
End Sub

上記のようなクラスモジュールがあるとすれば、フォームの方にはこう記述する。

'Form1
Dim TestEvents(0) As New TestClass

Private Sub Form_Load()
    TestEvents(0).セット Me.テキスト1
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'NothingをSetすることで強制終了を回避する。
    Set TestEvents(0) = Nothing
End Sub

これで会社の環境では、強制終了しなくなりました。
ま、一番いいのは、Windows8.1以降にする事かもしれません、が…Windows10のAccess2016なら、強制終了しないんです。
ナゾ。