Открытие каждого файла в цикле

Я пишу подпрограмму, которая должна извлечь текст из файлов в каталоге. Процедура ниже. Это работает до тех пор, пока в каталоге есть только один файл. Когда их больше одного, это говорит мне Set intFSO = intFSO.OpenTextFile(filePath, 1) строка ниже.

Я предполагаю, что есть что-то, что мне нужно сделать, чтобы сбросить для следующего файла, но я не могу понять, что это такое. Какие-нибудь советы?

Sub ExtractEDI(folPath)
  Dim sName, fil
  Dim intFSO
  Dim filePath

  Set intFSO = CreateObject("Scripting.FileSystemObject")

  For Each fil In fso.GetFolder(folPath).Files
    filePath = folpath & "\" & fil.Name
    Set intFSO = intFSO.OpenTextFile(filePath, 1)

    'will process file here

    intFSO.Close
  Next
  Set intFSO = Nothing
End Sub

Это еще не все в этом сценарии. Вышеприведенная процедура вызывается рекурсивно для обхода подкаталогов. Все это работает нормально.

1 ответ

Решение
Set intFSO = intFSO.OpenTextFile(filePath, 1)
'   ^^^^^^   ^^^^^^

Не заменяйте FileSystemObject экземпляр с дескриптором файла, если вы собираетесь использовать его снова в следующей итерации. Используйте другую переменную для файла. И отбросить весь путь конкатенации / OpenTextFile притон. Вы можете открыть файл прямо из File объект.

Это все, что вам нужно (при условии fso это глобальный FileSystemObject пример):

Sub ExtractEDI(folPath)
  For Each fil In fso.GetFolder(folPath).Files
    Set f = fil.OpenAsTextStream

    'will process file here

    f.Close
  Next
End Sub
Другие вопросы по тегам