ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: hhxq001

[求助] 提取文件名带路径

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-1-12 11:45 | 显示全部楼层
  1. Sub ListFilesTest()
  2.     With Application.FileDialog(msoFileDialogFolderPicker)
  3.         If .Show Then myPath$ = .SelectedItems(1) Else Exit Sub
  4.     End With
  5.     If Right(myPath, 1) <> "" Then myPath = myPath & ""
  6.    
  7.     [a:a] = ""
  8.     Call ListAllFso(myPath)
  9. End Sub

  10. Function ListAllFso(myPath$)
  11.     Set fld = CreateObject("Scripting.FileSystemObject").GetFolder(myPath)
  12.     For Each f In fld.Files
  13.         [a65536].End(3).Offset(1) = myPath & f.Name
  14.     Next
  15.     For Each fd In fld.SubFolders
  16.         Call ListAllFso(fd.Path)
  17.     Next
  18. End Function
复制代码

存的代码改下,输出的位置可以自己稍微改一改,用数组输出,我懒得改了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-1-12 11:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hhxq001 发表于 2023-1-12 11:06
会把汇总表本身也提取进来呢

增加一个if判断语句吧

TA的精华主题

TA的得分主题

发表于 2023-1-12 11:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-1-12 12:03 来自手机 | 显示全部楼层
又是等靠要的人。本论坛关于文件操作的帖子,没有1000,也有900,闭着眼睛都搜索到。

TA的精华主题

TA的得分主题

发表于 2023-1-12 17:02 | 显示全部楼层
  1. Dim Result
  2. Sub extract()
  3.     Dim p$, f$, k&, r
  4.     With Application.FileDialog(msoFileDialogFolderPicker) '获取用户选择文件夹的路径
  5.         .Title = "请选择文件夹"
  6.         .InitialFileName = ThisWorkbook.Path & ""            '默认打开当前目录"
  7.         If .Show = 0 Then MsgBox "本次提取已被取消!!": Exit Sub '如果没有选择保存路径,则退出程序
  8.         p = .SelectedItems(1) '选择的文件路径赋值给变量P
  9.     End With
  10.     If Right(p, 1) <> "" Then p = p & "" '判断p的右侧是否有\,有则查找这个文件夹里的文件
  11.     'f = Dir(p & "*.*")
  12.     '返回变量P指定路径下带任意扩展名的文件名
  13.     '如果有超过一个文件存在,将返回第一个找到的文件名
  14.     '如果一个文件都没有,则返回空
  15.     [a:b].ClearContents '清空汇总表的A列原有数据
  16.     [a1] = "序号" '汇总表的a1写入。。。。
  17.     [b1] = "文件名如下:" '汇总表的b1写入。。。。
  18.     '调用底下函数,遍历所有文件,含子文件夹
  19.     Dim FSOLibrary As Object
  20.     Dim FSOFolder As Object
  21.     Dim folderName As String
  22.     folderName = p
  23.     Set FSOLibrary = CreateObject("Scripting.FileSystemObject")
  24.     Result = ""
  25.     LoopAllSubFolders FSOLibrary.GetFolder(folderName)
  26.     Result = Application.Transpose(Split(Left(Result, Len(Result) - 2), vbCrLf))
  27.     Application.ScreenUpdating = False
  28.     [b2].Resize(UBound(Result), 1) = Result
  29.     [a2].Resize(UBound(Result), 1) = "=row()-1"
  30.     Application.ScreenUpdating = True
  31.     MsgBox "提取完成"
  32.     Set FSOLibrary = Nothing
  33. End Sub

  34. Sub LoopAllSubFolders(FSOFolder As Object)
  35.     Dim FSOSubFolder As Object
  36.     Dim FSOFile As Object
  37.     Dim BKFullName As String
  38.     Dim BKFullName2 As String
  39.     For Each FSOSubFolder In FSOFolder.subfolders
  40.         LoopAllSubFolders FSOSubFolder
  41.     Next
  42.     BKFullName = ThisWorkbook.FullName:    BKFullName2 = ThisWorkbook.Path & "\~$" & ThisWorkbook.Name
  43.     For Each FSOFile In FSOFolder.Files
  44.         If FSOFile.Path <> BKFullName And FSOFile.Path <> BKFullName2 Then
  45.             Result = Result & FSOFile.Path & vbCrLf
  46.         End If
  47.     Next
  48. End Sub
复制代码

百度拼了个给你。

提取本文件夹内所有的文件名-带路径.zip

20.55 KB, 下载次数: 1

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-12 21:38 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-13 10:21 | 显示全部楼层


坛友们给修改后的:


Sub 提取包含子文件夹()
    With Application.FileDialog(msoFileDialogFolderPicker)     '获取用户选择文件夹的路径
        .Title = "请选择文件夹"
        .InitialFileName = ThisWorkbook.Path & "\"               '默认打开当前目录"
        If .Show = 0 Then MsgBox "本次提取被取消!!": Exit Sub    '如果没有选择保存路径,则退出程序
        myPath$ = .SelectedItems(1)    '选择的文件路径赋值给变量 myPath$
    End With
    If Right(myPath, 1) <> "" Then myPath = myPath & ""
    [a:b].ClearContents    '清空汇总表的A-B列原有数据
    [a1] = "序号"                   '汇总表的a1写入。。。。
    [b1] = "   文件名如下:"    '汇总表的b1写入。。。。
    Call ListAllFso(myPath)       '调用FSO遍历子文件夹的递归过程
End Sub

Function ListAllFso(myPath$)    '用FSO方法遍历并列出所有文件和文件夹名的【递归过程】
    Set fld = CreateObject("Scripting.FileSystemObject").GetFolder(myPath)    '这里的【当前路径myPath是个递归变量】
    For Each f In fld.Files    '遍历当前文件夹内所有【文件.Files】
        If InStr(f.Name, ThisWorkbook.Name) Then GoTo 10    '要提取的文件名不能是本文件
        [B65536].End(3).Offset(1) = fld & "\" & f.Name            '在b列逐个列出文件名
        [B65536].End(3).Offset(, -1) = [A65536].End(3).Row    '在a列填写序号
10  Next
    For Each fd In fld.SubFolders    '遍历当前文件夹内所有【子文件夹.SubFolders】
        Call ListAllFso(fd.Path)    '注意此时的路径变量已经改变为【子文件夹的路径fd.Path】
        '注意重点在这里: 继续向下调用递归过程【遍历子文件夹内所有文件文件夹对象】
    Next
ActiveSheet.Range("a1:a1000").HorizontalAlignment = xlCenter 'a列数据=水平居中
End Function

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 20:27 , Processed in 0.036480 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表