在 VBA 中分组对象

xLokos

我试图将两个对象分组到一个列表中,以便在一个“for each”循环中进行迭代。在 VBA/VBscript 中甚至可能吗?

例如,我想根据上一个 mod 从特定位置删除所有文件文件夹。日期,我不想创建两个循环。

Set oFolder = fso.GetFolder(FolderPath)
Set oFileList = oFolder.Files
Set oFolderList = oFolder.SubFolders
Set oFullList = oFileList + oFolderList (???)

For Each oFile In oFullList 
    lastModDate = oFile.DateLastModified
    If (lastModDate < PurgeDate) Then
        oFile.Delete True
    End If
Next
安斯加·威彻斯

FileSystemObject仅靠方法是不可能的即使您从 的元素创建了单个数组或 ArrayListoFolder.Files并且oFolder.SubFolders您需要两个单独的循环来执行此操作。

您可以使用该Shell.Application对象来枚举文件夹内容,但生成的对象没有 delete 方法,因此您仍然需要FileSystemObject用于删除文件/文件夹的对象和方法:

path = "C:\some\folder"

Set app = CreateObject("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")

For Each it In app.NameSpace(path).Items
    If it.IsFolder Then
        fso.GetFolder(it.Path).Delete
    Else
        fso.GetFile(it.Path).Delete
    End If
Next

但是,FileSystemObject仅使用方法和循环两次相比,我没有看到这种方法的显着优势如果您担心重复代码,只需将循环包装在一个过程中,然后为子文件夹和文件调用该过程。

path = "C:\some\folder"

Sub DeleteItems(list)
    For Each it In list
        it.Delete
    Next
End Sub

Set fso = CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder(path)

DeleteItems oFolder.Files
DeleteItems oFolder.SubFolders

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章