DIR не распознает подстановочный знак "*" - PullRequest
1 голос
/ 17 апреля 2019

Следующий код не находит файл: xTempTmtl = "Z: \ 20.0 Глобальное хранилище \ 20.1 Пакеты разработки *" & xNewName

где xNewName = "SLR-D & C-MI0-000-TRS-007199.Pdf"

но

xTempFol = Dir ("Z: \ 20.0 Глобальное хранилище \ 20.1 Пакеты разработки \ DP01.1 Остановки - зона C (север) \ 02. Transmittals \" & xNewName) находит файл.

Проблема в том, что файл xNewName может находиться в любой из 80 папок (Dp01.1 ..., DP01.2 ....) и т. Д., А затем в \ 02. Пересылка, \

Если я поставлю \ после *, я получу ошибку с неверным именем файла.

Почему подстановочный знак "*" не распознается?

Это происходит на двух отдельных компьютерах: на одном работает EXCEL2010 на Windows и ПК, а на другом - EXCEL365 на ноутбуке с Windows10.

1 Ответ

0 голосов
/ 17 апреля 2019

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

Вам нужно будет сделать рекурсивное задание параметра Атрибуты Dir () для vbDirectory, чтобы возвращать имена подпапок, а затем искать каждую подпапку.

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

Function FindFile(ByVal folderName As String, ByVal FileName As String, Optional ByRef FoundFile As String) As String
    Dim search As String
    Dim dirList As New Collection

    If Not Right(folderName, 1) = "\" Then folderName = folderName & "\"
    search = Dir(folderName & "\*", vbDirectory)
    While Len(search) > 0
        If Not search = "." And Not search = ".." Then
            If GetAttr(folderName & search) = 16 Then
                dirList.Add folderName & search
            Else                 
                If LCase(search) = LCase(FileName) Then
                    FoundFile = folderName & FileName
                    FindFile = FoundFile
                    Exit Function
                End If
            End If

        End If
        search = Dir()
    Wend

    Dim fld
    For Each fld In dirList
        If Len(FoundFile) > 0 Then
            FindFile = FoundFile
            Exit Function
        Else
            FindFile = FindFile(CStr(fld), FileName, FoundFile)
        End If
    Next

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