【问题标题】:Excel VBA: FOR...on error goto NEXTExcel VBA: FOR...on error goto NEXT
【发布时间】:2015-05-15 18:33:17
【问题描述】:

我使用 For ... Next 循环将图片插入 Excel 工作表。图片的名称来自B列。有时,硬盘上没有对应的图片。在这种情况下,Excel 将抛出错误消息并停止运行代码。首先,我尝试了“On Error Resume Next”。这不好,因为错误发生后的所有代码都被执行了。所以,我尝试了下面的代码,尽量避免找不到图片时运行代码。但是,这仅捕获第一个错误。当第二次找不到图片时,Excel 仍然会抛出错误消息(“无法获取图片类的插入属性”)。我想要的只是如果发生错误,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

【问题讨论】:

标签: vba excel


【解决方案1】:

您可以使用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

【讨论】:

  • 谢谢。有用。实际上,我删除 cbool 并仅使用 "if len(dir(Path_Prefix & "\" & Replace(cell.Value, "/", "-") & ".jpg")) then..."
  • @ykya - 很高兴听到你很快得到了解决。根据最严格的定义,False 等价于零,True 可以被认为是'任何不为假的'。我使用 CBool 包装器,因为 a) 它提醒我正在确定一个布尔结果 b) 在工作表上,TRUE 被认为是 1 但在 VBA 中 True 是 -1我>。过去我曾为一些糟糕的布尔标准而苦恼,所以我喜欢使用 CBool 包装器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多