前幾天,LINE 某 VBA 社群網友問到一個有關 如何將【特定檔案名稱】重新命名 的問題,需使用 函數、VBA或其它方法 來做設計。
Q:要在多個資料夾內搜尋檔案名稱符合 開頭為【ABCDEF,後面1碼任意字元,接著後面有8碼日期,後面1碼半形空白】,要將此16碼字串刪除,其餘後面的字串均要保留。
Ex:【ABCDEF 20240817 homepage.html】要改成【homepage.html】
當然 LINE 某 VBA 社群裡的大神們紛紛提供了很多很棒的解決方法,像:《 使用【Dir】+【Name As】來修改檔案名稱 》、《 用 copy 或 ren 指令來做成批次檔(bat檔),批量將檔案名稱複製或重新命名 》、《 用 DOS 或 PowerShell 來達到修改檔案名稱的目的 》...等等。
但最後我還是請出了 神隊友 ChatGPT 4o 來幫忙 ~
會想嘗試研究一下這問題,是因為之前也遇過類似的問題,但那時是想在某個資料夾內搜尋副檔名為xls的檔案,用的 Excel VBA 語法也非常老舊,就是 【Application.FileSearch】。不過這個好用的語法在 Excel 2007 就被微軟停用了... 而微軟官方的建議是使用【Dir函數】或【FileSystemObject】來代替。
以下是 2011/3/31 個人所珍藏的【Application.FileSearch】搜尋子資料夾的微軟官網VBA語法的備份資料,現在已無法使用了... 看看就好囉 !
SearchSubFolders 屬性
請參閱套用至範例特定如果指定的搜尋範圍包括 LookIn 屬性指定的資料夾中的所有子資料夾,則為 True。讀/寫 Boolean。
範例
本範例會在 [My Documents] 資料夾及其所有子資料夾中搜尋以 Cmd 開頭的檔案,並顯示每個所找到檔案的檔名及位置。
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.SearchSubFolders = True
.FileName = "cmd*"
If .Execute() > 0 Then
MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End With
在當時的年代(2007),微軟一停用 FileSearch,大家一陣哀鴻遍野,連我也不例外,我一直想不懂為何微軟要停用這麼好用的語法。只好求助 Google 大神,找了好久好久終於讓我找到了 !!
大約 2013年吧... 確切的年代可能更早,cjz大神 提供了完美的 FileSearch 替代方案,cjz大神的VBA程式碼,我當然是看不懂 !! 但大神的程式流程我卻隱隱約約的可以了解一點點 ... cjz大神 當時的VBA程式碼解徹底決了我的問題 !
如今 11 年過去了,現在利用 ChatGPT 4o 幫忙寫出來的超神程式碼裡面,居然和當年 cjz大神 的程式碼有大幅度的類似 !! 這真的讓我很驚訝 !!
由其是 GPT 在寫搜尋子資料夾的方式,讓我感覺到有當年 cjz大神 的影子 !!
兩者程式碼的核心概念沒有變,但 GPT 寫得程式碼相對非常簡短,如果沒有經歷過 cjz大神 的年代,我想一般人應該是很難體會出 GPT 寫的這個程式碼有多麼厲害、有多麼強 !!
比較耐人尋味的是 cjz大神 和 GPT 都用了這段宣告語法:
【Set fso = CreateObject("Scripting.FileSystemObject")】
名稱都一模一樣,很有趣 ! 哈哈 !
cjz 大神 現在應該已經退休了 !!
在這裡藉這篇文章,想跟他說聲謝謝 !
謝謝您在當年的網路論壇上為大家提供這麼偉大的程式碼,在那時候幫我解決了工作上的問題 ! 感謝您 ~
正規表達式(Regular Expression) - 這個強大的程式語言,我學了好多年都學不會也記不住的東西 ... 說它是外星人的程式語言也不為過 ! 但它真的好用 !!
要不是工作上的某個機緣,讓我重新學習與體驗到它的強大,真慶幸一直沒有放棄學習它的機會。
搜尋出來的檔案名稱是否有符合規則就靠它囉 !!
PS:副檔名 xlsb,是微軟 Excel 的二進位活頁簿名稱。
以上就是這次的分享,請持續關注 我 和 Meiko微課頻道,謝謝大家 ~
有任何問題,請到【opa的沙龍】的【Excel VBA 情境學習】一起討論有關 VBA 的問題,或加入 LINE社群 Meiko微課小綠群(粉絲交流群),歡迎您的加入。