Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 为什么调试后VBA脚本不继续?_Debugging_Ms Access_Vba - Fatal编程技术网

Debugging 为什么调试后VBA脚本不继续?

Debugging 为什么调试后VBA脚本不继续?,debugging,ms-access,vba,Debugging,Ms Access,Vba,每当我的脚本出现错误时,焦点就会转到VBA代码和有问题的行。我把它修好,然后点击save。然后我注意到脚本不再运行,即使在我确保它没有暂停之后也是如此 例如,现在我正在使用Form\u Timer()事件进行一些测试(间隔设置为1000ms)。要再次测试脚本,我只需将其设置为未来的一分钟(例如,如果当前时间为上午8:54:00,我将其设置为上午8:55:00启动)。但这会在出现错误后停止工作。有人知道这是为什么吗?我不想告诉我的用户关闭并重新打开Access DB的副本,只是为了让脚本再次工作

每当我的脚本出现错误时,焦点就会转到VBA代码和有问题的行。我把它修好,然后点击save。然后我注意到脚本不再运行,即使在我确保它没有暂停之后也是如此

例如,现在我正在使用
Form\u Timer()
事件进行一些测试(间隔设置为1000ms)。要再次测试脚本,我只需将其设置为未来的一分钟(例如,如果当前时间为上午8:54:00,我将其设置为上午8:55:00启动)。但这会在出现错误后停止工作。有人知道这是为什么吗?我不想告诉我的用户关闭并重新打开Access DB的副本,只是为了让脚本再次工作

代码:

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
Private子表单_Timer()
关于错误转到错误处理程序
当前日期时间=现在
如果当前日期时间=2016年6月28日上午8:52:00,则
MsgBox(“当前日期时间变量为:”&当前日期时间)
'声明对象
Dim数据库作为DAO.Database
将rst设置为DAO.Recordset
将qdf设置为DAO.QueryDef
Dim oApp作为Outlook.Application
将oMail设置为Outlook.MailItem
将邮件正文设置为字符串
'设置对象
设置dbs=CurrentDb
设置qdf=dbs.querydfs(“qry\u BMBFLoc”)
Set rst=qdf.OpenRecordset
设置oApp=newoutlook.Application
设置oMail=oApp.CreateItem(olMailItem)
mail_body=“以下作业没有在作业订单中设置特殊BF位置:”&vbCrLf
如果不是(rst.EOF和rst.BOF),则
rst.MoveFirst
直到rst.EOF=真
邮件正文=邮件正文(&rst)!作业-“-”和rst!后缀&vbCrLf
rst.MoveNext
环
'电子邮件内容
oMail.Body=邮件正文
oMail.Subject=“诸如此类”
oMail.To=”someone@something.com" 
oMail,发送
“接近的东西
rst.关闭
星展银行,结束
设置rst=无
设置oMail=Nothing
设置oApp=Nothing
如果结束
如果结束
出口接头
错误处理程序:
作为字符串的Dim msg
如果错误号为0,则
msg=“电子邮件格式计时器错误”&Str(错误编号)和“错误行:”&Erl&Chr(13)&Err.Description
MsgBox msg,“Error”,Err.HelpFile,Err.HelpContext
如果结束
出口接头
端接头

当access窗体中出现错误时,计时器将停止工作,您无需关闭并重新打开整个数据库,只需重新启动窗体即可。否则,您可以添加一个名为“刷新”的按钮并将宏绑定到该按钮,这将再次打开计时器。

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

但是,如果不进行任何干预,错误很可能再次发生


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

是啊,这太糟糕了。我正在为outlook编写vba脚本,因此调试的唯一方法是在每次出现错误后关闭并重新打开outlook。

这可能是一个愚蠢的问题,但调试完宏后,是否按f5继续脚本?@jellz77不,我没有。在我点击F5后,它会弹出一个对话框,要求输入宏名,但我不知道该宏名。我正在运行一个VBA脚本…调试后,我通过按Ctrl+S(保存)确保脚本没有暂停。它删除了顶部的
[break]
,因此我假设脚本已恢复。但是它不会再启动了。你能发布一些代码吗?这样我们就可以调试你在上下文上的工作了。在表单模块中,只有
Sub
Private
。这可能在同一脚本中完成吗?比如在错误处理中刷新计时器之类的?我对计时器没有太多经验,所以我不知道重新运行计时器的确切命令。但在整个潜艇内部的错误处理应该可以避免计时器停止。这就是我最后做的,是的。