Группировка объектов в VBA - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь сгруппировать два объекта в один список для повторения в одном цикле «для каждого».Возможно ли это даже в VBA / VBscript?

Например, я хотел бы удалить все файлы и папки из определенного места на основе последнего мода.дата, и я не хочу создавать две петли.

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

1 Ответ

0 голосов
/ 14 ноября 2018

То, что вы спрашиваете, невозможно только с помощью FileSystemObject методов. Даже если вы создали один массив или ArrayList из элементов oFolder.Files и oFolder.SubFolders, вам понадобятся два отдельных цикла для этого.

Вы можете использовать объект Shell.Application для перечисления содержимого папки, но у получающихся объектов нет метода удаления, поэтому вам все равно понадобятся 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...