VBA宣告變數:全域是什麼?3種不同範圍的用法

VBA宣告變數是基本必須掌握的觀念,本文介紹程序、模組、專案3個不同層級的資料有效範圍,幫助你瞭解全域是什麼?它和局部的差別以及具體的用法。

一、VBA Dim意思

VBA Dim是宣告變數的語法,後面接的是變數名稱,也就是這裡的「Dim X」,其作用和國中數學方程式中設定x,y是相同意義。接下來「X=1」代表將這個變數的值設定為1。最後再以「Debug.Print X」將這個變數的值顯示在「即時運算」視窗,也就是截圖右邊所看到的結果,列印出「1」。

二、兩個Sub程序

想要瞭解所謂的變數有效範圍,最簡單方式是另外再設計一個VBA Sub程序「Test2」,它只有一行程式代碼,就是上個步驟的測試列印X變數。快速鍵F5執行之後,右邊的結果視窗並沒有任何東西,這是因為上個步驟「Test1」所宣告及設定的變數X,在另外一個程序不起作用,已經不是有效範圍了,所以在這個「Test2」程序中的X等於是一個沒有事先宣告也沒有設定值的變數,其預設值是空白,所以會在即時運算視窗看不到任何內容產出。

三、模組共用變數

一個VBA模組可以有許多Sub程序,想要跨程序共同使用變數其實很簡單直覺,只要在最上方宣告這個變數,同樣是「Dim X」,設計好了之後在右上角下拉,會看到目前在這個模組裡面是有「宣告」以及「Test1」及「Test2」兩個程序。而且在執行了第1個程序之後,接著再執行第2個程序,兩個程序都有列印出「1」,代表已經共用了X這個變數。

四、跨模組程式型態

完成了模組內不同程序共用變數的測試,接下來試看看跨模組的VBA變數有效範圍。在另外一個模組設計同樣簡單的程式,直接列印X變數,執行後發現沒有任何東西,跟先前第二步驟相同情況。

五、Private Sub用法

想要更加全面瞭解變數有效範圍,首先要知道VBA是分成三個層次:

1.專案:帶有VBA檔案的活頁簿裡面所有的模組程序。

2.模組:一個專案裡面有多個模組,一個模組裡面可以有許多的Sub程序。

3.程序:VBA程式最小執行單元,也就是最常看到的Sub。

上個步驟沒有辦法跨模組使用變數,是因為在模組最上方使用Dim宣告變數的時候,預設是模組層級的變數,模組內所有的Sub程序都能夠使用這個變數,但是其他模組是不能夠使用的。

實際上這裡的Dim作用等同於VBA語法中的Private,表示它是模組內私有範圍,因此在模組最上方宣告時使用Dim和Private是相同效果。

在此同時將第二個「Test 2」程序前面Sub也加上「Private」,在下個步驟會看到它的作用。這裡首先大概可以瞭解到一個私有程序(「Private Sub」)其實跟私有變數一樣,都只有在模組範圍內才是有效的。

六、Excel檢視巨集

上個步驟設定的私有程序在程式專案有特定作用,不過在Exce檢視巨集也會有影響,設定Private屬性的Sub是不會出現在Excel巨集中,也就是它不會顯示私有程序,因此沒有辦法執行。

七、Public全域是什麼

瞭解Private作用之後,進一步使用跟它相對的Public,可以想見私有Private是在模組內才能使用,公共Public就是在整個檔案VBA專案範圍內都是有效的。

例如同樣是在模組的宣告區,使用Public宣告一個公共的變數:「Public X」,然後執行一次「Test1」程序。

八、專案有效範圍

延續上個步驟,接著直接執行另外一個模組「Module2」裡面的「Test2」,它只是單純將公共全域變數X列印出來,在「即時運算」視窗看到它會引用另外一個模組的變數值,以一般程式用語可以稱之為繼承,作用是在專案內每個Excel VBA模組程序都可以使用,也就是專案層級的有效範圍。

VBA宣告變數的學習

這篇文章介紹VBA變數的有效範圍以及如何共用,範例程式在宣告和設定變數值時是很簡單,可能會覺得是否有必要大費周章瞭解範圍的作用。

這是因為範例極度簡化的情況,可是要開發一個實際應用專案,通常程式碼數量多且架構複雜,會使用到很多模組、程序及變數,在這種情況下如何清楚有效的設定變數並規劃作用範圍便會非常重要,這正是為何幾乎在每個程式語言都有相關類似的定義規則,所以是VBA教學一定會有的基本內容,以上個人心得提供給讀者參考。

本文章相關講解影片:

YouTube video

完整的VBA課程:職場及投資應用,20小時入門進階:

VBA課程:職場及投資應用,20小時入門進階

最新文章: