首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ExcelVBA文件操作-获得文件夹中的所有子文件夹

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

作者头像
哆哆Excel
发布2023-09-09 10:45:22
发布2023-09-09 10:45:22
2.2K00
代码可运行
举报
文章被收录于专栏:哆哆Excel哆哆Excel
运行总次数:0
代码可运行

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

上一期,学习了

今天我们来学习如果取得文件夹中的子文件夹路径

如图

在我们可以先用上一节选择取得【test目录】

再读取【1目录、2目录、3目录】再读取……

上一期的程序

代码语言:javascript
代码运行次数:0
运行
复制
Sub FileDialog_sample1()
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ThisWorkbook.Path
.Title = "选择文件夹"
If .Show = True Then
Range("B1") = .SelectedItems(1) & "\"
Else
MsgBox "你选择了“取消”"
End If
End With
End Sub

我们可以把它写成一个函数

代码语言:javascript
代码运行次数:0
运行
复制
'打开对话框,选择,取得文件夹路径,返回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

用法是:Path= SelectGetFolder() 可以啦

【知识点】

FileSystemObject 对象是这样创建的Set fs = CreateObject("Scripting.FileSystemObject")返回一个对象 对象中有一个方法:GetFolder方法可返回fs对象中的子对象:Folder 对象。 Folder对象中有一个属性是: SubFolders可返回文件夹中的子文件夹例如:Sub ShowFolderList(folderspec) Dim fs, f, f1, fc, s Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder(folderspec) Set fc = f.SubFolders For Each f1 in fc s = s & f1.name s = s & vbCrLf Next MsgBox sEnd Sub

因此我们可以利用以上的知识点进行设计一个方法用于以上的要求的方法或者函数

函数如下

代码语言:javascript
代码运行次数:0
运行
复制
Function GetAllPath(sPath As String)
    Dim aRes, sarr, sDic, sFso, F, Mat
    Dim FileName$, n&, k&
    On Error Resume Next
    Set sDic = CreateObject("Scripting.Dictionary")
    Set sFso = CreateObject("Scripting.FileSystemObject")
    sDic(sPath) = ""
    Do
        sarr = sDic.keys
        For Each F In sFso.GetFolder(sarr(n)).SubFolders
            sDic(F.Path) = ""
        Next
        n = n + 1
    Loop Until sDic.Count = n
    GetAllPath = sDic.keys
End Function

【主程序如下】

代码语言:javascript
代码运行次数:0
运行
复制
Sub yhd_ExcelVBA获得文件夹中的所有子文件夹()
    Dim myPath As String
    Dim arr
    myPath = SelectGetFolder()
    arr = GetAllPath(myPath)
    t = UBound(arr)
'    MsgBox t
    Range("a1").Resize(t, 1) = Application.Transpose(arr)
End Sub

【效果】

===今天学习到此===

转载是一种动力 分享是一种美德

-----------------近期学习笔记----------------------

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

2.Excel VBA取白色单元格内容黄色的单元格的Address

3.ExcelVBA随机生成不重复的N个N位数文本

4.ExcelVBA字典的输出

-------------------------------------------------

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

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

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

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

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