我有一个for循环靠近顶部我希望在尝试设置一个等于工作簿的变量时抛出错误。返回错误是因为工作簿可能存在,也可能不存在。 for循环遍历许多工作簿,其中任何数量都可能存在,也可能不存在。循环看起来像这样
for i = 1 to x
'get ready for to open the workbook
set = myworkbook = workbooks.open("path\myworkbook" & date)
'do a bunch of stuff after I get the workbook
next i
这一切都很好,花花公子,但如果工作簿不存在,那我就会出错。现在我尝试了一些错误处理技术。理想情况下,如果找不到工作簿,它会直接跳到循环的底部,然后进入下一个工作簿。
我已经使用goto语句跳转到行的底部,但是只有一次工作,并且在工作簿不存在时第二次传递时会抛出错误。我在goto行之后尝试了err.Clear,以便可以捕获新的错误。我已经尝试过goto -1来清除错误,但这也不起作用。我已经尝试了各种简历下一个语句,但如果由于找到了工作簿而没有发生错误,则会抛出一个我无法处理的错误。我在启动错误处理例程之前检查错误编号,包装变量设置行以确保它显示为0但仍然会引发错误。
似乎有很多方法可以解决这个问题,我想我已经尝试过所有这些方法。这不是一个我确定的独特问题,我只需要朝着正确的方向努力。感谢您提供的任何帮助。
这样你就不会想到我没有尝试过你想到的任何解决方案,这里还有其他一些问题:
For Loop, how to skip iterations
Difference between 'on error goto 0' and 'on error goto -1' -- VBA
On Error Goto 0 not resetting error trapping
答案 0 :(得分:2)
为什么不这样:
Public Sub SkipLoop()
On Error Resume Next
Dim i As Integer
Dim wb As Workbook
For i = 1 To 100
Err.Clear
Set wb = Workbooks.Open("some file")
If Err.Number = 0 Then
'do work on success
End If
Next
End Sub
答案 1 :(得分:2)
不需要对此类内容使用错误处理。只需使用智能逻辑就可以了:
Dim MyWorkbook as Workbook
for i = 1 to x
'get ready for to open the workbook
On Error Resume Next
set myworkbook = workbooks.open("path\myworkbook" & date)
On Error GoTo 0
If Not MyWorkbook Is Nothing Then
'do a bunch of stuff after I get the workbook
End if
next i
这样做是为了检查“虚无”'对象变量。如果对象未设置(未找到),则If块中的代码将不会运行。