实用VBA:6.一键批量提取文件名和存储路径

15 篇文章 3 订阅
13 篇文章 1 订阅

1.需求范例

工作中经常会遇到需要对大量文件进行检查、整理、筛选、处理的情况。所有操作的前提是先梳理出有多少文件需要处理,文件存储在什么位置,如果文件目录结构比较复杂,手工逐一打开文件夹进行人工检查是繁琐、低效而不可靠的。如果能够将文件存储路径和文件名提取到excel表格中,就可以直观地观察到文件存储的结构特点。

例如我需要将下面文件夹中的文件信息提取出来,进行后续的归类、检查。

2.基本思路

(1)定义一个文件系统对象,提取出存储路径和文件名信息。

(2)对子目录进行递归提取。

3.VBA实现

Dim wb As Workbook          '定义工作簿(文件)变量

Dim ws As Worksheet         '定义工作表变量

'定义函数,获取文件系统对象的路径和文件名信息,填入表格

'参数 pth 表示想要获取的文件和文件夹所在的根目录

Public Function get_folder_file(pth)

    '设置文件系统对象变量

    Set fso = CreateObject("Scripting.FileSystemObject").GetFolder(pth)

    '第一部分,遍历当前目录下所有文件对象,获取其存储路径和文件名

    For Each file In fso.Files

        '单元格行号变量,游标指向最后一行

        last_row = Range("a65536").End(xlUp).Row + 1

        '对文件名字符串进行分割,按扩展名筛选需要提取的文件

        If InStr(Split(file.Name, ".")(UBound(Split(file.Name, "."))), "xlsx") > 0 Then

            '将文件路径保存在A列单元格中

            Range("a" & last_row) = fso.path & "\"

            '文件名保存在B列单元格中

            Range("b" & last_row) = file.Name

            'ws.Hyperlinks.Add anchor:=ws.Cells(last_row, 2), Address:=fso.Path & "\" & file.Name

        End If

    Next

    

    '第二部分,对目标文件夹子目录中的文件对象进行递归提取信息

    For Each Folder In fso.SubFolders

        Call get_folder_file(Folder.path)

    Next

    

    '释放变量

    Set fso = Nothing

End Function

'主程序

Sub 获取文件名和存储路径()

    Dim path As String

    '设置工作簿为当前文件

    Set wb = Workbooks(1)

    '设置提取信息要保存的工作表名称

    Set ws = Worksheets("文件列表")

    '填入标题行

    ws.Cells(1, 1).Value = "目录"

    ws.Cells(1, 2).Value = "文件"

    '要提取文件的根目录

    path = "D:\Temp\test5\"

    '调用函数提取信息

    Call get_folder_file(path)

    '释放变量

    Set ws = Nothing

    Set wb = Nothing

    MsgBox "处理完成。"

End Sub

4.实现效果

可以看到子目录中的文件也提取出来了,而且很容易看到,子目录中的文件名中在扩展名前多出了1个空格,在资源管理器中是很难发现的。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Excel VBA中实现批量提取Word表格内容可以通过以下步骤进行: 1.首先,在Excel的工作簿中打开Visual Basic Editor(VBE)。 2.在VBE的工具栏上,选择“插入”→“模块”,在模块中编写VBA代码。 3.在编写代码之前,确保已经添加对Microsoft Word对象库的引用。可以通过在VBE中选择“工具”→“引用”来添加引用。 4.在VBA代码的模块中,使用Word对象变量来打开Word文档。例如,可以使用以下代码打开一个名为"Document1.docx"的Word文档: ``` Dim wdApp As Word.Application Dim wdDoc As Word.Document Set wdApp = New Word.Application Set wdDoc = wdApp.Documents.Open("C:\路径\Document1.docx") wdApp.Visible = True ``` 5.接下来,使用“With”语句和对象变量来引用Word文档中的表格,然后遍历表格中的每个单元格,并将其值复制到Excel工作表中。 ``` With wdDoc For Each tbl In .Tables For Each cell In tbl.Range.Cells '将单元格值复制到Excel工作表中的指定位置 Worksheets("Sheet1").Cells(rowNum, colNum).Value = cell.Range.Text '更新行号和列号 rowNum = rowNum + 1 colNum = colNum + 1 Next cell Next tbl End With ``` 6.在代码结束时,记得关闭Word文档和应用程序对象。 ``` wdDoc.Close wdApp.Quit Set wdDoc = Nothing Set wdApp = Nothing ``` 以上步骤将通过Excel VBA实现一键批量提取Word表格内容。可以根据具体需求进行适当的修改和调整,如指定目标表格的位置、添加错误处理等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值