2014-01-17 151 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