小编典典

使用VBA循环浏览文件夹中的文件?

all

在循环中,我需要:

  • 文件名,和
  • 文件格式化的日期。

我已经编写了以下代码,如果文件夹不超过 50 个文件,它可以正常工作,否则速度会非常慢(我需要它来处理具有 >10000
个文件的文件夹)。这段代码的唯一问题是查找操作file.name需要非常多的时间。

有效但 waaaaaay 太慢的代码(每 100 个文件 15 秒):

Sub LoopThroughFiles()
   Dim MyObj As Object, MySource As Object, file As Variant
   Set MySource = MyObj.GetFolder("c:\testfolder\")
   For Each file In MySource.Files
      If InStr(file.name, "test") > 0 Then
         MsgBox "found"
         Exit Sub
      End If
   Next file
End Sub

问题解决了:

  1. 我的问题已通过以下解决方案Dir以特定方式解决(15000 个文件为 20 秒)并使用命令检查时间戳FileDateTime
  2. 考虑到另一个答案,从 20 秒以下缩短到 1 秒以下。

阅读 66

收藏
2022-05-17

共1个答案

小编典典

这是我作为函数的解释:

'#######################################################################
'# LoopThroughFiles
'# Function to Loop through files in current directory and return filenames
'# Usage: LoopThroughFiles ActiveWorkbook.Path, "txt" 'inputDirectoryToScanForFile
'# https://stackoverflow.com/questions/10380312/loop-through-files-in-a-folder-using-vba
'#######################################################################
Function LoopThroughFiles(inputDirectoryToScanForFile, filenameCriteria) As String

    Dim StrFile As String
    'Debug.Print "in LoopThroughFiles. inputDirectoryToScanForFile: ", inputDirectoryToScanForFile

    StrFile = Dir(inputDirectoryToScanForFile & "\*" & filenameCriteria)
    Do While Len(StrFile) > 0
        Debug.Print StrFile
        StrFile = Dir

    Loop

End Function
2022-05-17