Как установить две разные переменные objFile? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть код, который проходит через каждый objFile в Folder объекте:

For Each objFile In objFolder.Files
    ' do something...
Next objFile

Теперь я хотел бы создать внутренний цикл For Each:

For Each objFile In objFolder.Files
    'do something...
    For Each objFile In AnotherFolder.Files
        'Do something else...
    Next objFile
Next objFile

Однако я могу объявить только один objFile на скрипт. Когда я пытаюсь запустить это, я получаю следующую ошибку:

Ошибка компиляции: для уже используемой управляющей переменной

указывает на линию For Each внутреннего цикла.


Обновление

Я попытался использовать две разные переменные со следующим кодом:

For Each objFile In objFolder.Files

    ' Read creation date of file
    Set f = objFSO.GetFile(objFile)
    s = f.DateLastModified

    Dim objFile2 As Object

    ExcelPath = "C:/..."
    For Each objFile2 In ExcelPath.Files
        If InStr(s, objFile2) Then
            objFSO.CopyFile objFile, strNewFolder & "\", True
        End If
    Next objFile2
Next objFile

но тогда я получаю ошибку во время выполнения:

Ошибка времени выполнения 424: требуется объект

снова указывает на линию For Each внутреннего цикла.

Как я могу решить эти проблемы?

1 Ответ

0 голосов
/ 09 мая 2018

Чтобы проверить, существуют ли файлы в одной папке в другой папке, вам не нужно сравнивать каждый файл в первой папке с каждым файлом во второй папке .Вы можете просто указать путь и проверить, существует ли файл, используя FileSystemObject.FileExists().

. Примерно так будет работать:

Dim oFile       As Object
Dim oFSO        As Object
Dim oFolder     As Object

Dim folderPath1 As String, folderPath2 As String
folderPath1 = "The\path\of\your\original\folder"
folderPath2 = "The\path\of\your\second\folder"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(folderPath1)

For Each oFile In oFolder.Files
    If oFSO.FileExists(folderPath2 & "\" & oFile.Name) Then
        ' File exists in the second folder
    End If
Next oFile

Редактировать: Еслипо какой-то причине вам нужно использовать вложенные циклы, вы можете адаптировать приведенный выше код к чему-то вроде этого:

Dim oFSO        As Object
Dim oFile       As Object
Dim oFolder     As Object
Dim oFile2      As Object
Dim oFolder2    As Object

Dim folderPath1 As String, folderPath2 As String
folderPath1 = "The\path\of\your\original\folder"
folderPath2 = "The\path\of\your\second\folder"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(folderPath1)
Set oFolder2 = oFSO.GetFolder(folderPath2)

For Each oFile In oFolder.Files
    For Each oFile2 In oFolder2.Files
        ' Use oFile.Name and oFile2.Name to do whatever you want.
    Next oFile2
Next oFile

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...