使用文件夹,Excel中的文件名填充单元格

时间:2016-05-06 16:06:08

标签: excel vba excel-vba excel-formula

我正在使用Excel 2010

我想将具有特定文件夹位置的文件列表的文件名插入Excel单元格。

即。如果文件路径是:C:\ Users \ NAME \ Documents \ FolderPath

在FolderPath中我有几个特定类型的文件(File001.DAT ... File00N.DAT)

如何使用文件名* .DAT填充特定列(并从某一行开始)中的所有单元格?

提前致谢。

更新:我使用命令提示符将文件名写入文本文件。 在命令提示符下,我导航到相关目录:

CD /目录/ Of / FIles

然后我将文件写入文本文件,如下所示:

dir / b * .png> FIles.txt

旗帜/ b仅给我姓名。然后我复制了所有名称并将它们粘贴到Excel中。它不像布鲁斯韦恩的解决方案那样强大,但目前它完成了我所需要的工作。

4 个答案:

答案 0 :(得分:2)

只需通过标准输出流从DIR命令检索输出。比Dir$()快得多,不需要任何循环!:

Sub Foo()

Dim strFolderName   As String
Dim strFileType     As String
Dim pasteRange      As Range
Dim returnVals      As Variant

'// set parameters, change as required
strFolderName = "C:\Users\NAME\Documents\FolderPath\"
strFileType = "*.DAT"
Set pasteRange = Range("C5")

'// retrieve output of DIR command from CMD.exe
returnVals = Filter(Split(CreateObject("WScript.Shell").Exec("CMD /C DIR """ & strFolderName & _
                strFileType & """ /B /A:-D").StdOut.ReadAll, vbCrLf), ".")

'// Display results in chosen column
pasteRange.Resize(UBound(returnVals) + 1, 1).value = WorksheetFunction.Transpose(returnVals)

End Sub

答案 1 :(得分:1)

一种快速而简单的方法是使用一个只检查目录中每个文件扩展名的循环:

Sub t()
Dim MyObj As Object, MySource As Object, file As Variant
Dim i&

file = Dir("C:\Users\me\Desktop\")
i = 1
While (file <> "")
    Debug.Print Right(file, 3)
      If Right(file, 3) = "dat" Then
         Cells(i, 1).Value = "found " & file
         i = i + 1
      End If
     file = Dir
  Wend
End Sub

根据需要调整Cells(i,1)

答案 2 :(得分:1)

另一种方式 - 虽然EnumerateFiles功能与BruceWaynes基本相同。

Sub PopulateSheet()

    Dim lRow As Long
    Dim colFiles As Collection
    Dim vFile As Variant

    With ThisWorkbook.Worksheets("Sheet1")

        'This will find the last row in column A, but
        'can use a static number or any other method to return a row number.
        lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        Set colFiles = New Collection

        'Remember to put the final \ in the file path.
        EnumerateFiles "C:\Users\NAME\Documents\FolderPath\", _
            "*.DAT", colFiles

        For Each vFile In colFiles
            .Cells(lRow, 1) = Mid(vFile, InStrRev(vFile, "\") + 1)
            lRow = lRow + 1
        Next vFile

    End With

End Sub

'//Places all file names with FileSpec extension into a collection.
Sub EnumerateFiles(ByVal sDirectory As String, _
    ByVal sFileSpec As String, _
    ByRef cCollection As Collection)

    Dim sTemp As String

    sTemp = Dir$(sDirectory & sFileSpec)
    Do While Len(sTemp) > 0
        cCollection.Add sDirectory & sTemp
        sTemp = Dir$
    Loop
End Sub

答案 3 :(得分:0)

这也可以在没有VBA的情况下完成,尽管您确实需要启用了宏的工作簿:

  1. 创建一个新的Excel电子表格并保存为启用宏(* .xlsm)
  2. 在“公式”选项卡上,单击“定义名称”以定义新名称。
  3. 将名称:设置为“ MyFiles”,并引用:至=FILES(".\*.xls?")
  4. 从单元格A1开始,输入一列从1到20(或如此)的数字
  5. 在单元格B1中输入此=IFERROR(INDEX(MyFiles,A1), "")
  6. 将单元格B1复制到数字列表旁边的列中,公式中的引用应自动更新

您应该获得前20个左右文件的列表。

FILES函数的参数只是一个标准的DOS通配符模式,因此您可能希望使用C:\Users\NAME\Documents\FolderPath\*.DAT而不是.\*.xls?