Excel精英培训网

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

[已解决]移动指定文件

[复制链接]
发表于 2016-5-5 10:02 | 显示全部楼层 |阅读模式
移动指定文件,运行出错,帮忙 看看。谢谢
最佳答案
2016-5-5 19:46
舒云天 发表于 2016-5-5 19:35
出现错误如截图

Sub moveFiles()
    Dim fso, A, i%, p$, desP$, desF$, msg$
    Set fso = CreateObject("Scripting.FileSystemObject")
    p = ThisWorkbook.Path & "\"
    A = Sheets(1).Range("a1").CurrentRegion

    For i = 1 To UBound(A)
        desF = p & A(i, 1) & ".doc"
        desP = p & A(i, 2) & "\"
        If fso.FolderExists(desP) = False Then fso.CreateFolder (desP)
        If fso.FileExists(desF) = False Then msg = msg & "," & A(i, 1) Else fso.moveFile desF, desP
    Next i
    MsgBox Mid(msg, 2), , "无效文件清单"
End Sub

3.rar (40.2 KB, 下载次数: 10)

移动指定文件.rar

42.16 KB, 下载次数: 8

发表于 2016-5-5 16:58 | 显示全部楼层
Sub MoveFiles()
'
' MoveFiles Macro
'
'
    Dim i As Integer
    Dim s As String
    Dim FilPath As String
    Dim aaa As String
    Dim bbb As String
    Dim MyFile As Object
    With Sheet1

        For i = 1 To .Range("a65536").End(xlUp).Row
            FilPath = ThisWorkbook.Path & "\" & .Cells(i, 1).Text & ".doc"
            aaa = ThisWorkbook.Path & "\" & Sheet1.Range("b" & i).Value & "\" & .Cells(i, 1).Text & ".doc"""
            bbb = ThisWorkbook.Path & "\" & Sheet1.Range("b" & i).Value & "\"
            If Dir(bbb, vbDirectory) <> "" Then
                If Dir(FilPath) <> "" Then
                    Set MyFile = CreateObject("Scripting.FileSystemObject")
                    MyFile.MoveFile FilPath, bbb
                    Set MyFile = Nothing
                Else
                    s = s & Chr(10) & .Cells(i, 1).Text
                End If
            Else
                MkDir (bbb)
                Set MyFile = CreateObject("Scripting.FileSystemObject")
                MyFile.MoveFile FilPath, bbb
                Set MyFile = Nothing
            End If
        Next

    End With
    If s <> "" Then
        MsgBox s & Chr(10) & "无以上文件!"
    End If
End Sub




红色是修改过的地方

回复

使用道具 举报

发表于 2016-5-5 17:29 | 显示全部楼层
Sub moveFiles()
    Dim fso, A, i%, p$, desP$, desF$

    Set fso = CreateObject("Scripting.FileSystemObject")
    p = ThisWorkbook.p & "\"
    A = Sheets(1).Range("a1").CurrentRegion

    For i = 1 To UBound(A)
        desF = p & A(i, 1) & ".doc"
        desP = p & A(i, 2) & "\"
        If fso.FolderExists(desP) = False Then fso.CreateFolder (desP)
        If fso.FileExists(desF) = False Then msg = msg & "," & A(i, 1) Else fso.moveFile desF, desP
    Next i
    MsgBox Mid(msg, 2), , "无效文件清单"
End Sub

2.rar (41.31 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2016-5-5 19:35 | 显示全部楼层
本帖最后由 舒云天 于 2016-5-5 19:43 编辑
爱疯 发表于 2016-5-5 17:29
Sub moveFiles()
    Dim fso, A, i%, p$, desP$, desF$

出现错误如截图
2345截图20160505192527.png
回复

使用道具 举报

发表于 2016-5-5 19:46 | 显示全部楼层    本楼为最佳答案   
舒云天 发表于 2016-5-5 19:35
出现错误如截图

Sub moveFiles()
    Dim fso, A, i%, p$, desP$, desF$, msg$
    Set fso = CreateObject("Scripting.FileSystemObject")
    p = ThisWorkbook.Path & "\"
    A = Sheets(1).Range("a1").CurrentRegion

    For i = 1 To UBound(A)
        desF = p & A(i, 1) & ".doc"
        desP = p & A(i, 2) & "\"
        If fso.FolderExists(desP) = False Then fso.CreateFolder (desP)
        If fso.FileExists(desF) = False Then msg = msg & "," & A(i, 1) Else fso.moveFile desF, desP
    Next i
    MsgBox Mid(msg, 2), , "无效文件清单"
End Sub

3.rar (40.2 KB, 下载次数: 10)
回复

使用道具 举报

 楼主| 发表于 2016-5-5 19:49 | 显示全部楼层
非常感谢你。另外,如果是已经有文件夹存在,并且已命名a和b  ad,要怎样修改VBA呢?

5.zip

42.99 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2016-5-5 19:55 | 显示全部楼层
舒云天 发表于 2016-5-5 19:49
非常感谢你。另外,如果是已经有文件夹存在,并且已命名a和b  ad,要怎样修改VBA呢?

谢谢你 ,经测试,很好用。无论文件夹是否存在都行。
回复

使用道具 举报

 楼主| 发表于 2016-5-13 09:56 | 显示全部楼层
爱疯 发表于 2016-5-5 19:46
Sub moveFiles()
    Dim fso, A, i%, p$, desP$, desF$, msg$
    Set fso = CreateObject("Scripting ...

多重移动

6.rar

41.11 KB, 下载次数: 3

回复

使用道具 举报

发表于 2016-5-13 10:41 | 显示全部楼层
本帖最后由 爱疯 于 2016-5-13 10:50 编辑

Sub moveFiles()
    Dim fso, A, i%, j%, p$, desP$, desF$, msg$
    Set fso = CreateObject("Scripting.FileSystemObject")
    p = ThisWorkbook.Path & "\"
    A = Sheets(1).Range("a1").CurrentRegion

    For i = 1 To UBound(A)
        '1)逐层创建文件夹
        desP = p
        For j = 2 To UBound(A, 2)
            desP = desP & A(i, j) & "\"
            If fso.FolderExists(desP) = False Then fso.CreateFolder desP
        Next j

        '2)移动文件
        desF = p & A(i, 1) & ".doc"
        If fso.FileExists(desF) Then fso.moveFile desF, desP Else msg = msg & "," & A(i, 1)
    Next i

    MsgBox Mid(msg, 2), , "无效文件清单"
End Sub

4.rar (40.69 KB, 下载次数: 3)
回复

使用道具 举报

 楼主| 发表于 2016-5-13 15:48 | 显示全部楼层
万分感谢。大大节省了工作时间。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 09:30 , Processed in 0.590553 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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