2013-11-20 21 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

試試這個:

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 

我搬到了代碼的「休息」到您的if語句的else塊,所以如果你有沒有錯誤,將只執行。

+0

就這麼簡單!非常感謝! – Bartosz

+0

沒有問題。很高興我能幫上忙 :) –