我有一个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
这工作都很好,但如果工作簿不存在,那么我得到一个错误。现在我尝试了一些错误处理技术。理想情况是,如果找不到工作簿,它会跳到循环的底部,然后进入下一个i。
我已经使用goto语句来跳转到行的底部,但是只有当该工作簿不存在时才会起作用,并且在第二次传递时会抛出错误。在goto行之后,我尝试了err.Clear,以便可以捕获新错误。我已经尝试了goto -1来清除错误,但这也不起作用。我尝试了各种resume resume语句,但是如果因为找到工作簿而没有发生错误,那么会抛出一个我无法处理的错误。在开始错误处理程序包装变量设置行之前,我检查错误编号,确保它显示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
Access VBA: Is it possible to reset error handling
Error handling only works once
为什么不使用'对于myworkbook.Worksheets中的每个ws'请参见[SO Excel文档主题](https://stackoverflow.com/documentation/excel-vba/1144/loop-through-all-sheets-in-active -workbook/3685/retrieve-all-worksheets-names-in-active-workbook#t = 201707261350060188819) –
这些是单独的工作簿,而不是工作簿中的工作表。他们都有一个独特的文件名和路径,这是由日期区分。注意文件名包括日期。 –