VBA Excel находит файл (частичное имя файла) в наборе папок - PullRequest
0 голосов
/ 31 мая 2018

Доброе утро / День / Вечер,

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

У меня изначально был список файлов в макросе папки, и я адаптировал его, чтобы попытаться сделать то, что я хочу.

Итак, у меня есть список имен стволовых файлов (strDesignDocs) и у меня есть верхняя папка, в которой я найду версию этих файлов (combobox21.value).

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

С приведенным ниже кодом:

  1. кажется, что он не выходит из функции после того, как файл найден (просто кажется, что он перемещается в следующую папку, по-прежнему ищатот же файл, не выходящий за пределы всей функции)
  2. Он не возвращает значение обратно вызывающей функции, возможно потому, что он продолжает функцию выхода, которую я до сих пор не могу исправить.
  3. Кажется, он никогда не возвращается к вызывающей функции, но все еще пытается обработать все файлы, поэтому можно только предположить, что он это делает.

TYIA

Andy

Dim iRow
Dim Counter
Dim myFile As Scripting.File
Sub ListFiles()
    Dim WS1, WS2 As Worksheet
    Dim strDesignDocs As Variant
    On Error Resume Next

    Set WS1 = Sheets("Data")
    Set WS2 = Sheets("Clean_Up")

    With WS1
        Set strDesignDocs = .Range(.Cells(15, 1), .Cells(27, 1))
    End With

    For Each cell In strDesignDocs
        strReturnValue = ListMyFiles(ComboBox21.Value, True, cell.Value)
        Debug.Print strReturnValue
    Next
End Sub

Function ListMyFiles(mySourcePath, IncludeSubfolders, sFileName)
    Dim MyObject As Scripting.FileSystemObject

    On Error Resume Next
    Set MyObject = New Scripting.FileSystemObject
    Set mySource = MyObject.GetFolder(mySourcePath)

    For Each myFile In mySource.Files
        If InStr(1, myFile.Name, sFileName) <> 0 Then
            strReport = myFile.Name & " in " & myFile.Path
            ListMyFiles = strReport
            'Debug.Print strReport
            Exit Function
        End If

    Next
    If IncludeSubfolders Then
        For Each mySubFolder In mySource.SubFolders
            Call ListMyFiles(mySubFolder.Path, True, sFileName)
        Next
    End If
End Function
...