Excel VBA:批量對文件任意重命名(移動)
一、普通VBA代碼的問題
如果用Dir()方法和MkDir方法,一般只能在已經(jīng)存在的文件夾內(nèi)創(chuàng)建一層新的子文件夾。無法命名任意多層文件夾。
也就是說,如現(xiàn)在如果已經(jīng)存在文件夾【E:\ABC】,才能創(chuàng)建【E:\ABC\DEF】;否則是不能直接創(chuàng)建后面的新文件夾的。
二、創(chuàng)建任意文件夾的思路
1.創(chuàng)建FSO對象【文件系統(tǒng)對象】
用FSO對象主要是因為它處理文件與文件夾更專業(yè),里面有各種函數(shù)和方法,不需要自己通過Mkdir/Dir/Split等函數(shù)和方法慢慢構(gòu)造路徑;同時避免很多出錯的可能。
2.判斷盤符是否存在
比如給定需要創(chuàng)建的文件夾是
路徑 = "E:\A\b/C\d/ef\g/h\i\j\k/m/n"
利用【FSO.DriveExists()】函數(shù)判斷給定的路徑對應(yīng)的盤符【E:\】是否存在,如果盤符不存在,是不可能創(chuàng)建出給定文件夾的,此時直接即出程序;否則,繼續(xù)向下執(zhí)行程序。
3.循環(huán)逐層判斷文件夾
(1)利用【FSO.FolderExists()】函數(shù),從給定的完整路徑開始,逐級向上判斷第級文件夾路徑是否存在。
判斷流程:
第1次,判斷【E:\A\b/C\d/ef\g/h\i\j\k/m/n】是否存在
第2次,判斷【E:\A\b/C\d/ef\g/h\i\j\k/m】是否存在
第3次,判斷【E:\A\b/C\d/ef\g/h\i\j\k】是否存在
……
第n次,判斷【E:\A】是否存在
A.如果不存在,則裝入一個動態(tài)數(shù)組arr中;
B.如果該級文件夾路徑存在,則往上肯定都存在了,就不再向上一級父文件夾進(jìn)行判斷。
(2)倒著循環(huán)arr
即從上面記錄文件夾路徑的數(shù)組arr的最大下標(biāo)開始循環(huán),直到最小下標(biāo)結(jié)束,步長-1。
因為我們創(chuàng)建文件夾,是要按下面箭頭所示的順序由下向上逐級來操作的:

(3)創(chuàng)建文件夾
用【FSO.CreateFolder】方法逐級創(chuàng)建文件夾
(4)完成
循環(huán)arr完成,多層文件夾創(chuàng)建完成
三、創(chuàng)建任意多層文件夾示例代碼
四、批量對文件任意重命名
在上述創(chuàng)建多層文件夾的方法的基礎(chǔ)上,咱們可以對已經(jīng)存在的文件任意移動或重命名
操作方法:
1.整理新舊文件名
在Excel的【Sheet1】表格和A列寫原文件完整路徑,B列寫新文件名的完整路徑
注:第一行是標(biāo)題不會算在內(nèi)
2.執(zhí)行
點擊【Sheet1】表格里的【執(zhí) 行】按鈕,即可完成。

或者打開文件,在代碼主程序處點擊運行也一樣。
3.示例代碼
五、文件
鏈接: https://pan.baidu.com/s/1zKAlHsCTd8fU33cxMVgtGw?pwd=uhsi 提取碼: uhsi 復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦
打開文件直接操作即可。