相关疑难解决方法(0)

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

我想在Excel 2010中使用循环遍历目录的文件.

在循环中,我将需要

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

我编写了以下代码,如果该文件夹没有超过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
Run Code Online (Sandbox Code Playgroud)

问题解决了:

  1. 我的问题已通过以下解决方案Dir以特定方式(15000个文件为20秒)和使用该命令检查时间戳来解决FileDateTime.
  2. 考虑到下面的另一个答案,20秒减少到不到1秒.

excel vba excel-2010

224
推荐指数
5
解决办法
60万
查看次数

循环访问用户指定的根目录中的子文件夹和文件

我的循环脚本通过单个文件工作正常,但我现在需要它也查看/为多个目录.我被困了....

事情需要发生的事情:

  • 提示用户选择所需内容的根目录
  • 我需要脚本来查找该根目录中的任何文件夹
  • 如果脚本找到一个,它会打开第一个(所有文件夹,因此文件夹没有特定的搜索过滤器)
  • 打开后,我的脚本将遍历文件夹中的所有文件并执行它需要执行的操作
  • 它完成后关闭文件,关闭目录并移动到下一个,等等.
  • 循环直到所有文件夹都被打开/扫描

这就是我所拥有的,这是行不通的,我知道是错的:

MsgBox "Please choose the folder."
Application.DisplayAlerts = False
With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = "\\blah\test\"
    .AllowMultiSelect = False
    If .Show <> -1 Then MsgBox "No folder selected! Exiting script.": Exit Sub
    CSRootDir = .SelectedItems(1)
End With
folderPath = Dir(CSRootDir, "\*")

Do While Len(folderPath) > 0
    Debug.Print folderPath
    fileName = Dir(folderPath & "*.xls")
    If folderPath <> "False" Then
        Do While fileName <> ""
            Application.ScreenUpdating = False
            Set wbkCS = Workbooks.Open(folderPath & fileName)

            --file loop …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

11
推荐指数
2
解决办法
7万
查看次数

标签 统计

excel ×2

vba ×2

excel-2010 ×1

excel-vba ×1