更新於 2024/08/20閱讀時間約 6 分鐘

[VBA] 將【特定檔案名稱】重新命名

問題:

前幾天,LINE 某 VBA 社群網友問到一個有關 如何將【特定檔案名稱】重新命名 的問題,需使用 函數、VBA或其它方法 來做設計。


Q:要在多個資料夾內搜尋檔案名稱符合 開頭為【ABCDEF,後面1碼任意字元,接著後面有8碼日期,後面1碼半形空白】,要將此16碼字串刪除,其餘後面的字串均要保留。

Ex:【ABCDEF 20240817 homepage.html】要改成【homepage.html】

特定檔名 - 更改前與更改後


VBA程式執行結果 - 可在多個資料夾內,搜尋特定檔名並更改。



當然 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 大神 現在應該已經退休了 !!

在這裡藉這篇文章,想跟他說聲謝謝 !
謝謝您在當年的網路論壇上為大家提供這麼偉大的程式碼,在那時候幫我解決了工作上的問題 ! 感謝您 ~

PS:如果想索取 cjz 大神 在當時偉大的程式碼,
請在下方留言【+1】並附上您的 Email,我會在寄給您 ! 謝謝~






關鍵:

正規表達式(Regular Expression) - 這個強大的程式語言,我學了好多年都學不會也記不住的東西 ... 說它是外星人的程式語言也不為過 ! 但它真的好用 !!

要不是工作上的某個機緣,讓我重新學習與體驗到它的強大,真慶幸一直沒有放棄學習它的機會。


搜尋出來的檔案名稱是否有符合規則就靠它囉 !!




檔案下載 (免費下載)

PS:副檔名 xlsb,是微軟 Excel 的二進位活頁簿名稱。




彩蛋

  1. 凡事要有【格物致知】的精神 !
  2. 蘇軾在〈稼說送張琥〉中提到:【博觀而約取,厚積而薄發。】
  3. 【過時的事物】,如果不能將它轉化成經驗來學習或體驗【新穎的事物】,
    那就只是一般的回憶罷了,是非常可惜的!




參考文獻

  1. ChatGPT 4o - 將【特定檔案名稱】重新命名 (分享網址連結,請參考最下方。)
  2. Application.FileSearch在Office2007中被停用了
    https://blog.csdn.net/dihuo2799/article/details/101732987
  3. [VBA ] Application.FileSearch要怎麼改寫?
    https://www.ptt.cc/bbs/Visual_Basic/M.1412063010.A.BDD.html




以上就是這次的分享,請持續關注  和 Meiko微課頻道,謝謝大家 ~




有任何問題,請到【opa的沙龍】【Excel VBA 情境學習】一起討論有關 VBA 的問題,或加入 LINE社群 Meiko微課小綠群(粉絲交流群),歡迎您的加入。




在 ChatGPT 4o 中,
所發揮的我的【主人式 靈魂拷問】方法,

請參考以下網址:

付費訂閱
分享至
成為作者繼續創作的動力吧!
內容總結
FileSystemObject
5
/5
© 2024 vocus All rights reserved.