所有寻找此问题解决方案的搜索尝试都与我正在寻找的相反。我不需要从文件夹中的搜索中排除文件,而是将它们全部包含在内。
我的问题是我的搜索返回文件夹中的所有文件,除了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之外的所有文件(随机)。
答案 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