VBA Excel在一组文件夹中查找文件(部分文件名)

时间:2018-05-31 17:54:20

标签: excel-vba windows-7 excel-2010 vba excel

早上好/下午/晚上,

我想为下面的代码提供一些语法帮助,或者指出我做得更好的方向,因为有一些事情不太正确。

我最初在文件夹宏中有一个列表文件,我已经调整了它以尝试做我想要的。

所以在这里,我有一个干文件名列表(strDesignDocs),我有一个顶级文件夹,我将找到这些文件的版本(combobox21.value)。

我将顶部文件夹路径和部分文件名称提供给ListMyFiles函数,希望仅出于测试目的,它将为我提供已找到的完整文件名的消息以及完整的文件夹路径。它确实在函数中打印消息,但希望它将它传递回调用函数,最终用其它方法执行。

使用以下代码:

  1. 一旦找到文件,似乎没有退出该功能,(它似乎只是移动到下一个文件夹,仍然在寻找同一个文件而不会敲出整个功能)
  2. 它不会将值返回给调用函数,可能是因为它继续执行我仍然无法修复的退出函数。
  3. 它似乎永远不会返回到调用函数,但仍然会尝试处理所有文件,所以只能假设它。但
  4. TYIA

    安迪

    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
    

0 个答案:

没有答案