VBA编程-获取文件夹下面的文档名称

本文介绍了一段VBA代码,该代码能够遍历指定文件夹及其子文件夹中的所有Office文档(如Excel)和PDF文件,并将这些文件的名称记录到Excel工作表Sheet1中。通过使用FileSystemObject对象,代码实现了文件类型过滤和递归处理。
Sub GetDocNames()
    Dim folderPath As String
    Dim fso As Object
    Dim folder As Object
    Dim subFolder As Object
    Dim file As Object
    Dim ws As Worksheet
    Dim row As Long
    
    ' 弹出窗口选择文件夹
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then
            folderPath = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    
    ' 创建FileSystemObject对象
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 获取文件夹对象
    Set folder = fso.GetFolder(folderPath)
    
    ' 设置工作表和起始行
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为你想要保存文档名称的工作表
    row = 1
    
    ' 遍历文件夹中的文件
    For Each file In folder.Files
        ' 如果是OFFICE文档或PDF文档
        If LCase(fso.GetExtensionName(file.Name)) Like "xls*" Or LCase(fso.GetExtensionName(file.Name)) = "pdf" Then
            ' 在工作表中保存文档名称
            ws.Cells(row, 1).Value = file.Name
            row = row + 1
        End If
    Next file
    
    ' 遍历子文件夹
    For Each subFolder In folder.Subfolders
        ' 递归调用自身处理子文件夹
        ProcessFolder subFolder, ws, row
    Next subFolder
    
    ' 释放对象
    Set subFolder = Nothing
    Set folder = Nothing
    Set fso = Nothing
End Sub

Sub ProcessFolder(folder As Object, ws As Worksheet, ByRef row As Long)
    Dim subFolder As Object
    Dim file As Object
    Dim fso As Object
    
    ' 创建FileSystemObject对象
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 遍历文件夹中的文件
    For Each file In folder.Files
        ' 如果是OFFICE文档或PDF文档
        If LCase(fso.GetExtensionName(file.Name)) Like "xls*" Or LCase(fso.GetExtensionName(file.Name)) = "pdf" Then
            ' 在工作表中保存文档名称
            ws.Cells(row, 1).Value = file.Name
            row = row + 1
        End If
    Next file
    
    ' 遍历子文件夹
    For Each subFolder In folder.Subfolders
        ' 递归调用自身处理子文件夹
        ProcessFolder subFolder, ws, row
    Next subFolder
    
    ' 释放对象
    Set subFolder = Nothing
    Set file = Nothing
    Set fso = Nothing
End Sub
 

此代码可以识别文件夹里面的文件夹一直到最后

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值