Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:用于…出错转到下一步_Vba_Excel - Fatal编程技术网

Excel VBA:用于…出错转到下一步

Excel VBA:用于…出错转到下一步,vba,excel,Vba,Excel,我用的是。。。下一个循环将图片插入Excel工作表。图片的名称来自B列。有时,硬盘上没有相应的图片。在这种情况下,Excel将抛出错误消息并停止运行代码。首先,我尝试了“下一步继续出错”。这是不好的,因为错误发生后所有代码都被执行。因此,我尝试了以下代码,以避免在找不到图片时运行代码。然而,这只捕获第一个错误。当第二次找不到图片时,Excel仍会抛出错误消息(“无法获取pictures类的insert属性”)。我所希望的是,如果发生错误,Excel将跳过其余代码并转到下一个案例。如何做到这一点?

我用的是。。。下一个循环将图片插入Excel工作表。图片的名称来自B列。有时,硬盘上没有相应的图片。在这种情况下,Excel将抛出错误消息并停止运行代码。首先,我尝试了“下一步继续出错”。这是不好的,因为错误发生后所有代码都被执行。因此,我尝试了以下代码,以避免在找不到图片时运行代码。然而,这只捕获第一个错误。当第二次找不到图片时,Excel仍会抛出错误消息(“无法获取pictures类的insert属性”)。我所希望的是,如果发生错误,Excel将跳过其余代码并转到下一个案例。如何做到这一点?谢谢你的帮助

......
On Error GoTo gotoNext
For Each cell In rng
......
Set p = Workbooks(ActiveSheet.Parent.Name).Sheets(Sheet_to_Insert_Picture).Pictures.Insert(Path_Prefix & "\" & _
Replace(cell.Value, "/", "-") & ".jpg") 'when the picture is not found, Excel throws an error
......
gotoNext:
Err.Clear
Next

您可以使用
Dir
命令快速检查图像文件是否存在。如果找到文件,它将返回文件名(因此返回的字符串长度大于零)

For Each cell In rng
  if cbool(len(dir(Path_Prefix & "\" & Replace(cell.Value, "/", "-") & ".jpg"))) then
    Set p = Workbooks(ActiveSheet.Parent.Name).Sheets(Sheet_to_Insert_Picture).Pictures.Insert(Path_Prefix & "\" & Replace(cell.Value, "/", "-") & ".jpg")
  end if
next cell

这可能有助于您为什么不使用错误恢复下一步我不使用错误恢复下一步,因为如果我这样做,“Set p…”之后和GotonNext之前的代码将被执行。那会引起麻烦的,谢谢。它起作用了。实际上,我删除了cbool,只使用了“if len(dir(路径前缀&“\”&Replace(cell.Value,“/”,“-”&“.jpg”))然后…”@ykya-很高兴听到你很快就解决了问题。根据最严格的定义,False等于零,True可以被视为“任何非False的东西”。我使用
CBool
包装器,因为a)它提醒我正在确定布尔结果,b)在工作表上,TRUE被认为是1,但在VBA中TRUE是-1。在过去,我曾因为一些糟糕的布尔标准而被咬过,所以我喜欢使用
CBool
包装器。