2016-07-07 1 views
1

タイトルはあいまいですが、タイトルに問題を記述する方法がわかりませんでした。これは私の長いコードが保存ダイアログをトリガーする部分です:ErrorHandlerはmsアクセスのトラップエラーを停止します

Line1: 
Dim dlgSaveAs As Object 
Dim strFilePath As String 
Dim strFileName As String 
Set dlgSaveAs = Application.FileDialog(2) 
With dlgSaveAs 
.InitialFileName = (CurrentProject.Path) & "\Folder" & "_" & Format(Date, "yyyy") 
End With 
dlgSaveAs.Show 
strFilePath = dlgSaveAs.SelectedItems(1) 
strFileName = Right(strFilePath, Len(strFilePath) - InStrRev(strFilePath, "\")) 
ActiveWorkbook.SaveAs FileName:=CurrentProject.Path & "\" & strFileName, FileFormat:=xlOpenXMLWorkbook 

SaveError: 
    Select Case Err.Number 
    Case 1004 'if it's want to overwrite an old file and i clicked "no" or "cancel" 
     GoTo Line1 'reopen the Save Dialog 
    Case 5 'if i clicked "cancel" on the Save Dialog 
     rs1.Close 
     Set rs1 = Nothing 
     MsgBox ("Canceled") 
     Exit Sub 
    End Select 

私はErrorHandlerが '1004'エラーを検出した場合、それが閉じられた後に保存ダイアログを再度開きます。 エラー '1004'が発生するたびに、ハンドラはそれを正常に検出しますが、(ErrorHandlerによって)ダイアログを再オープンした後、ハンドラは '1004'または '5'のいずれかの検出を停止します。 なぜですか?

+0

'Line:'の後に 'On error goto SaveError'を入れて再設定する必要があると思います。 – Brad

+0

返信のために@ブラッドに感謝、私はあまりにも考え、また動作しませんでした。マットのマグカップのおかげで彼は何が間違っているかを知った –

答えて

4

これまで聞いたことがありますか?

GOTO EVIL IS

まあ、GoTo悪です。

まず、手順の先頭にOn Error GoTo SaveErrorを貼り付けます。これは、エラーの正しいジャンプを確実にします。

エラー1004が初めて発生すると、VBAは「エラー処理モード」に入り、SaveErrorサブルーチンを入力します。

あなたがしている手順の飛び出すことなく、「エラー処理モード」から出て、戻って「通常実行モード」にVBAを取得するには、いくつかの方法があります。

  • Resumeが再実行されますエラー(ここで無限ループを監視!)
  • Resume Next
  • Resume {line label}は、指定されたラベル
  • にジャンプしますエラーの原因となった1後 のステートメントを実行するの原因となったステートメント

これらのすべてにResumeというキーワードが含まれています。

GoTo Line1と言うとき、手順はを再実行しますが、VBAはまだエラーを処理していると考えます。

ランタイムがエラーを処理していると考えている間に発生したエラーは、あなたが気づいたとおりに行うことは間違いありません。

GoTo Line1Resume Line1に置き換えます。

はまた、あなたがエラー状態にいるときにのみ、これまでのコードの塊を実行するように、Exit SubまたはExit Functionエラー処理サブルーチン/ラベルを使用することを検討してください。

最後に、.Show関数の戻り値を使用して、ランタイムエラーに頼るのではなく、ダイアログがキャンセルされたかどうかを判断することを検討してください。

+0

多くの多くのありがとう、あなたは私の問題を解決し、私はすべてについて知りませんでしたこの非常に有用な情報 –

関連する問題