VBA не может перейти к следующему файлу в каталоге, вместо этого выбирая файл с именем ".." - PullRequest
0 голосов
/ 08 марта 2019

У меня небольшая проблема с функцией Loop для открытия файлов в каталоге. Найдите код ниже:

    'Build the complete folder path:
     strTargetFolder_Batch = "I:\PerfTeam"

     strTargetFolder_Batch = strTargetFolder_Batch & strMonthNo & " " & strMonthName & " " & strYear & "\" & "Attribution - Draft"

        If Right(strTargetFolder_Batch, 1) <> "\" Then
            strTargetFolder_Batch = strTargetFolder_Batch & "\"
        End If

        If Not CreateFolder(strTargetFolder_Batch) Then
            MsgBox "Unable to create the folder:" & vbCrLf & strTargetFolder_Batch, vbExclamation
        Else
        End If

        FolderPath = strTargetFolder_Batch

        'Sets Parameters to Open the file
        MyFolder = FolderPath 'location of files
        MyExtension = "*.xlsx*"
        MyFile = Dir(MyFolder & MyExtension)

        Do While MyFile <> "" 'will start LOOP until all files in MyFolder have been looped through

              Set oWbk = Workbooks.Open(MyFolder & "\" & MyFile)

               *Batch Run is a Boolean function*

              '*** 1. Calls Import Data Macro, which Imports the Data ***'
              Call Import_new_data(Batch_Run, oWbk)

              '*** 2. Calls Data Collector Macro, which Analyses the Data ***'
              Call Data_Collector(Batch_Run)

              '*** 3. Calls Report Production Macro, which Produces Report ***'
              Call Report_Production_Sub(Batch_Run)

        ContinueLoop:
        MyFile = Dir 

        '**^^ Here is where the Macro breaks after completing a full first iteration** !

        Loop

Что по сути делает макрос, он выбирает данные из открытого файла, закрывает файл и затем анализирует его, прежде чем создавать из него отчет. Затем он должен перейти ко второму файлу в папке и выполнить ту же операцию.

В то время как первый файл открывается и анализируется должным образом, возникает проблема при переходе ко второму файлу. Переменная MyFile на самом деле выбирает файл «Ghost» с именем «..», который затем, конечно, выдает ошибку, поскольку он не существует. Проведя некоторые исследования, которые я обнаружил, это может быть связано с путем к каталогу.

Любая помощь будет очень признательна!

1 Ответ

1 голос
/ 08 марта 2019

Вызов функции Dir с параметром запускает поиск подходящих файлов. Если в качестве второго параметра ничего не указано, он будет искать только обычные файлы (без каталогов, без скрытых файлов и т. Д.).

Любые последующие вызовы Dir (без параметра) продолжат последний поиск, инициированный Dir (с параметром).

.., который вы получаете в результате Dir в вашем цикле, - это не файл, это папка (папка up). Вы получите это только тогда, когда вы запустили Dir с опцией vbDirectory в качестве второго параметра. Поскольку этот параметр отсутствует в вашем коде, я бы настоятельно предположил, что в любом месте вашего кода (который не отображается) запускается новый Dir -поиск (который уничтожает результаты поиска предыдущего Dir -поиска).

Обновление : Если вам нужно проверить, существует ли папка, но не хотите уничтожать петлю Dir, вы можете использовать FileSystemObject. FileSystemObject полезен для нескольких вещей, касающихся файлов и папок.

if CreateObject("Scripting.FileSystemObject").FolderExists("<enter your path>") then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...