使用" For Each"

时间:2016-10-07 12:28:41

标签: vba excel-vba foreach excel

我正在使用" 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序列吗?

1 个答案:

答案 0 :(得分:0)

你可以使用下面的代码,来自@FrédéricHamidi来自问题:

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