Excel精英培训网

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

[已解决]遍历文件夹及多层子文件夹所有指定文件,写入代码

[复制链接]
发表于 2016-6-22 23:26 | 显示全部楼层 |阅读模式
本帖最后由 乐乐2006201506 于 2016-6-24 10:18 编辑

      希望可以在下面代码的基础上改进,或者另写同样结果的代码,下面代码只是遍历一层文件夹中的文件并达到相应要求,希望达到所有层文件夹中所有文件,并达到相应要求,谢谢!网上找到的自己都不会修改,看不懂,所以才在论坛上求助。谢谢!



  • Sub test()
  •     p = "C:\Users\Administrator\Desktop\花名册测试文件\"
  •     f = Dir(p & "*.xls")
  •     Do While f <> ""
  •         Workbooks.Open p & f
  •         With ActiveWorkbook.VBProject.VBComponents("thisworkbook").CodeModule
  •             .InsertLines 1, "sub test()"
  •             .InsertLines 2, "msgbox ""just a test""" '双引号中的双引号,2个代表1个.
  •             .InsertLines 3, "end sub"
  •         End With
  •         ActiveWorkbook.SaveAs Filename:=p & Replace(f, ".xls", ".xlsm"), FileFormat:=52
  •         ActiveWorkbook.Close True
  •         f = Dir
  •     Loop
  • End Sub

最佳答案
2016-6-23 14:44
看看这样行不行

  1. '***********递归获取本文件夹及所有子文件夹下所有文件名,
  2. Dim w(1 To 10000), s%
  3. Sub test()
  4.     p = "C:\Users\Administrator\Desktop\花名册测试文件"
  5.     On Error Resume Next
  6.     s = 0
  7.     zdir p
  8.     For i = 1 To s
  9.         If w(i) Like "*.xls" And w(i) <> ThisWorkbook.FullName Then
  10.             Workbooks.Open w(i)
  11.             With ActiveWorkbook.VBProject.VBComponents("thisworkbook").CodeModule
  12.                 .InsertLines 1, "sub test()"
  13.                 .InsertLines 2, "msgbox ""just a test""" '双引号中的双引号,2个代表1个.
  14.                 .InsertLines 3, "end sub"
  15.             End With
  16.             ActiveWorkbook.SaveAs Filename:=p & Replace(f, ".xls", ".xlsm"), FileFormat:=52
  17.             ActiveWorkbook.Close True
  18.         End If
  19.     Next
  20. End Sub

  21. Sub zdir(p)       '递归获得本文件夹及所有子文件夹内文件名
  22.   Set fs = CreateObject("scripting.filesystemobject")
  23.   For Each f In fs.GetFolder(p).Files
  24.     If f <> ThisWorkbook.FullName Then s = s + 1: w(s) = f
  25.   Next
  26.   For Each m In fs.GetFolder(p).SubFolders
  27.       zdir m
  28.   Next
  29. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-6-23 14:44 | 显示全部楼层    本楼为最佳答案   
看看这样行不行

  1. '***********递归获取本文件夹及所有子文件夹下所有文件名,
  2. Dim w(1 To 10000), s%
  3. Sub test()
  4.     p = "C:\Users\Administrator\Desktop\花名册测试文件"
  5.     On Error Resume Next
  6.     s = 0
  7.     zdir p
  8.     For i = 1 To s
  9.         If w(i) Like "*.xls" And w(i) <> ThisWorkbook.FullName Then
  10.             Workbooks.Open w(i)
  11.             With ActiveWorkbook.VBProject.VBComponents("thisworkbook").CodeModule
  12.                 .InsertLines 1, "sub test()"
  13.                 .InsertLines 2, "msgbox ""just a test""" '双引号中的双引号,2个代表1个.
  14.                 .InsertLines 3, "end sub"
  15.             End With
  16.             ActiveWorkbook.SaveAs Filename:=p & Replace(f, ".xls", ".xlsm"), FileFormat:=52
  17.             ActiveWorkbook.Close True
  18.         End If
  19.     Next
  20. End Sub

  21. Sub zdir(p)       '递归获得本文件夹及所有子文件夹内文件名
  22.   Set fs = CreateObject("scripting.filesystemobject")
  23.   For Each f In fs.GetFolder(p).Files
  24.     If f <> ThisWorkbook.FullName Then s = s + 1: w(s) = f
  25.   Next
  26.   For Each m In fs.GetFolder(p).SubFolders
  27.       zdir m
  28.   Next
  29. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-6-23 22:28 | 显示全部楼层
grf1973 发表于 2016-6-23 14:44
看看这样行不行

      为什么不能实现另存为.xlsm文件。只是在原来的基础上继续保存为.xls文件。
回复

使用道具 举报

发表于 2016-6-24 08:52 | 显示全部楼层
可以的,17句改成
ActiveWorkbook.SaveAs Filename:= Replace(w(i), ".xls", ".xlsm"), FileFormat:=52
回复

使用道具 举报

发表于 2016-6-24 08:55 | 显示全部楼层
  1. Sub 宏1()

  2.     ActiveWorkbook.SaveAs Filename:=Replace(ThisWorkbook.FullName, ".xls", ".xlsm"), FileFormat:=52
  3. End Sub


复制代码

1111.rar

9.23 KB, 下载次数: 20

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 22:55 , Processed in 0.377912 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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