2016-09-14 134 views
0

我有一个宏,它通过excel文件路径列表循环。宏将读取每个路径,打开工作簿,从每个工作簿中复制/提取各种数据,然后将数据粘贴到中央工作簿中。有大约2000个文件路径需要循环访问。正如你所看到的,这是一个非常简单的宏。它运行得很好。但是,运行一段时间(也许在通过前70个文件路径循环后),excel会一直挂在我身上(它显示打开文件时出现的“下载”消息框)。如果我单击msg框上的取消,工作簿仍然打开并且宏按正常方式继续。但随着这些“下载”消息框不断弹出,我将不得不坐在这里,为超过1000个更多的文件路径保留宏。有谁知道为什么excel卡在这里?有没有办法解决它?打开excel文件时VBA挂起

甚至更​​奇怪的是,这个悬挂的消息框并不会发生在每个Workbook上。打开实例,它只发生在每隔几个。

这里是我使用的代码示例:

With ThisWorkbook.Sheets("Filepaths") 
     For i = firstrow To lastrow 
       SourceFile = .Cells(i, 1).Value 
       Workbooks.Open SourceFile, ReadOnly:=True 
       Set MyFile = Workbooks(Workbooks.Count) 
       ..more code.......... 
       ..more code.......... 
       ..more code.......... 
       MyFile.close 
     Next i 
End With 

感谢您的意见,这些都是很好的点(而且这两种解决方案,我相信我已经在过去尝试过)。但只是为了检查,我已经修改了我的Workbooks.Open线这样的:

Application.DisplayAlerts = False 
Workbooks.Open SourceFile, ReadOnly:=True, UpdateLinks:=False 
Application.DisplayAlerts = True 

但问题仍然弹出...

什么奇怪的是,当我通过线直通一步..线当我经过“Application.DisplayAlerts = False”行后,当我将鼠标悬停在“Application.DisplayAlerts”变量上时,它仍然表示正确?!

+1

(而你在它和'ScreenUpdating')也许关掉'Application.DisplayAlerts'会有所帮助。 –

+0

你不能'Application.DisplayAlerts = False'? – Tyeler

+2

某些工作簿中可能无效的外部链接? –

回答

0

好像您试图从共享驱动器打开文件,这就是为什么它会显示“正在下载”消息框。这有时会发生。

Application.DisplayAlerts = False在这种情况下将无济于事。 ReadOnly:=True, UpdateLinks:=False也不会帮助。

试试这个代码(未经测试

With ThisWorkbook.Sheets("Filepaths") 
    For i = firstrow To lastrow 
     SourceFile = .Cells(i, 1).Value 

     '~~> Check for network path and use sendkeys 
     '~~> to close the downloading window 
     If InStr(1, SourceFile, "\\") Then _ 
     Application.SendKeys "~", True 

     Workbooks.Open SourceFile, ReadOnly:=True 

     Set MyFile = Workbooks(Workbooks.Count) 
     '..more code.......... 
     '..more code.......... 
     '..more code.......... 
     MyFile.Close 
    Next i 
End With 
+0

是的,它来自共享驱动器。但是,所有用户PC上的所有路径都是映射驱动器(O:\驱动器)。我正在玩SendKeys代码(但不能说我完全理解它)。无论如何。我一直在玩的SendKeys代码似乎工作得更好。但我似乎仍然得到偶尔的“下载”味精盒挂断,但只是不经常... – ActuaryGuy

+0

替换'“\\”'用'“O:\”' –

+0

谢谢。这导致奇怪的事情发生...像宏有时停止并打开Workbooks.Open行上的调试窗口,或宏在application.sendkeys行之后或workbooks.open行之后插入其他空白行... – ActuaryGuy