偶尔*发生访问运行时错误2475

时间:2018-09-05 13:06:28

标签: vba ms-access access-vba

我有一个错误日志,每当错误陷阱中某个用户发生运行时错误时,访问日志便会记录在访问表中,并且似乎至少每个小时对10个随机用户发生一次特定错误。

此错误似乎完全随机发生,在带有Set ActiveForm代码的随机模块上,随机用户以随机间隔出现。据我所知,用户之间没有任何模式。

  

2475-“您输入的表达式需要一个窗体作为活动窗口”。

这似乎发生在任何包含表单设置的模块中。我正在使用以下行:

Dim af as Object
Set af = Screen.ActiveForm

我尝试使用其他方法,例如将其声明为Form,还尝试了以下方法:

Dim sstatus as String
Dim ps as String

If DLookup("[TM_UserType]", "[SD_Teams]", "[TM_username]= '" & usernm & "'") = "adj" Then
    sstatus = "adj"
Else
    sstatus = "tm"
End If

ps = "frmProdSubmit_" & sstatus

然后以这种方式引用表单:

Forms(ps).cmbTeam.Value = ""

但是此静止会导致相同的问题,甚至删除ActiveForm部分。

最后要提到的(我认为可能是因素)是通过快捷方式访问前端,该快捷方式将“访问”窗口最小化。不知道这可能是罪魁祸首,或者单击其他应用程序的用户是否可以删除焦点。

每天大约有700个用户访问数据库的后端。

按现状显示,错误陷阱随信息弹出,但前端继续正常工作。这只是一个令人烦恼的问题,但是现在正在慢慢用尽想法,任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

当非表单对象是活动屏幕对象(例如表格数据表)时,会引发错误 2475。我在使用表单的多个实例并需要跟踪多个表单模块是否处于活动状态或其他应用程序模块功能之一的应用程序中遇到此错误,在这种情况下,多个表单(弹出窗口)的所有实例都需要具有.visible 设置为 false。我在 Form_Deactivate 事件中使用 Screen.ActiveForm.Name 调用。

您可以在过程的错误处理程序中捕获错误,并在知道屏幕的活动对象不是表单的情况下采取行动。

Example:

Private Sub Form_Deactivate()
  On Error GoTo errHandler
  
  If Screen.ActiveForm.Name <> "AnApplicationForm" Then 'throws 2475 if not a form object
    sstatus = "status message"
  End If
ExitSub:
  Exit Sub
errHandler:
  If Err.Number = 2475 Then Resume Next 'screen active object is not a form i.e. datasheet
  MsgBox "Error in " & Me.Name & ".Form_Deactivate: " & Err.Number & " - " & Err.Description
  Resume ExitSub
End Sub 'Form_Deactivate