2016-06-28 3 views
1

スクリプトでエラーが発生するたびに、フォーカスはVBAコードと違反行に変わります。私はそれを修正し、保存を押す。それから私はそれが一時停止していないことを確認した後でも、スクリプトはもはや実行されていないことに気付きます。デバッグ後にVBAスクリプトが継続しないのはなぜですか?

たとえば、私はForm_Timer()イベントを使用して、何らかのテストを行います(間隔は1000msに設定されています)。スクリプトをもう一度テストするために、私はちょうど1分後に設定します(たとえば、現在の時刻が午前8:54:00の場合、午前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

アクセス形式に誤りがあった場合、タイマーは動作を停止します、あなたはタイマーを起動するだけで、フォーム、データベース全体を閉じて再度開く必要はありません再び。それ以外の場合は、 "refresh"というボタンを追加してマクロをバインドすると、タイマーが再びオンになります。

+0

これはおそらく同じスクリプト内で実行できますか?エラー処理や何かの中でタイマーをリフレッシュするのと同じですか? – whatwhatwhat

+0

私はタイマーでそれほど経験がありませんので、私はタイマーを再実行するための正確なコマンドを知らない。しかし、タイマー停止を避けるために、サブ全体のエラー処理が可能でなければなりません。 –

関連する問題