如果想把excel表格中的文件批量复制到另一个指定的路径,可以用fso来完成。
目录
1.复制(filecopy)
简单写法:Filecopy可以更简单就实现,不用创建object。
代码非常简单!
Sub Sample1()
FileCopy "C:\Tmp\Test.txt", "C:\Work\Test.txt"
End Sub
上面两个文件的名字一定要一样吗?答案是否定的。
如果希望test文件复制到另外路径的时候,文件名字改掉也是可以的。
这样就会生成一个abc的txt。
Sub Sample1()
FileCopy "C:\Tmp\Test.txt", "C:\Work\abc.txt"
End Sub
由于经常和excel进行联动,如果路径填在excel的单元格里面了,可以如下进行。
Sub Sample3()
a = Cells(1, 1)
b = Cells(1, 2)
FileCopy a, b
End Sub
如果想增加一个判定,判定目标文件夹是否已经存在该文件。
Sub Sample4()
Dim ret As Long
If Dir("D:\Test.txt") <> "" Then
result = MsgBox("same file was already exited" & vbCrLf & "do you want to rewite it?", vbYesNo)
If result = vbNo Then Exit Sub
End If
a = Cells(1, 1)
b = Cells(1, 2)
FileCopy a, b
End Sub
如果用FSO的方法就会复杂很多,参考如下。
Sub Copy_File()
Set fs = CreateObject("Scripting.FileSystemObject")
a = 1
Do
fs.CopyFile ActiveSheet.Cells(a, 1), ActiveSheet.Cells(a, 2) & "\"
a = a + 1
Loop Until ActiveSheet.Cells(a, 1) = ""
Set fs = Nothing
End Sub
2.剪切(name~as)
PS:如果是剪切,copyfile换成movefile就可以了.
刚刚发现复制有简单的filecopy写法,那么是不是也有filemove呢?
答案是没有。
和filecopy不一样中间不是逗号隔开,而是用的AS。
本来这个功能用来是改名字的,但是我现在目的是移动,所有我可以不改动名字,只改动文件位置,最终达到移动文件的目的。以下代码就实现了test文本的移动。
Sub Sample1()
Name "C:\Tmp\Test.txt" As "C:\Work\Test.txt"
End Sub
以下是用FSO来实现文件的移动。代码相对要冗长许多。
Sub move_File()
Set fs = CreateObject("Scripting.FileSystemObject")
a = 1
Do
fs.movefile ActiveSheet.Cells(a, 1), ActiveSheet.Cells(a, 2)
a = a + 1
Loop Until ActiveSheet.Cells(a, 1) = ""
Set fs = Nothing
End Sub
3.删除(Kill)
PS:如果是删除文件,简易方法就是用Kill+文件路径
sub file_kill()
kill "C:\test.txt"
end sub
复杂的方法是:
copyfile换成deletefile,由于是直接删除,所以目标路径就不需要了。
Sub Delete_File()
Set fs = CreateObject("Scripting.FileSystemObject")
a = 1
Do
fs.deletefile ActiveSheet.Cells(a, 1)
a = a + 1
Loop Until ActiveSheet.Cells(a, 1) = ""
Set fs = Nothing
End Sub
总结:用FSO的方法就是如下,不用这个比较好,会看就行,太复杂了。
1.复制————————fs.copyfile target path ,destination path
2.剪切————————fs.movefile target path ,destination path
3.删除————————fs.deletefile target path