Excel精英培训网

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

求助 EXECL 按列扫描文件 并复制 求高手写个

[复制链接]
发表于 2015-6-5 10:41 | 显示全部楼层 |阅读模式
1.指定路径(包含子目录)扫面指定列中的文件名和指定的文件类型,并把扫描到的文件路径填写到对应文件名所在行,并获取文件的最后修改信息,和扫描有无状态

2.复制扫描到的文件到指定目录

扫描复制文件.rar

23.02 KB, 下载次数: 2

发表于 2015-6-5 11:45 | 显示全部楼层
本帖最后由 roych 于 2015-6-5 11:51 编辑

已测试成功。
  1. Sub ScanFile()
  2. '引用Microsoft Scripting Runtime库
  3. Dim fso As New FileSystemObject
  4. Dim fl As File
  5. Dim i As Long
  6. Dim s As Long
  7. Dim sPath As String, sExt As String
  8. s = Sheets(1).Range("B7").End(xlDown).Row
  9. sPath = Sheets(1).Range("B2")
  10. sExt = Sheets(1).Range("D2")
  11. For i = 7 To s
  12.     If Len(Dir(sPath & Sheets(1).Range("B" & i) & sExt)) > 0 Then
  13.         Sheets(1).Range("A" & i) = sPath & Sheets(1).Range("B" & i) & sExt
  14.         Sheets(1).Range("C" & i) = "有"
  15.         Sheets(1).Range("D" & i) = fso.getFile(sPath & Sheets(1).Range("B" & i) & sExt).DateLastModified
  16.     Else
  17.         Sheets(1).Range("C" & i) = "无"
  18.     End If
  19. Next

  20. End Sub

  21. Sub MoveFile()
  22. Dim fso As New FileSystemObject
  23. Dim i As Long
  24. Dim s As Long
  25. s = Sheets(1).Range("B7").End(xlDown).Row
  26. '防止没权限创建文件夹出错
  27. On Error Resume Next
  28. '用len判断效率高一些。
  29. If Len(Dir(Sheets(1).Range("B4"))) = 0 Then
  30.     fso.CreateFolder Sheets(1).Range("B4")
  31. End If

  32. For i = 7 To s
  33.     If Sheets(1).Range("C" & i) = "有" Then
  34.         FileCopy Sheets(1).Range("A" & i), Sheets(1).Range("B4") & Sheets(1).Range("B" & i) & Sheets(1).Range("D2")
  35.     End If
  36. Next
  37. End Sub
复制代码
扫描复制文件.rar (40.01 KB, 下载次数: 11)
回复

使用道具 举报

 楼主| 发表于 2015-6-5 14:00 | 显示全部楼层
roych 发表于 2015-6-5 11:45
已测试成功。

试了  不过扫描不出网络共享的东西  能再改进下吗{:191:}
回复

使用道具 举报

发表于 2015-6-5 14:35 | 显示全部楼层
c327273381 发表于 2015-6-5 14:00
试了  不过扫描不出网络共享的东西  能再改进下吗

楼主开玩笑吧?要不,如果不是禁用了宏,就是没有局域网的读写权限。附上我的测试截屏图:
你可以看到,提取文件前是“1月重点宝贝”文件夹的。点击提取后再切换窗口时,就生成了文件夹,而且复制了文件。
开玩笑.gif


回复

使用道具 举报

 楼主| 发表于 2015-6-5 14:50 | 显示全部楼层
roych 发表于 2015-6-5 14:35
楼主开玩笑吧?要不,如果不是禁用了宏,就是没有局域网的读写权限。附上我的测试截屏图:
你可以看到, ...

搞错了 {:091:} 是扫不到子目录 所以我以为扫不了  

回复

使用道具 举报

发表于 2015-6-5 15:07 | 显示全部楼层
c327273381 发表于 2015-6-5 14:50
搞错了  是扫不到子目录 所以我以为扫不了

由于提取文件跟扫描文件分开操作,因此,要注意:文件不要重名,不然扫描时路径会被覆盖
附件就不上传了。你自己在原先的附件上改改好了。
Sub ScanFile()
'引用Microsoft Scripting Runtime库
Dim fso As New FileSystemObject
Dim fl As File
Dim fd As Folder
Dim i As Long
Dim s As Long
Dim sPath As String, sExt As String
s = Sheets(1).Range("B7").End(xlDown).Row
sPath = Sheets(1).Range("B2")
sExt = Sheets(1).Range("D2")
For i = 7 To s
'子文件夹
    For Each fd In fso.GetFolder(sPath).SubFolders
        For Each fl In fd.Files
            If fl.Name = Sheets(1).Range("B" & i) & sExt Then
                Sheets(1).Range("D" & i) = fl.DateLastModified
                Sheets(1).Range("A" & i) = fl.Path
            End If
        Next
    Next
'根目录文件
    If Len(Dir(sPath & Sheets(1).Range("B" & i) & sExt)) > 0 Then
        Sheets(1).Range("A" & i) = sPath & Sheets(1).Range("B" & i) & sExt
        Sheets(1).Range("D" & i) = fso.GetFile(sPath & Sheets(1).Range("B" & i) & sExt).DateLastModified
    End If
If Len(Sheets(1).Range("A" & i)) > 0 Then
    Sheets(1).Range("C" & i) = "有"
Else
    Sheets(1).Range("C" & i) = "无"
End If

Next

End Sub



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-24 18:13 , Processed in 0.330451 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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