標籤:des cWeb style blog color io os 使用 java
Excel VBA工程的工作表類及對象
一、建立活頁簿時的工作表類與對象:
1.類與對象的建立:
2.類與對象的名稱:
二、修改CodeName:
1.CodeName在運行期間是唯讀,即運行期間不能用代碼改變工作表的這個屬性,只能讀取這個屬性,否則會彈出錯誤對話方塊如下。
2.同步修改:
[1]CodeName可以修改,但只能在屬性視窗中進行修改;
[2]當對它進行修改時,對應的類名和工作表對象名都會隨之更改.
3.CodeName可以是中文,方便引用:
[1]當把CodeName改為“呵呵”之後就可以直接用“呵呵”來代指標籤名為“實驗”的工作表,VBA代碼中極大方便對該工作表的訪問。
[2]使用CodeName來引用工作表實驗,代碼及效果如下:
1 Sub test1()2 Debug.Print "呵呵.Name = " & Chr(34) & 呵呵.Name & Chr(34)3 Debug.Print "呵呵.CodeName = " & Chr(34) & 呵呵.CodeName & Chr(34)4 End Sub
三、CodeName更改對工作表對象的影響:
看一個實驗,代碼如下:
1.“呵呵”工作表代碼:
1 Public Value As Integer
2.ThisWorkBook模組代碼:
1 Sub test2()2 For i = 1 To 33 Debug.Print "==========第" & CStr(i) & "次=========="4 Debug.Print "改變前:呵呵.Value = " & CStr(呵呵.Value)5 呵呵.Value = 呵呵.Value + 26 Debug.Print "改變後:呵呵.Value = " & CStr(呵呵.Value)7 Next8 End Sub
3.將CodeName從“呵呵”修改變“Sht”,然後再執行以下代碼:
1 Sub test3()2 Debug.Print "從屬性視窗將CodeName從“呵呵”改" & _3 "變為“Sht”之後:Sht.Value = " & CStr(Sht.Value)4 End Sub
由此可見,當CodeName被修改時,代表其工作表的類的類名會跟著更改,代表其工作表的原有對象將被銷毀(無法再訪問),並會用新的類名所代表的類重新初始化一個此工作表對象。
四、總結:
1.CodeName在VBA代碼運行期間是唯讀,要修改CodeName只能通過屬性視窗手動修改;
2.CodeName與工作表相關聯的VBA代碼類的類名以及工作表在VBA代碼中的對象名是同步的,一改同改;
3.CodeName修改時,工作表對象將會從新的類名代表的工作表類重新初始化,原有的此工作表的工作表對象的資料及狀態將丟失;
4.CodeName可以是中文;
5.Name只是工作表的標籤名,在VBA代碼中不能作為工作表的引用來使用;
6.活頁簿開啟時/工作表CodeName改變時/工作表新增/工作表被移入當前活頁簿時,工作表對象將從工作表類被初始化或者重新初始化;
7.活頁簿關閉/工作表CodeName改變/工作表被刪除/工作表被移動到其它活頁簿時,已經存在的對應的工作表對象將被銷毀;
8.上述6-7之間時工作表對象的存在期,這之間的任何VBA代碼對工作表對象的操作將被儲存在工作表對象的各種屬性中,當然有些改變也會反應在Excel介面上;
9.工作表類中聲明的全域變數也是工作表的屬性它們在上述6-7過程中的所有修改都會儲存在它所在的記憶體中,當然對這些聲明的全域變數所做的修改,不會如工作表對象其它固有屬性那樣被永久儲存,這些修改在超過其生命週期時,將丟失,下次再被初始化時,上一次的狀態將不複存在,所以如果有必要,就要注意這些全域變數的本地化了(儲存結果資料的意思)。
Excel工作表的VBA物件模型