Если вы застряли в VBA, это становится немного грубым. Одним из способов было бы иметь форму с таймером (можно было бы ее открыть невидимо. Таймер мог проверять таблицу, скажем, раз в минуту (или любой другой интервал, который кажется подходящим) на предмет изменения количества записей, и проверять таблицу все еще существует. (код ниже)
Но лично я бы не рекомендовал вам это делать. Доступ печально известен коррупцией. При использовании в качестве простого бэкэнда вы в большинстве случаев достаточно безопасны, но если на нем запущен монитор, это означает, что файл всегда открыт. Это в основном игра в русскую рулетку с вашей базой данных. Как минимум, я бы связался с вашей базой данных из другого файла Access и проследил бы за связанными таблицами, чтобы в случае сбоя монитора вы не брали с собой производственную БД. Наконец, убедитесь, что вы не выполняете запросы слишком часто, так как я не хотел бы видеть, что вы являетесь единственной причиной истечения времени ожидания сайта:)
Option Explicit
Private m_lngLstRcrdCnt_c As Long
Private Sub Form_Open(Cancel As Integer)
Const lngOneMinute_c As Long = 60000
Me.TimerInterval = lngOneMinute_c
End Sub
Private Sub Form_Timer()
Const strTblName_c As String = "Foo"
Const strKey_c As String = "MyField1"
Dim rs As DAO.Recordset
Dim lngRcrdCnt As Long
If TableExists(strTblName_c) Then
Set rs = CurrentDb.OpenRecordset("SELECT Count(" & strKey_c & ") FROM " & strTblName_c & ";", dbOpenSnapshot)
If Not rs.EOF Then lngRcrdCnt = Nz(rs.Fields(0&).Value, 0&)
rs.Close
If lngRcrdCnt <> m_lngLstRcrdCnt_c Then
m_lngLstRcrdCnt_c = lngRcrdCnt
'Number of records changed, do something.
End If
Else
'Table is deleted, do something.
m_lngLstRcrdCnt_c = -1
End If
End Sub
Private Function TableExists(ByVal name As String) As Boolean
Dim tdf As DAO.TableDef
On Error Resume Next
Set tdf = CurrentDb.TableDefs(name)
If LenB(tdf.name) Then 'Cheap way to catch broken links.
Set SafeGetTable = tdf
End If
End Function