首页 > 解决方案 > 对于每个反向使用 FileSystemObject

问题描述

我需要反转这个循环:

我试过使用“Step -1”,但没有奏效。我想这是因为这是一种 FSO 循环方法。

Set d = fso.GetFolder("address")

For Each File In d.files

    If (Int(Mid(File.Name, 30, 5)) = Int(nfprocurada)) Then
        ActiveWorkbook.FollowHyperlink Address:=File.Path, ExtraInfo:=False
        Exit Sub
    End If
    
Next

标签: vbaloopsforeachfilesystemobject

解决方案


For Each循环不接受步长或符号的任何更改。因此,如果要反转方向,则需要将循环类型更改为基于索引的循环,例如For counter = start to end. 由于Files 集合不接受索引作为参数,因此您需要先将每个文件复制到数组中,然后才能使用索引遍历文件。

尝试这个:

Set d = FSO.getfolder("address")

Dim AllFiles() As Object, FileCount As Integer

For Each File In d.Files
    ReDim Preserve AllFiles(FileCount)
    Set AllFiles(UBound(AllFiles)) = File
    FileCount = FileCount + 1
Next File

Dim i as Long
For i = UBound(AllFiles) To LBound(AllFiles) Step -1
    If (Int(Mid(File.Name, 30, 5)) = Int(nfprocurada)) Then
        ActiveWorkbook.FollowHyperlink Address:=AllFiles(i).Path, ExtraInfo:=False
        Exit Sub
    End If
Next i

推荐阅读