Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2138|回复: 7

[已解决]VBA同时导入多个文件夹内的文件

[复制链接]
发表于 2016-5-10 11:14 | 显示全部楼层 |阅读模式
各位老师好,我有多个文件夹,希望写个VBA代码,同时把多个文件夹下的文件都导入到excel里面去,文件夹路径不定,但是所有文件夹都放在同一路径下。且每个文件夹内文件的格式都是相同的,每个文件夹名就是系列名,每个文件夹内的文件命名:系列名+测试序列号;
生成的数据格式可以参见附件demo中的data sheet, Row 1 是每个文件夹内文件的系列名和测试序列号,在导入文件时提取出来并填充到单元格,每2列对应一个文件内的数据。
最好可以做成以下的形式,参见附件中的“打开格式”,直接选取要打开的文件夹(不是文件),然后导入即可。
这个对话框我只会做选取文件然后导入,不会做直接选取文件夹导入,比较头疼。
最佳答案
2016-5-10 15:58
选择到所有有数据子文件夹的上一级文件夹。不可直接选择子文件夹。
  1. '****获取本文件夹所有子文件夹下所有文件名
  2. Sub test()
  3.     Dim sh As Worksheet, wb As Workbook
  4.     Set sh = ActiveSheet
  5.     sh.Cells.Clear
  6.     Set fso = CreateObject("scripting.filesystemobject")
  7.     fp = CreateObject("Shell.Application").BrowseForFolder(0, "请选择文件夹", 0, "").Self.Path & ""
  8.     Set ff = fso.getfolder(fp)
  9.     For Each fff In ff.subfolders
  10.        k = 0
  11.        For Each f In fff.Files
  12.          Set wb = Workbooks.Open(f)
  13.          k = k + 1
  14.          j = j + 2
  15.          sh.Cells(1, j - 1) = fff.Name
  16.          sh.Cells(1, j) = k
  17.          wb.Worksheets(1).UsedRange.Copy sh.Cells(2, j - 1)
  18.          ActiveWorkbook.Close False
  19.        Next
  20.     Next
  21.     sh.Columns.AutoFit
  22. End Sub
复制代码
打开格式.PNG

data.zip

221.5 KB, 下载次数: 3

发表于 2016-5-10 11:32 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-5-10 12:04 | 显示全部楼层
橘子红 发表于 2016-5-10 11:32
选择的文件夹下还有没有文件夹

没有,直接是文件
回复

使用道具 举报

 楼主| 发表于 2016-5-10 13:36 | 显示全部楼层
请大神帮忙看一下,不知道怎么直接选取文件夹导入,而不是选取文件导入。
回复

使用道具 举报

发表于 2016-5-10 14:10 | 显示全部楼层
  1. '****获取本文件夹所有子文件夹下所有文件名
  2. Sub test()
  3.     Dim sh As Worksheet, wb As Workbook
  4.     Set sh = ActiveSheet
  5.     sh.Cells.Clear
  6.     Set fso = CreateObject("scripting.filesystemobject")
  7.     Set ff = fso.getfolder(ThisWorkbook.Path)
  8.     For Each fff In ff.subfolders
  9.        k = 0
  10.        For Each f In fff.Files
  11.          Set wb = Workbooks.Open(f)
  12.          k = k + 1
  13.          j = j + 2
  14.          sh.Cells(1, j - 1) = fff.Name
  15.          sh.Cells(1, j) = k
  16.          wb.Worksheets(1).UsedRange.Copy sh.Cells(2, j - 1)
  17.          ActiveWorkbook.Close False
  18.        Next
  19.     Next
  20.     sh.Columns.AutoFit
  21. End Sub
复制代码

data.rar

231.65 KB, 下载次数: 5

回复

使用道具 举报

 楼主| 发表于 2016-5-10 15:03 | 显示全部楼层
grf1973 发表于 2016-5-10 14:10

老师,你好,你的这个代码是需要脚本和文件夹在同一个目录下面,run才可以,如果脚本和文件夹不在一起,run就会出错。我希望的是点击activeX控件,弹出对话框,再选择多个文件夹导入,不知可能做如此修改?
回复

使用道具 举报

发表于 2016-5-10 15:58 | 显示全部楼层    本楼为最佳答案   
选择到所有有数据子文件夹的上一级文件夹。不可直接选择子文件夹。
  1. '****获取本文件夹所有子文件夹下所有文件名
  2. Sub test()
  3.     Dim sh As Worksheet, wb As Workbook
  4.     Set sh = ActiveSheet
  5.     sh.Cells.Clear
  6.     Set fso = CreateObject("scripting.filesystemobject")
  7.     fp = CreateObject("Shell.Application").BrowseForFolder(0, "请选择文件夹", 0, "").Self.Path & ""
  8.     Set ff = fso.getfolder(fp)
  9.     For Each fff In ff.subfolders
  10.        k = 0
  11.        For Each f In fff.Files
  12.          Set wb = Workbooks.Open(f)
  13.          k = k + 1
  14.          j = j + 2
  15.          sh.Cells(1, j - 1) = fff.Name
  16.          sh.Cells(1, j) = k
  17.          wb.Worksheets(1).UsedRange.Copy sh.Cells(2, j - 1)
  18.          ActiveWorkbook.Close False
  19.        Next
  20.     Next
  21.     sh.Columns.AutoFit
  22. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-5-10 16:24 | 显示全部楼层
grf1973 发表于 2016-5-10 15:58
选择到所有有数据子文件夹的上一级文件夹。不可直接选择子文件夹。

谢谢,老师,这样已经很好了,主要不想直接导入文件,因为导入后还得对文件进行排序,按文件夹导入,就省了不少步骤。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 18:28 , Processed in 0.554984 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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