2016-06-28 2 views
1

스크립트로 오류가 발생하면 포커스가 VBA 코드와 문제의 라인으로 바뀝니다. 나는 그것을 고치고 저장한다. 그런 다음 스크립트가 더 이상 실행되지 않고 멈추지 않았 음을 확인합니다.디버깅 후 내 VBA 스크립트가 계속 실행되지 않는 이유는 무엇입니까?

예를 들어, 지금은 Form_Timer() 이벤트를 사용하여 일부 테스트를 수행하고 있습니다 (간격은 1000ms로 설정 됨). 스크립트를 다시 테스트하기 위해 앞으로 1 분만 설정합니다 (예 : 현재 시간이 오전 8시 54 분인 경우 오전 8시 55 분에 시작하도록 설정). 그러나이 작업은 오류가 발생하면 작동을 멈 춥니 다. 아무도 이것이 왜 있는지 압니까? 필자는 스크립트를 다시 작동시키기 위해 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 = "[email protected]" 
      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 
+0

이것은 바보 같은 질문 일 수 있지만 매크로를 디버깅 한 후에 스크립트를 계속하려면 f5를 누르는가? – jellz77

+0

@ jellz77 아니, 아니야. F5 키를 누르면 매크로 이름을 묻는 대화 상자가 표시되지만 매크로를 제공하지는 못합니다. 나는 VBA 스크립트를 실행하고 있었는데 ... – whatwhatwhat

+0

디버깅을 한 후에 Ctrl + S (저장)를 눌러 스크립트가 일시 중지되지 않았는지 확인합니다. 그것은 상단의'[break]'를 제거하기 때문에 스크립트가 재개되었다고 가정합니다. 그러나 더 이상 발화하지 않습니다. – whatwhatwhat

답변

1

코드를 다시 활성화하려면 오류가 트리거 될 때 양식을 닫을 수 있습니다. 그런 다음 사용자는 작업을 완료하기 위해 양식을 다시로드해야합니다.

그러나 개입하지 않으면 오류가 다시 발생할 수 있습니다.

편집 : 또는 자동으로 닫고 문제가되는 양식을 다시 열 수있는 함수를 작성할 수 있습니다. on error 명령으로 호출합니다.

+0

그게 내가 결국 한 일이야. – whatwhatwhat

0

액세스 형태의 오류가 작동이 중지됩니다 타이머, 당신은 타이머를 시작하려면 전체 데이터베이스를 닫고 다시 만 형태가 필요하지 않습니다이 다시. 그렇지 않으면 "새로 고침"이라는 단추를 추가하고 매크로를 바인드하면 타이머가 다시 켜집니다.

+0

동일한 스크립트 내에서이 작업을 수행 할 수 있습니까? 오류 처리 또는 뭔가 내에서 타이머를 상쾌처럼? – whatwhatwhat

+0

저는 타이머에 대해 많은 경험이 없으므로 타이머를 다시 실행하는 정확한 명령을 알지 못합니다. 하지만 타이머를 멈추기 위해 전체 하위 내부의 오류 처리가 가능해야합니다. –

관련 문제