vba - 如何强制忽略/继续过去1004错误

时间:2014-01-17 02:13:30

标签: excel vba excel-vba

基本上我有这个子图片将图片插入我的工作表:

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属性”,循环停止。如何绕过错误以便循环可以继续?

3 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分: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 :(得分:0)

插入

on error resume next
循环之前