黑天使寫 VBA 也好一陣子了,一直以來對於宣告與不宣告變數有什麼影響感到好奇。不宣告會佔用更多記憶體空間,進而拖慢執行速度嗎?但現在電腦記憶體動輒 8G 起跳,執行起來好像也沒什麼感覺。既然不宣告也能跑程式,為什麼前輩們總是耳提面命要宣告呢?
這些疑問,相信也是許多自學 VBA 的朋友心中的困惑。為了徹底搞懂宣告的觀念,我花了不少時間探索,現在就用我最熟悉的「倉庫理論」,以最簡單的方式帶你了解宣告的重要性!
【大倉庫隨意放】
你可以想像一下,你家裡有一個非常大的倉庫(就像現在動輒 8G 甚至更高的電腦記憶體)。當你隨手買了一些小東西(對應到 VBA 中未宣告的變數),你可能就隨意把它們丟在倉庫的某個角落。因為倉庫空間很大,你可能一點也不覺得擁擠,短期內要找到這些東西,如果數量不多,或許也還算容易。
【每次都要找,數據量大還是有差】
然而,當你需要用到這些東西時,你就得進到倉庫裡從頭到尾找一遍。如果倉庫裡只放了十樣物品,你可能很快就能找到。但如果放了一百個、一千個,甚至更多呢?雖然電腦的搜尋速度很快,快到在處理少量數據時你可能感覺不到差異,但當你的 VBA 程式需要處理大量的數據,例如讀取和處理數萬行的 Excel 資料,或者執行數千次的迴圈操作時,每次都讓 VBA 臨時去「猜測」和「尋找」變數,累積起來的時間延遲仍然可能變得可察覺。這就像你的大倉庫,東西一多,即使空間再大,每次都得大海撈針,效率還是會降低的。
【類似的物品可能也會被找出來,Bug 就藏在細節裡】
更關鍵的是,因為你沒有事先「宣告」每個變數的型態,VBA 就像一個不太聰明的倉庫管理員。當你不小心把變數名稱打錯時,例如原本你的迴圈變數是
i,你不小心打成了 ii,VBA 會很「貼心」地將 ii 視為一個全新的、未宣告的變數,然後繼續執行你的程式,而不會給你任何錯誤提示!這時候,程式可能還是可以順利跑完,但是跑出來的結果可能就不是你預期的了。舉例來說,在一個
FOR 迴圈中,你原本想要用變數 i 來控制迴圈的次數和操作,但因為筆誤寫成了 ii,VBA 會使用一個沒有被賦予任何初始值的 ii 變數來執行迴圈,導致迴圈內的邏輯可能完全錯誤,但程式卻沒有報錯。當你的程式碼達到上千行或上萬行時,要找出這種因為變數名稱拼寫錯誤而產生的 Bug,就像要在堆滿雜物的巨大倉庫裡找到一個根本不存在的零件一樣困難,往往需要耗費大量的時間和精力。【總結】
或許在記憶體容量充足的現代,不宣告變數在執行速度上的差異讓你無感。但是,最致命的影響在於最後一點——因為沒有明確宣告,VBA 無法在你寫錯變數名稱時及時提醒你,這會讓 Bug 悄悄潛伏在你的程式碼中,等你發現時可能已經造成了難以挽回的錯誤。
把宣告變數看作是一種「預防勝於治療」的做法,它可以幫助你從一開始就建立清晰的程式結構,避免許多不必要的麻煩,並寫出更可靠、更易於理解和維護的 VBA 程式碼。就像整理你的大倉庫一樣,即使空間再大,有條理地擺放和標記物品,不僅能讓你更快找到需要的東西,也能避免因為混淆而造成的錯誤。
所以,為了你的程式碼品質和未來的自己,請務必養成在 VBA 中宣告變數的好習慣!在你的 VBA 程式碼的模組開頭加上
Option Explicit,讓 VBA 強制你宣告所有使用的變數吧!這才是寫出專業 VBA 程式的第一步!謝謝您閱讀了我的文章,若您喜歡我的文章,希望您幫我按個「讚」,也幫忙分享給需要的朋友或其他平台,謝謝。
文章標籤
全站熱搜
