VBA访问网络文件夹崩溃问题求助及高效文件遍历解决方案
刚好之前我也遇到过类似的问题——用VBA的FileSystemObject访问网络文件夹时容易崩溃,尤其是文件夹里文件量达到5000+的时候,折腾了一阵终于找到了解决方案,分享给你:
问题回顾
我原本的需求是访问网络文件夹,筛选出当日创建的特定文件并处理,但代码在本地路径下运行完全正常,切换到网络映射路径后直接崩溃,原代码如下:
Sub NetworkFiles() Dim n As String, msg As String, d As Date msg = "" Set FSO = CreateObject("Scripting.FileSystemObject") Set fils = FSO.GetFolder("\\corp-server\HostingFolder").Files '("C:\FILES") works perfectly For Each fil In fils n = fil.name n = Left(n, 24) d = fil.DateLastModified 'DateCreated If n = "FILE_CHARACTERS_ARE_RANDOM_AFTER_THIS_POINT" Then If d >= Date Then msg = msg & n & vbTab & d & vbCrLf End If End If Next fil If msg = "" Then MsgBox "No new files" Else MsgBox msg End If Set FSO = Nothing End Sub
优化后的解决方案
改用Dir函数替代FileSystemObject,不仅解决了网络路径访问崩溃的问题,还大幅提升了遍历大量文件的效率,同时实现了目标文件的复制功能:
Sub LoopThroughFiles() Dim file As Variant Dim fso As Object Source = "\\networkpath\test" file = Dir(Source) destloc = "C:\test\folder" msg = "" While (file <> "") If InStr(file, "TEST_partOfTheFileString" & Format(Date, "YYYYMMDD")) > 0 Then FileCopy Source & file, destloc & file msg = msg & file & vbCrLf End If file = Dir Wend MsgBox msg & "Files Copied" End Sub
为什么这个方案更有效?
- 稳定性提升:
Dir函数在网络路径下的表现比FileSystemObject更可靠,不会因为大量文件导致崩溃 - 效率优化:通过文件名包含特定标识+当日日期的方式筛选文件,避免了读取文件属性(如
DateLastModified)的额外开销,遍历速度更快 - 逻辑简洁:直接使用
FileCopy完成文件复制,无需额外的对象创建和释放操作
内容的提问来源于stack exchange,提问作者Mr.Riply
相关产品推荐
相关产品推荐

