Dir()和FSO都缺少1个文件

时间:2015-08-19 19:20:24

标签: excel vba dir fso

所有寻找此问题解决方案的搜索尝试都与我正在寻找的相反。我不需要从文件夹中的搜索中排除文件,而是将它们全部包含在内。

我的问题是我的搜索返回文件夹中的所有文件,除了1.每次找不到的1个文件是完全随机的。我尝试过使用Dir()和FSO方法,不同目录,不同数量的文件等。无论我尝试什么,列表中总会缺少1个文件。

以下是我的代码的简化代码段:

Dir()版本:

FilePath = "C:\Test\"

SourceFile = Dir(FilePath & "*.xls*")

Do While SourceFile <> "" 
   SourceFile = Dir()
   ActiveCell.Value = SourceFile
   ActiveCell.Offset(1, 0).Activate
Loop

FSO版本:

Set FileSystem = CreateObject("Scripting.FileSystemObject")
DoFolder FileSystem.GetFolder(FilePath)

Sub DoFolder(Folder)
    Dim SubFolder
    For Each SubFolder In Folder.SubFolders
        DoFolder SubFolder
    Next

    Dim File
    For Each File In Folder.Files
        If File.Name <> "" Then
            SourceFile = Dir()
            ActiveCell.Value = SourceFile
            ActiveCell.Offset(1, 0).Activate
        End If
    Next
End Sub

同样,这两个文件都返回除1之外的所有文件(随机)。

1 个答案:

答案 0 :(得分:4)

在这两个版本中,SourceFile = Dir()都高于ActiveCell.Value = SourceFile。在将文件名添加到列表之前,这会导致跳过列表中的下一个文件而导致错过第一个文件。

更正后的代码:

Dir()版本:

FilePath = "C:\Test\"

SourceFile = Dir(FilePath & "*.xls*")

Do While SourceFile <> ""   
   ActiveCell.Value = SourceFile
   ActiveCell.Offset(1, 0).Activate
   SourceFile = Dir()
Loop

FSO版本:

Set FileSystem = CreateObject("Scripting.FileSystemObject")
DoFolder FileSystem.GetFolder(FilePath)

Sub DoFolder(Folder)
    Dim SubFolder
    For Each SubFolder In Folder.SubFolders
        DoFolder SubFolder
    Next

    Dim File
    For Each File In Folder.Files
        If File.Name <> "" Then                
            ActiveCell.Value = File.Name
            ActiveCell.Offset(1, 0).Activate
        End If
    Next
End Sub