为什么调试后我的VBA脚本不能继续?

时间:2016-06-28 13:56:29

标签: vba debugging ms-access access-vba

每当我使用我的脚本遇到错误时,焦点就转向VBA代码和违规行。我解决了,点击保存。然后我注意到脚本不再运行,即使我确保它没有暂停。

例如,现在我正在使用Form_Timer()事件进行一些测试(间隔设置为1000毫秒)。为了再次测试脚本,我将其设置为将来一分钟(例如,如果当前时间是上午8:54:00,我将其设置为在上午8:55:00触发)。但是这在错误之后停止工作。有人知道为什么吗?我不想让我的用户关闭并重新打开他们的Access数据库副本,只是为了让脚本再次运行。

代码:

Private Sub Form_Timer()


    On Error GoTo ErrorHandler

    current_date_time = Now


    If current_date_time = #6/28/2016 8:52:00 AM# Then 

        MsgBox ("the current_date_time variable holds: " & current_date_time)

        'Declare objects
        Dim dbs As DAO.Database
        Dim rst As DAO.Recordset
        Dim qdf As DAO.QueryDef
        Dim oApp As Outlook.Application
        Dim oMail As Outlook.MailItem
        Dim mail_body As String

        'Set objects
        Set dbs = CurrentDb
        Set qdf = dbs.QueryDefs("qry_BMBFLoc")
        Set rst = qdf.OpenRecordset
        Set oApp = New Outlook.Application
        Set oMail = oApp.CreateItem(olMailItem)

        mail_body = "The following jobs do not have the special BF location set in Job Orders: " & vbCrLf

        If Not (rst.EOF And rst.BOF) Then

            rst.MoveFirst
            Do Until rst.EOF = True

                    mail_body = mail_body & rst!job & "-" & rst!suffix & vbCrLf

            rst.MoveNext
            Loop

            'Email contents
            oMail.Body = mail_body
            oMail.Subject = "Blah"
            oMail.To = "someone@something.com" 
            oMail.Send

            'Close stuff
            rst.Close
            dbs.Close
            Set rst = Nothing
            Set oMail = Nothing
            Set oApp = Nothing

        End If

    End If

Exit Sub

ErrorHandler:

        Dim msg As String
        If Err.Number <> 0 Then
               msg = "email Form Timer Error #" & Str(Err.Number) & " error Line: " & Erl & Chr(13) & Err.Description
               MsgBox msg, , "Error", Err.HelpFile, Err.HelpContext
        End If
        Exit Sub

End Sub

3 个答案:

答案 0 :(得分:1)

为了重新激活代码,您可以在触发错误时关闭表单。然后,用户必须重新加载表单才能完成操作。

但是,如果没有任何干预,可能会再次出现错误。

编辑:或者您可以编写一个功能来自动关闭,并重新打开有问题的表单。在on error命令中调用它。

答案 1 :(得分:0)

当访问表单中出现错误时,计时器将停止工作,您不需要关闭并重新打开整个数据库,只需要再次启动计时器的表单。否则你可以添加一个名为&#34;刷新&#34;的按钮。并将宏绑定到它将再次打开计时器。

答案 2 :(得分:0)

是的,这很烂。我正在为Outlook编写vba脚本,因此调试的唯一方法是在每个错误发生后关闭并重新打开Outlook。