【问题标题】:Strange files indexes when using "For Each"使用“For Each”时的奇怪文件索引
【发布时间】:2016-10-07 12:28:41
【问题描述】:

我正在使用“For Each”语句浏览文件夹中的所有文件,提取它们的名称和一些内容并将它们放在一些表中。我面临的唯一问题是文件是按随机顺序处理的。

文件夹中的文件具有以下名称(对应于它们被添加到文件夹中的时间): 203909_20160910_1149.csv 203909_20160910_1739.csv 203909_20160911_1259.csv

但是“For Each”命令以奇怪的顺序处理它们: 第一个 203909_20160910_1739.csv 然后 203909_20160911_1259.csv 最后203909_20160910_1149.csv

到目前为止我看到的所有教程都说“For Each”总是使用固定的文件顺序(“从头到尾”),我无法更改它。所以我想弄清楚如果不是按名称而不是按日期索引文件是如何索引的?我可以设置任何属性来强制 A->Z 序列吗?

【问题讨论】:

  • 你是用Scripting.FileSystemObject还是其他方法?
  • @Comintern :是的,我使用 Scripting.FileSystemObject

标签: vba excel foreach


【解决方案1】:

您可以使用下面的代码,感谢@Frédéric Hamidi 来自问题:

Does Dir() make any guarantee on the order of files returned?

Dim allFiles As Variant
allFiles = GetFileList(MyDir & "wp*.xls")
If IsArray(allFiles) Then
    Call QuickSort(allFiles, LBound(allFiles), UBound(allFiles))
End If

Dim x As Integer
Dim lstFile As String
x = 1

' still need to loop through results to get lastFile
While lstFile <> LastFileName 
    lstFile = allFiles(x)
    x = x + 1
Wend

For i = x To UBound(allFiles)
    MyFileName = allFiles(i)
    Cells(LastRow + 1, 1) = MyFileName
    LastRow = LastRow + 1
Next i

【讨论】:

  • 感谢您的回答。我希望文件的排序方式有某种逻辑。但据我现在所见,我不能使用 ForEach :(
猜你喜欢
  • 2019-04-30
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2014-12-25
  • 2019-07-01
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多