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

bsa*_*aka 5 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")
Run Code Online (Sandbox Code Playgroud)

我在循环中使用Application.Run运行此子.如果路径文件夹中没有图片,我得到"运行时错误1004:无法获取Picture类的Insert属性",循环停止.如何绕过错误以便循环可以继续?

Flo*_*ris 23

On Error结构存在这种事情.它有各种选项:

On Error Goto label
Run Code Online (Sandbox Code Playgroud)

一旦您的代码遇到此语句,它将label:在发生错误时跳转到.如果你需要做一些错误处理是很有用的 - 特别是如果有多个地方出现问题,但它们总是导致相同的"需要修复某些事情".您可以使用Err.NumberErr.Description查找导致错误的原因.

On Error Resume Next
Run Code Online (Sandbox Code Playgroud)

当你有一行可能导致错误时很有用 - 但是如果它确实你想忽略并继续前进.这很可能是正确的做法.

别忘了放

On Error Goto 0
Run Code Online (Sandbox Code Playgroud)

在您通过"危险"之后,否则您的代码将(在您发出初始命令的范围内)继续忽略错误.危险,那.

所以你的代码将被修改为

On Error Resume Next
Set picture = ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\Images\" & picname & ".jpg")
On Error GoTo 0
Run Code Online (Sandbox Code Playgroud)


Sid*_*out 5

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

如果您没有其他选项或者您预计会出现错误并且仍希望继续,则需要在此类情况下进行错误处理.在您的情况下,只需使用DIR命令检查文件是否存在,然后只插入图片.例如.

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

这个问题

On Error Resume Next
Set picture = ActiveSheet.Pictures.Insert....
On Error GoTo 0
Run Code Online (Sandbox Code Playgroud)

是在代码的后半部分,你将不得不添加另一行

If Not picture = Nothing then
Run Code Online (Sandbox Code Playgroud)

以防您与该对象进行交互.在这种DIR情况下,所有相关代码都夹在中间IF/EndIF,您不需要额外的检查.