2014-01-17 149 views
4

基本上我有這個子其插入圖片到我的工作表:VBA - 如何強制忽略/繼續過去的1004錯誤

ActiveCell.Select 
Dim picname As String 
picname = ActiveCell.Value 
ActiveCell.Offset(-1, 0).Select 

Dim picture 
Set picture = ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\Images\" & picname & ".jpg") 

我運行這個子與Application.Run一個循環內。如果路徑文件夾中沒有圖片,則出現「運行時錯誤1004:無法獲取Picture類的Insert屬性」,循環停止。我如何繞過錯誤以便循環可以繼續?

回答

18

On Error結構存在這種事情之前。它配備了各種選項:

On Error Goto label 

一旦你的代碼遇到這種說法,它會發生錯誤時跳轉到label:。如果你需要做一些錯誤處理是很有用的 - 特別是如果有多個地方可能會出錯,但它們總是會導致相同的「需要修復某些東西」的例程。您可以使用Err.NumberErr.Description找出造成錯誤的原因。

On Error Resume Next 

當你有一行可能會導致錯誤的行時很有用 - 但是如果你想忽略並繼續前進。這很可能是在這裏做的正確的事情。

不要忘了把

On Error Goto 0 

你已經通過了「危險」後,否則你的代碼將(在你發出的初始命令的範圍內)繼續忽略錯誤。危險,那。

所以,你的代碼將被修改爲

On Error Resume Next 
Set picture = ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\Images\" & picname & ".jpg") 
On Error GoTo 0 
+2

加1。包括:D – L42

+1

+ 1同意,'錯誤'很好地覆蓋。 –

0

插入

on error resume next 

循環

+0

請參閱Floris和Siddharth Routs關於「On Error Resume Next」的解答。 –

5

如何繞過錯誤,以便循環能否持續?當你有沒有其他選擇,或者你期待的錯誤,並希望還是繼續需要

錯誤這樣案件處理。在你的情況下,只需使用DIR命令來檢查文件是否存在,然後只插入圖片。例如。

If Dir(ThisWorkbook.Path & "\Images\" & picname & ".jpg") <> "" Then 
    ' 
    '~~> Your code to insert a picture 
    ' 
End If 

On Error Resume Next 
Set picture = ActiveSheet.Pictures.Insert.... 
On Error GoTo 0 

的問題是,在代碼的後面部分,你將不得不另起一行

If Not picture = Nothing then 

的情況下,您正在使用的對象進行交互。在DIR的情況下,所有相關的代碼夾在IF/EndIF之間,您不需要額外的檢查。

+2

Rout先生一如既往的有見識和有用! – Floris