You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:37:18