上期我們分享了《VBA基礎入門(23)初識FSO;文件,文件夾的遍歷 》
了解了如何遍歷文件夾獲取每個文件的名字,屬性等等。
本期我們分享其他關於FSO的應用:
顧名思義,文件的複製,文件夾的複製。
例如:
有 A, B 兩個文件夾,A文件夾裡面有8000文件,但在其中有300你想要的文件,並且你要把這些文件複製到B文件夾中去。
當然,如果你需要複製的文件很少,十個八個的,直接搜索,複製粘貼就好了,但是,你需要複製的文件很多的話,你再一個個搜索,想必累死也弄不完吧,這就需要我們用工具來完成,用bat來完成也是不錯的選擇,如果只是進行這麼一次,單次的需求。以後我們會詳細的說明,會用vba 結合dos命令來完成一些需求。
首先,我們先想想大概的過程,根據給定的list中的文件名,做個循環,將文件從A複製到B,界面呢,需要一個list的地方就夠了。
例如下圖,左側A列可以存放這些文件名的list,根據需要可以增加清除list的方法,可以用我們之前分享的FileDialog功能增加文件夾的選擇,來填充copy路徑,可以增加信息框來顯示執行的進度,狀態等等,可用statusbar代替。
最主要的就是A列的list。
【代碼】
我們先看下主要的Main過程:
要點1:
之前沒詳細說明的獲取非空值最大行的方法
maxrow = Range("A1000").End(xlUp).Row
註:當然如果你的行數有可能大於1000你就不能像上面這麼寫了,寫個最大的值就好了。
要點2:
事前check
Call pathcheck
對於必要的參數要進行一些check,不然不選擇路徑的情況下就會報錯
要點3:
CopyFile
fso.CopyFile inpath & "\" & file, outpath & "\"
前面是指定到文件名的路徑,後面是出力的路徑
如果是文件夾的複製就把CopyFile換成CopyFolder,後面的出力路徑要追加"& file " 同入力路徑一樣的。
註:上面的file是帶文件後綴的,例如,aaa.txt,bbb.xls,ccc.ppt。。。
這個代碼還有問題,對於list中的文件名,在文件夾A中一定存在,上面的代碼不會出錯,那麼如果list中的文件,在A中根本不存在,那麼在CopyFile的時候就會報錯,代碼要嚴謹。
那麼如何判斷list中的文件在A文件夾中是否存在呢?
下期分享《FileExists》
PS:還在為工作效率上不來而煩惱嘛,快來加入我們吧。
長按識別下面二維碼,關注。