基本上我有这个子图片将图片插入我的工作表:
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属性”,循环停止。如何绕过错误以便循环可以继续?
答案 0 :(得分:23)
On Error
构造存在于此类事物中。它有各种选项:
On Error Goto label
一旦您的代码遇到此语句,如果发生错误,它将跳转到label:
。如果你需要做一些错误处理是很有用的 - 特别是如果有多个地方出现问题,但它们总是导致相同的“需要修复某些事情”。您可以使用Err.Number
或Err.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
循环之前