1

表示用にログファイルを開くための次のExcelVBA関数があり、ファイルを表示から閉じた後に常にエラーがスローされることを除いて、すべてが正しく実行されます。

Private Sub ViewLog_Click()
  On Error GoTo LogFileOpenHandler:
    If Shell("notepad.exe " & LOG_FULL_FILENAME, vbMaximizedFocus) <> 0 Then
      ' Log file opened successfully
      MsgBox "log file opened"
    Else
      MsgBox "Oopsies! Could not open log file for viewing."
    End If

LogFileOpenHandler:
  MsgBox "Oops...Unknown error occured. Could not open log file for viewing."
  On Error GoTo 0
End Sub

Exit Subただし、最後のステートメントとしてを挿入すると、If Shell(...) <> 0 Thenエラーは検出されません。

誰かが私にエラーが何であるか、そしてなぜそれがスローされるのか説明してもらえますか?

4

1 に答える 1

2

エラーがあると表示される理由は、ブロックExit Subの後に(ほのめかしたように)がないためです。Ifしたがって、プログラムが実行されるたびに、プログラムは最後LogFileOpenHandler:まで実行され、コードがそのスクリプトを実行するのを止めるものがないため、下にメッセージボックスが生成されます。

バックを追加するExit Subと、希望どおりに実行されます。

Private Sub ViewLog_Click()
  On Error GoTo LogFileOpenHandler:
    If Shell("notepad.exe " & LOG_FULL_FILENAME, vbMaximizedFocus) <> 0 Then
      ' Log file opened successfully
      MsgBox "log file opened"
    Else
      MsgBox "Oopsies! Could not open log file for viewing."
    End If

    Exit Sub 

LogFileOpenHandler:
  MsgBox "Oops...Unknown error occured. Could not open log file for viewing."
  On Error GoTo 0
End Sub
于 2012-10-31T17:20:49.077 に答える