您的位置: 首页 > EXCEL技巧 > ExcelVBA >

用VBA获取文件夹中的文件列表

时间:2013-12-04 整理:docExcel.net

如果我们要在Excel中获取某个文件夹中所有的文件列表,可以通过下面的VBA代码来进行。代码运行后,首先弹出一个浏览文件夹对话框,然后新建一个工作簿,并在工作表的A至F列分别列出选定文件夹中的所有文件的文件名、文件大小、创建时间、修改时间、访问时间及完整路径。方法如下:

1.按Alt+F11,打开VBA编辑器,单击菜单“插入→模块”,将下面的代码粘贴到右侧的代码窗口中:

Sub GetFileList()
Dim strFolder As String
Dim varFileList As Variant
Dim FSO As Object, myFile As Object
Dim myResults As Variant
Dim l As Long
'显示打开文件夹对话框
With Application.FileDialog(msoFileDialogFolderPicker)
.Show
If .SelectedItems.Count = 0 Then Exit Sub '未选择文件夹
strFolder = .SelectedItems(1)
End With
'获取文件夹中的所有文件列表
varFileList = fcnGetFileList(strFolder)
If Not IsArray(varFileList) Then
MsgBox "未找到文件", vbInformation
Exit Sub
End If
'获取文件的详细信息,并放到数组中
ReDim myResults(0 To UBound(varFileList) + 1, 0 To 5)
myResults(0, 0) = "文件名"
myResults(0, 1) = "大小(字节)"
myResults(0, 2) = "创建时间"
myResults(0, 3) = "修改时间"
myResults(0, 4) = "访问时间"
myResults(0, 5) = "完整路径"
Set FSO = CreateObject("Scripting.FileSystemObject")
For l = 0 To UBound(varFileList)
Set myFile = FSO.GetFile(strFolder & "\" & CStr(varFileList(l)))
myResults(l + 1, 0) = CStr(varFileList(l))
myResults(l + 1, 1) = myFile.Size
myResults(l + 1, 2) = myFile.DateCreated
myResults(l + 1, 3) = myFile.DateLastModified
myResults(l + 1, 4) = myFile.DateLastAccessed
myResults(l + 1, 5) = myFile.Path
Next l
fcnDumpToWorksheet myResults
Set myFile = Nothing
Set FSO = Nothing
End Sub

Private Function fcnGetFileList(ByVal strPath As String, Optional strFilter As String) As Variant
' 将文件列表放到数组
Dim f As String
Dim i As Integer
Dim FileList() As String
If strFilter = "" Then strFilter = "*.*"
Select Case Right(strPath, 1)
Case "\", "/"
strPath = Left(strPath, Len(strPath) - 1)
End Select
ReDim Preserve FileList(0)
f = Dir(strPath & "\" & strFilter)
Do While Len(f) > 0
ReDim Preserve FileList(i) As String
FileList(i) = f
i = i + 1
f = Dir()
Loop
If FileList(0) <> Empty Then
fcnGetFileList = FileList
Else
fcnGetFileList = False
End If
End Function
Private Sub fcnDumpToWorksheet(varData As Variant, Optional mySh As Worksheet)
Dim iSheetsInNew As Integer
Dim sh As Worksheet, wb As Workbook
Dim myColumnHeaders() As String
Dim l As Long, NoOfRows As Long
If mySh Is Nothing Then
'新建一个工作簿
iSheetsInNew = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
Set wb = Application.Workbooks.Add
Application.SheetsInNewWorkbook = iSheetsInNew
Set sh = wb.Sheets(1)
Else
Set mySh = sh
End If
With sh
Range(.Cells(1, 1), .Cells(UBound(varData, 1) + 1, UBound(varData, 2) + 1)) = varData
.UsedRange.Columns.AutoFit
End With
Set sh = Nothing
Set wb = Nothing
End Sub

2.关闭VBA编辑器,回到Excel工作表中,按Alt+F8,打开“宏”对话框,选择“GetFileList”,单击“运行”按钮。

用VBA获取文件夹中的文件列表 问题:用VBA获取文件夹中的文件列表
回答:如果我们要在Excel中获取某个文件夹中所有的文件列表,可以通过下面的VBA代码来进行。代码运行后,首先弹出一个浏览文件夹对话框,然后新建一个工作簿,并在工作表的A至F列分别列出选定文件夹中的所有文件文件名、文...
在VBA中获取浏览文件夹对话框 问题:在VBA中获取浏览文件夹对话框
回答:...ilename方法来调用打开文件对话框,但Excel却没有提供浏览文件夹的方法。我们可以用下面的两种方法来调用浏览文件夹对话框。 方法一:用Windows API 函数,在标准模块中自定义一个函数BrowseFolderA,然后在过程中调用: Private Con...
《EXCEL VBA实战精炼 》随书光盘 问题:《EXCEL VBA实战精炼 》随书光盘
回答:...页标题#e# 122 获取指定命据在数组中呈现的 197 操纵文件夹 ·版本:1版 243 将电子表格数据输出到PowerPoint演示稿 21 模仿手工选定单位格中的部门内容 471MB 202 利用FileSystemObject工具 265 利用“当地窗口” 《E...
《Excel VBA实战精炼》 问题:《Excel VBA实战精炼》
回答:...xcel Home 60 快速选择任意事情表中的区域 97 193 判定文件文件夹是否存在 312 1 录制宏并获取有效的代
Excel2010基础教程:快速提高Excel效率的十个技巧 问题:Excel2010基础教程:快速提高Excel效率的十个技巧
回答:...电脑”打开C盘的Windows目录,然后进入“启动”文件夹,该文件路径是“开始菜单——>所有程序——>启动文件夹”。打开此文件夹后,这时打开Excel所在的文件夹,用鼠标将Excel图标拖到“启动...
『Office高级技巧』批量更新Office 2003 问题:『Office高级技巧』批量更新Office 2003
回答:...绝招:首先将下载到的Office 2003更新程序集中存放到某一文件夹(如“UPDATE”),然后运行WinRAR打开这个文件夹,使其中的所有文件显示在WinRAR窗口中。由于安装更新程序的正确顺序是“先旧后新”,所以应当单击Win...
相关推荐: