讀古今文學網 > 別怕,ExcelVBA其實很簡單 > 3.3 存儲數據的容器:常量和變量 >

3.3 存儲數據的容器:常量和變量

3.3.1 常量和變量

常量和變量是VBA存儲數據的兩種容器。

一個醬油瓶可以打多次醬油,第一斤醬油用完了,拿到小買部滿滿的一瓶又提著回來。變量就像醬油瓶,可以隨時隨地把裡面原有的醬油倒掉,再裝入新的醬油。

而常量就像袋裝醬油的包裝袋,一旦往裡面裝入醬油,就不能更換其他的醬油。

因此,無論存儲什麼類型的數據,變量都可以更換內容,重複使用,而常量不可以。這是變量和常量的區別。

3.3.2 使用變量

存儲在變量裡的數據可以更換,因此變量通常用來存儲在程序運行過程中需要臨時保存的數據或對象。

聲明變量

就像指定瓶子的名稱和用途一樣,聲明變量就是指定變量的名稱和可以存儲的數據類型。可以用語句:

如:

聲明為String(變長)的變量最長可以串儲約20億個字符,見表3-1,如果要聲明定長的String變量,就在聲明時指定它可以存儲的數據的長度,如:

指定變量的數據類型後,該變量只能存儲指定類型的數據,而不能存儲其他類型的數據。

使用變量類型聲明符

只有部分數據類型可以使用類型聲明符,如表3-3所示。

表3-3 類型聲明符

數據類型類型聲明字符Integer%Long&Single!Double#Currency@String$

聲明多個變量

聲明多個變量,可以寫在同一個Dim後面,變量名之間用逗號隔開。

也可以用不同的語句聲明:

如果不指定變量類型

什麼是Variant

Variant類型也稱為變體型。

之所以稱為變體,是因為Variant類型的變量可以根據需要存儲的數據類型改變自己的類型與之匹配。就像一個無窮大的大水缸,不管你有多少斤醬油都可以裝在裡面,不管是什麼東西都可以裝在裡面。

為什麼要聲明變量類型

同上街打醬油一樣,儘管大水缸可以裝下任意多的醬油,但如果預先已經知道自己只打一斤醬油,你會不會選擇背著大水缸去?

相比水缸,帶著醬油瓶會走得更快。計算機也一樣,運行程序時,數據佔用的字節越小,程序運行就越快,所以,聲明變量為合適的數據類型是一個好習慣。

Variant類型比其他數據類型佔用更大的存儲空間(見表3-1),因此,編寫VBA程序時,除非必須需要,否則應避免聲明變量為Variant類型。

強制聲明所有變量

方法一:在模塊的第一句手動輸入代碼:「Option Explicit」。

Step 1:插入一個模塊,在代碼窗口中輸入下面的程序,如圖3-4所示。

圖3-4 強制聲明變量

Step 2:運行程序,出現提示,如圖3-5所示。

圖3-5 執行程序後出錯

方法二:按圖3-6所示設置完成後,VBA會在每個模塊的第一句自動寫下「Option Explicit」而無需用戶手動輸入。

圖3-6 設置強制聲明變量

還可以這樣聲明變量

如:

變量的作用域

我家廚房裡的醬油瓶只供我的家人使用,因為它只屬於我家。村頭的那口老井,誰都可以在裡面打水,因為它是全村共有的。

醬油瓶和水井的作用域不同,決定了哪些人有資格使用它。

變量的作用域決定變量可以在哪個模塊或過程中使用。VBA中的變量有3種不同級別的作用域,如表3-4所示。

表3-4變量的作用域

作用域描述單個過程在一個過程中使用Dim或Static語句聲明的變量,作用域為本過程,即只有聲明變量的語句所在的過程可以使用它。這樣的變量稱為本地變量單個模塊在模塊的第一個過程之前使用Dim或Private語句聲明的變量,作用域為聲明變量的語句所在模塊裡的所有過程,即該模塊裡所有的過程都可以使用它。這樣的變量稱為模塊級變量所有模塊在一個模塊的第一個過程之前使用Public語名聲明的變量,作用域為所有模塊,即所有模塊裡的過程都可以使用它。這樣的變量稱為公共變量

圖3-7~圖3-9所示為不同類型的變量的聲明語句。

圖3-7 聲明本地變量

圖3-8 聲明模塊級變量

圖3-9 聲明公共變量

注意:公共變量必須在模塊對像中聲明,在工作表、窗體等對像中,即使使用Public語句聲明變量,該變量也只是模塊級變量。

把數量存儲到變量裡

把數據存儲到變量裡,稱為給變量賦值。

如果給文本、數值、日期等數據型變量賦值,語句為:

給變量賦值後,當使用這個數據時,可以直接使用變量名稱代替對應的數據。如:

這個程序定義一個String型的變量,然後給變量賦值,最後把變量的值定入活動工作表的A1單元格中。運行程序,結果如圖3-10所示。

圖3-10 使用變量

如果給對像變量(Object型,如單元格)賦值,語句為:

如:

這個程序在Sheet1工作表的A1單元格中輸入文本「歡迎來到Excel Home論壇」,運行程序,結果如圖3-11所示。

圖3-11 使用對像變量