前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ExcelVBA-选择文件夹获取文件列表

ExcelVBA-选择文件夹获取文件列表

原创
作者头像
哆哆Excel
修改2023-04-27 08:27:40
1.3K0
修改2023-04-27 08:27:40
举报
文章被收录于专栏:哆哆Excel

ExcelVBA-选择文件夹获取文件列表

前言:

一般情况下我们程序运行的文件操作顺序如下:

1.打开对话框取得文件夹路径

2.获得文件夹中的所有子文件夹

3.取得文件列表(分为不含子文件夹,含子文件夹两种情况)

今天学习第一种情况 : 取得文件列表(不含子文件夹)

近期我们学习了

start===========

ExcelVBA-打开对话框取得文件夹路径2种方法

ExcelVBA文件操作-获得文件夹中的所有子文件夹

end===========

今天我们要学习

【选择文件夹获取文件列表】

注意标题,有顺序的哦:1.先打开对话框==2.选择文件夹==3.获取文件列表

1-2两步可用我们的自定义函数

'打开对话框,选择,取得文件夹路径,返回string Function SelectGetFolder()     '选择单一文件     With Application.FileDialog(msoFileDialogFolderPicker)         If .Show = -1 Then         'FileDialog 对象的 Show 方法显示对话框,并且返回 -1(如果您按 OK)和 0(如果您按 Cancel)。 '            MsgBox "您选择的文件夹是:" & .SelectedItems(1)          SelectGetFolder = .SelectedItems(1)          Else          SelectGetFolder = "没有选择"         End If     End With End Function

进行文件夹后,接下来我们要读取文件列表(不包含子文件夹)

【知识点】

(1)Scripting.FileSystemObject得到一个FileSystemObject对象

(2)FileSystemObject对象取得它的子对象Folder

set f=fs. GetFolder进入文件夹

(3)取得子对象Folder中的Files集合

Set fc=f.Files

(4)再循环出文件列表

===========官方例子=========

Sub ShowFolderList(folderspec)

Dim fs, f, f1, fc, s

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFolder(folderspec)

Set fc = f.Files

For Each f1 in fc

s = s & f1.name

s = s & vbCrLf

Next

MsgBox s

End Sub

===============================

我们可以由此写成一个函数

'输入文件夹,返回文件名列表(不包含子文件夹) Function GetFolderFiles(folderspec As String)     Dim sfso As Object, sfld, sff, sffs     Dim temparr, n As Long     Set sfso = CreateObject("Scripting.FileSystemObject")     Set sfld = sfso.GetFolder(folderspec)     Set sffs = sfld.Files     ReDim temparr(1 To 1)     For Each sff In sffs         n = n + 1         If n > UBound(temparr) Then ReDim Preserve temparr(1 To n)         temparr(n) = sff.Path     Next     GetFolderFiles = temparr End Function

【代码】

Sub yhd_ExcelVBA_选择文件夹获取文件列表()

Dim FilePath As String

Dim arr()

Range("A2").Resize(10000, 1) = ""

FilePath = SelectGetFolder()

If FilePath = "" Then MsgBox "没选择,退了": Exit Sub

arr = GetFolderFiles(FilePath)

t = UBound(arr)

Range("A2").Resize(UBound(arr), 1) = Application.Transpose(arr)

End Sub

'输入文件夹,返回文件名列表(不包含子文件夹)

Function GetFolderFiles(folderspec As String)

Dim sfso As Object, sfld, sff, sffs

Dim temparr, n As Long

Set sfso = CreateObject("Scripting.FileSystemObject")

Set sfld = sfso.GetFolder(folderspec)

Set sffs = sfld.Files

ReDim temparr(1 To 1)

For Each sff In sffs

n = n + 1

If n > UBound(temparr) Then ReDim Preserve temparr(1 To n)

temparr(n) = sff.Path

Next

GetFolderFiles = temparr

End Function

'打开对话框,选择,取得文件夹路径,返回string

Function SelectGetFolder()

'选择单一文件

With Application.FileDialog(msoFileDialogFolderPicker)

.InitialFileName = ThisWorkbook.Path

If .Show = -1 Then

'FileDialog 对象的 Show 方法显示对话框,并且返回 -1(如果您按 OK)和 0(如果您按 Cancel)。

' MsgBox "您选择的文件夹是:" & .SelectedItems(1)

SelectGetFolder = .SelectedItems(1)

Else

SelectGetFolder = ""

End If

End With

End Function

【效果】

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 今天学习第一种情况 : 取得文件列表(不含子文件夹)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档