我正在使用Excel 2010
我想将具有特定文件夹位置的文件列表的文件名插入Excel单元格。
即。如果文件路径是:C:\ Users \ NAME \ Documents \ FolderPath
在FolderPath中我有几个特定类型的文件(File001.DAT ... File00N.DAT)
如何使用文件名* .DAT填充特定列(并从某一行开始)中的所有单元格?
提前致谢。
更新:我使用命令提示符将文件名写入文本文件。 在命令提示符下,我导航到相关目录:
CD /目录/ Of / FIles
然后我将文件写入文本文件,如下所示:
dir / b * .png> FIles.txt
旗帜/ b仅给我姓名。然后我复制了所有名称并将它们粘贴到Excel中。它不像布鲁斯韦恩的解决方案那样强大,但目前它完成了我所需要的工作。
答案 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的情况下完成,尽管您确实需要启用了宏的工作簿:
=FILES(".\*.xls?")
=IFERROR(INDEX(MyFiles,A1), "")
您应该获得前20个左右文件的列表。
FILES函数的参数只是一个标准的DOS通配符模式,因此您可能希望使用C:\Users\NAME\Documents\FolderPath\*.DAT
而不是.\*.xls?
。