VBA Do Until循环有时会失败

我正在写一些非常基本的Excel VBAmacros来分割和合并工作表上的大型工作簿。 我已经把它解决了,但是我有一个间歇性的失败(大概是10次),我似乎无法可靠地重现,更不用说修复了。

在我感兴趣的文件夹中有大约205张单页工作簿,macros使用Dir()在它们之间循环,到达空文件名时结束。 除了有时它不。

它偶尔会停在随机点通过这些文件。 我已经看到它在60-190次import之间发生,并且在那个时候停止执行,没有任何错误或警告。 Do Until Loop之后的其余代码不会被执行。

有没有人跑过类似的东西? 这是在Excel中的内存问题? 我在这里失去了主意。 添加一个计时器到循环放慢速度没有帮助。 我正在合并的文件夹中没有打开的文件。 抑制在合并过程中popup的警报不是问题。

这里是循环的代码:

strFilename = Dir(myPath & "\*.xlsx", vbNormal) If Len(strFilename) = 0 Then Exit Sub Do Until strFilename = "" Set wbSrc = Workbooks.Open(fileName:=myPath & "\" & strFilename, UpdateLinks:=False) Set wsSrc = wbSrc.Worksheets(1) wsSrc.Copy after:=wbDst.Worksheets(wbDst.Worksheets.Count) wbSrc.Close False strFilename = Dir() Loop 

非常感谢Rory对shift-key提示的评论(当然还有其他所有的帮助)。 没有运行的macros正在使用Shift键,但偶尔会出现,因为Excel打开时没有移动安全规则,所以我会使用alt-shift-tab或其他一些使用shift的组合。

Microsoft支持页面上的文档解决了这个问题,涉及到检测何时保持Shift键并在Do Until内部运行另一个循环,直到它被释放之前阻止打开被调用。

最终相关代码:

 'Declare API Declare Function GetKeyState Lib "User32" _ (ByVal vKey As Integer) As Integer Const SHIFT_KEY = 16 Function ShiftPressed() As Boolean 'Returns True if shift key is pressed ShiftPressed = GetKeyState(SHIFT_KEY) < 0 End Function ... Do Until strFilename = "" Do While ShiftPressed() DoEvents Loop Set wbSrc = Workbooks.Open(fileName:=myPath & "\" & strFilename, UpdateLinks:=False) Set wsSrc = wbSrc.Worksheets(1) wsSrc.Copy after:=wbDst.Worksheets(wbDst.Worksheets.Count) wbSrc.Close False strFilename = Dir() Loop