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这个子。 如果path文件夹中没有图片,则出现“运行时错误1004:无法获取Picture类的Insert属性”,循环停止。 如何绕过错误,以便循环可以继续?

On Error结构存在于这种事情上。 它配备了各种选项:

 On Error Goto label 

一旦你的代码遇到这个语句,它会跳转到label:如果发生错误。 如果你需要做一些error handling是很有用的 – 特别是如果有多个地方可能会出错,但总是会导致相同的“需要修复某些东西”的例程。 您可以使用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 

如何绕过错误,以便循环可以继续?

error handling在这种情况下是必需的,当你没有其他的select,或者你期待一个错误,并希望仍然继续。 在你的情况下,只需使用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之间,你不需要额外的检查。

 on error resume next 

在循环之前