访问vba运行时错误91-仅失败一次
问题:是否存在已知的Access/VBA问题,即出现错误91,然后通过调试/F5手动继续运行代码(不更改任何内容),错误不再出现 这是一个大项目,我不确定是什么导致了这个错误。我知道不是一个未设置的变量,因为我只得到一次错误。以下是场景: 复制步骤:访问vba运行时错误91-仅失败一次,vba,ms-access-2010,Vba,Ms Access 2010,问题:是否存在已知的Access/VBA问题,即出现错误91,然后通过调试/F5手动继续运行代码(不更改任何内容),错误不再出现 这是一个大项目,我不确定是什么导致了这个错误。我知道不是一个未设置的变量,因为我只得到一次错误。以下是场景: 复制步骤: 假设一个Access 2010.accdb文件(拆分表单) 我打开应用程序并按下一个按钮,该按钮调用许多函数以实现特定目标。这些函数创建各种类实例,访问数据库(通过DAO记录集和db.executesql更新)。函数序列从一个表中读取数据,并根据一
If Not DBUpdate(strSQL, Application.VBE.ActiveCodePane.CodeModule, "DBLocked", "") Then Exit Function
Public Function DBUpdate(str_SQL As String, str_Module As String, Optional str_Function As String, Optional str_ErrorDetails As String) As Boolean
Dim booDBUpdateFail As Boolean
Dim intFailCount As Integer
DBUpdate = True 'assume success
intFailCount = 0
On Error GoTo DBUpdateError
Do
booDBUpdateFail = False
db.Execute str_SQL, dbFailOnError
Loop Until booDBUpdateFail = False Or intFailCount = P_DBUpdateRetriesOnFailure
If intFailCount = P_DBUpdateRetriesOnFailure Then DBUpdate = False 'return failure
Exit Function
DBUpdateError:
intFailCount = intFailCount + 1
modIO.AppendToDBLog CStr(Now()) & ": " & str_Module & " - ErrorDBExecute - " & str_Function & " - " & str_ErrorDetails & " - TryCount: " & CStr(intFailCount)
booDBUpdateFail = True
Wait P_DBUpdateRetryIntervalSeconds * 1000 'wait
Resume Next
End Function
注意:上面的DB是由应用程序启动时启动的隐藏表单的加载事件实例化的公共对象。初始化子节点:
Public Sub InitPublic()
If db Is Nothing Then Set db = CurrentDb() 'Open connection to current Access database
If UserPerm Is Nothing Then Set UserPerm = New clsUserPerm
If wfstatus Is Nothing Then Set wfstatus = New clsWFStatus
If Log Is Nothing Then Set Log = New clsLog
If PurchaseLevels Is Nothing Then Set PurchaseLevels = New clsPurchasingLevels
If objPrintTemplate Is Nothing Then Set objPrintTemplate = New clsPrintTemplate
If objPrintReport Is Nothing Then Set objPrintReport = New clsPrintTemplate
End Sub
在您第一次按下按钮之前,VBE是否已打开?因为您正试图访问
Application.VBE.ActiveCodePane.CodeModule
,如果VBE未打开,则该文件可能不存在(并且一旦处于调试模式,VBE将打开,因此F5和后续调用将正常工作)。嗨,Vincent,感谢您指出这一点。的确是VBE。现在觉得自己很愚蠢……:)您知道在运行时(不打开VBE)获取当前模块(理想情况下是函数/子名称)的方法吗?我需要它以静默方式记录错误,并且不希望每次都键入模块和函数名。在您第一次按下按钮之前,VBE是否已打开?因为您正试图访问Application.VBE.ActiveCodePane.CodeModule
,如果VBE未打开,则该文件可能不存在(并且一旦处于调试模式,VBE将打开,因此F5和后续调用将正常工作)。嗨,Vincent,感谢您指出这一点。的确是VBE。现在觉得自己很愚蠢……:)您知道在运行时(不打开VBE)获取当前模块(理想情况下是函数/子名称)的方法吗?我需要它以静默方式记录错误,并且不希望每次都键入模块和函数名。