2013-11-20 1 views
1

폴더의 각 파일을 처리하는 루프가 있습니다. 경우 파일이 손상되어 열 수 없습니다, 내가 원하는 : - 사용자 에 오류 메시지를 표시 - 나머지 코드 의 실행 중지 - 다음 파일 문제가VBscript 오류 처리 - "For Each"루프의 다음 항목으로 이동

에 루프를, 루프의 시작 부분에서 파일을 열 수 없다면 여전히 많은 코드가 실행되어 다른 오류가 발생합니다. 루프를 종료 할 수 없습니다. 이는 모든 파일이 처리되지 않고 코드 실행을 계속할 수 없다는 것을 의미하기 때문입니다. 아래의 코드 부분을 참조하십시오.

Set fso = CreateObject("Scripting.FileSystemObject") 
For each objFile in fso.GetFolder(".").Files 
    If lCase(fso.GetExtensionName(objFile)) = srcExtName Then 
     Set app = GetNewAppInstance (Program) 
     Set fileHandle = GetNewFileHandler(app) 

     On Error Resume Next 
      Set objOpenFile = fileHandle.Open(objFile.path) 
      If err.number <> 0 Then 
      next 
       MsgBox "The file " & objFile.name & " cannot be opened. Please verify that the file is not corrupted or locked." & vbNewLine & "The file will be skipped." 
       Set fileHandle = nothing : app.Quit : Set app = nothing 
       <<< How can I jump to the next file from here ? >>> 
      End If 
     On error goto 0 
     strSrcPath = fso.BuildPath(objOpenFile.path, fso.GetBaseName(objOpenFile.name) & "._temp") 
     objOpenFile.SaveAs strSrcPath, tmpExtNum 
     objOpenFile.Close 

     Set objOpenFile = nothing 
     Set fileHandle = nothing 
     app.Quit : Set app = nothing 

     Set app = GetNewAppInstance (Program) 
     Set fileHandle = GetNewFileHandler(app) 

     Set objOpenFile = fileHandle.Open(strSrcPath) 
     strTgtPath = fso.BuildPath(objOpenFile.path, fso.GetBaseName(objOpenFile.name) & "." & srcExtName) 
     objOpenFile.SaveAs strTgtPath, srcExtNum 
     objOpenFile.Close 
     fso.DeleteFile(strSrcPath) 

     Set objOpenFile = nothing 
     Set fileHandle = nothing 
     app.Quit : Set app = nothing 
    End If 
Next 
End Sub 

고마워요!

답변

3

이 시도 : 난 당신이 오류가없는 경우에만 실행할 수 있도록, 당신의 if 문의 다른 블록에 코드의 "휴식"이동했습니다

Set fso = CreateObject("Scripting.FileSystemObject") 
For each objFile in fso.GetFolder(".").Files 
    If lCase(fso.GetExtensionName(objFile)) = srcExtName Then 
     Set app = GetNewAppInstance (Program) 
     Set fileHandle = GetNewFileHandler(app) 

     On Error Resume Next 
     Set objOpenFile = fileHandle.Open(objFile.path) 
     If err.number <> 0 Then 
      MsgBox "The file " & objFile.name & " cannot be opened. Please verify that the file is not corrupted or locked." & vbNewLine & "The file will be skipped." 
      Set fileHandle = nothing : app.Quit : Set app = nothing 
     Else 
      strSrcPath = fso.BuildPath(objOpenFile.path, fso.GetBaseName(objOpenFile.name) & "._temp") 
      objOpenFile.SaveAs strSrcPath, tmpExtNum 
      objOpenFile.Close 

      Set objOpenFile = nothing 
      Set fileHandle = nothing 
      app.Quit : Set app = nothing 

      Set app = GetNewAppInstance (Program) 
      Set fileHandle = GetNewFileHandler(app) 

      Set objOpenFile = fileHandle.Open(strSrcPath) 
      strTgtPath = fso.BuildPath(objOpenFile.path, fso.GetBaseName(objOpenFile.name) & "." & srcExtName) 
      objOpenFile.SaveAs strTgtPath, srcExtNum 
      objOpenFile.Close 
      fso.DeleteFile(strSrcPath) 

      Set objOpenFile = nothing 
      Set fileHandle = nothing 
      app.Quit : Set app = nothing    
     End If 
     On error goto 0 
    End If 
Next 

.

+0

간단합니다! 고마워요! – Bartosz

+0

문제가 없습니다. 다행히 도울 수있어 :) –

관련 문제