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

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

作者头像
哆哆Excel
发布2023-09-09 10:45:47
5300
发布2023-09-09 10:45:47
举报
文章被收录于专栏:哆哆Excel

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

近期学习了

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

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

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

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

今天要学习

注意标题,有顺序的哦:

1.先打开对话框==2.选择文件夹==3.获取文件列表

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

'打开对话框,选择,取得文件夹路径,返回stringFunction 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 WithEnd 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 sEnd 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 = temparrEnd Function

结合两个函数,再设计出主程序,就可以完成啦

【代码】

代码语言:javascript
复制
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

【效果】

  1. ExcelVBA文件操作-获得文件夹中的所有子文件夹
  2. ExcelVBA-打开对话框取得文件夹路径2种方法
  3. Excel VBA取白色单元格内容黄色的单元格的Address
  4. ExcelVBA随机生成不重复的N个N位数文本
  5. ExcelVBA字典的输出
  6. ExcelVBA一维数组的读取、输出、合并
  7. ExcelVBA-自定义函数MultiConTosum用于多条件求和

====end====

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆Excel 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档