Мне нужна помощь в замене Application.Find новой функцией для этого старого макроса - PullRequest
0 голосов
/ 31 мая 2019

У меня есть старый макрос 2003 xls, который извлекает данные из всех файлов дампов Excel в подпапке типа «Входящие».Файлы генерируются ежедневно, и, насколько я могу судить по этому старому коду, Application.Find просматривает все файлы, которые он может найти в этой папке входящих сообщений, а затем просматривает их один за другим, чтобы отсортировать данные и правильно разместить их в главном.document.

Проблема, конечно, в том, что Application.Find используется и больше не существует в Excel, что требует использования старой версии Excel для выполнения этого макроса.Больно запускать старую версию для импорта данных, а затем новую версию для всех остальных нужд, поэтому я надеялся, что смогу получить некоторую помощь, чтобы заменить этот старый код новой функцией, которая выполняет ту же роль.

Я искал здесь и в других местах, чтобы функции людей могли найти x количество файлов в заданном месте и просматривать их один за другим, но я не настолько хорош, чтобы пытаться интегрировать эти более современные решения сэтот старый макрос, так как он уже имеет структуру для зацикливания, пока все результаты Application.Find не будут завершены.

Я попробовал подход Dir, но безуспешно, и мне не удалось получить filecount / arrayвсе происходит так, что он может просто работать через все, что находит в этой подпапке.

With Application.FileSearch
    .NewSearch
    .LookIn = inbox
    .SearchSubFolders = False
    .FileType = msoFileTypeExcelWorkbooks
    If .Execute() > 0 Then
        Set basebook = ThisWorkbook
        For i = 1 To .FoundFiles.Count
            Set mybook = Workbooks.Open(.FoundFiles(i))

Ожидаемый результат состоит в том, что это может безвредно зацикливаться при выполнении, поскольку далее в коде после прохождения данных в открытомдокумент, он попросит Next я и буду продолжать, пока не кончится filэс.Однако, поскольку Application.Find больше не существует, он просто останавливается в этой точке с ожидаемым сообщением об ошибке, если я не запустил версию 2003 года.

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

1 Ответ

0 голосов
/ 31 мая 2019

Вот как я перебираю все файлы в папке:

Option Explicit
Sub Test()

    Dim FilePath As String, FileName As String
    Dim wb As Workbook

    FilePath = "Your Path"
    FileName = Dir(FilePath & "*.xls*")

    Do While FileName <> ""
        Set wb = Workbooks.Open(FilePath & FileName, UpdateLinks:=False, ReadOnly:=True)

        'Your Code

        FileName = Dir
    Loop


End Sub

В этом случае, как вы можете видеть, ищите любой файл, расширение которого содержит xls, так что ... xls, xlsx, xlsm, xlsb...

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

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