【分享成果,随喜正能量】想一想,自己造下的、還沒忏悔清淨的惡有多少?要想臨終不随惡趣,有多困難?按照多數人目前的情況來看,根本沒有不堕落三惡趣的把握。但是,隻要你一心依止阿彌陀佛,就可以在這一生結束後直接生到淨土,徹底脫離惡趣,乃至永超生死苦海。。
《VBA中類的解讀及應用》教程【10165646】是我推出的第五套教程,目前已經是第一版修訂了。這套教程定位于最進階,是學完初級,中級後的教程。
類,是非常抽象的,更具研究的價值。随着我們學習、應用VBA的深入,有必要了解這些抽象的理論知識。對象,類,過程,方法,屬性,事件,接口,接口如何實作等等。掌握了這些理論,不僅對于VBA這種寄生語言的實質有所深入的了解,也對自然界的很多事物将同樣有所感悟。目前,這套教程程式檔案已經通過32位,64位兩種office系統測試。
這套教程共兩冊,八十四講,今後一段時間會給大家陸續推出修訂後的教程内容。今日的内容是:VBA中什麼是類,什麼是對象
第一講 什麼是類,什麼是對象
大家好,在我之前的教程中分别講了“VBA代碼解決方案”“VBA資料庫解決方案”“VBA字典和數組解決方案”,通過對這三套教程的學習,我們對VBA的基本知識和基本的操作能有了一定的了解。這套教材是在前面教材基礎上的繼續,希望大家在學習前面教材的基礎上再學習本套教材。這套教程,我們講解VBA的進階内容:VBA中類的解讀及應用。今日的内容是第一講:什麼是類,什麼是對象。
1 什麼是類
類是對象的“靈魂”。對象可以是任何事物,而類不會做任何事情,也不會占用記憶體,隻有當類成為對象并使用Set語句和New關鍵字執行個體化為具體對象後,才能做事情并占用記憶體。
把類執行個體化為具體對象的文法為:
Dim C As Class
Set C=New Class
上述語句建立了一個名為C的對象,該對象的資料類型為定義的類Class。其特點是:
1) 使用New關鍵字,可以建立任意數量類的新執行個體,并且能夠将其存儲在Collection對象中。
2) 使用Property Let、Set、Get語句,可以編寫代碼驗證賦給類元素的值,并且可以編寫當值改變時執行的相應代碼。例如,能夠編寫代碼確定某個值為要求的特性。
3) 類可以定義方法(使用Sub過程和Function過程),執行某項動作。
- 注意點:類與使用者自定義類型的差別,下面給出了自定義資料類型的特點,可以很明顯的看出兩者的不同:
1) 在編譯時必須聲明所有的自定義類型變量。可以使用動态數組來處理多個自定義類型,但須使用Redim Preserve關鍵詞。
2) 不能在運作時添加新的自定義類型變量。
3) 不能控制賦給自定義類型中元素的值。如隻能定義為整數,但假如要求是大于5的值無法進行控制。
4) 自定義類型隻是靜态地存儲資料。
2 什麼是類子產品,類屬性和方法
類子產品由屬性和方法組成,類本身類似于名詞;屬性可以當作形容詞,用來描述類;方法則為動詞,執行操作
3 類和對象的比較
讓我們先來看一條非常簡單的程式,親身體會一下類的廬山真面目:
Sub mynzclass1_1() '第一講 什麼是類,什麼是對象
Sheets("1").Activate
Range("A1").Value = "Hello,world"
End Sub
上面代碼的第二句:Range("A1").Value = "Hello,VBA world",我們把這這句代碼全部放開,把隐藏的補充完整,看看是什麼樣子:
Application.ActiveWorkbook.ActiveSheet.Range("A1").Value="Hello,VBA world"
我們解釋一下:
1) Range("A1")為對象,指定單元格.
2) Range("A1")前面,ActiveSheet也是對象,指定了哪個工作表。
3) ActiveSheet前面又有一個對象ActiveWorkbook,指定了是哪個工作薄,
4) ActiveWorkbook前面還有一個Application,指定的是哪個應用。
那麼其中的Value是什麼?Value是一個Range("A1")這個對象的一個屬性。那它是從哪來的呢?它是由Range類定義的。那麼range是類還是對象呢?别急,我慢慢講解,希望大家通過我的講解能了解類和對象的關系。
在上面的講解中,我們提到執行個體化類為具體對象的過程,其實在mynzclass_1引用了一個Range類,并将之執行個體化後修改了它的屬性。而在例子中,我們隻不過是将這一切都隐藏起來,直接對一個對象Range("A1")修改它的屬性,但Range("A1")這個對象正是引用了Ragne這個類,才具有了Range類的屬性"Value"。
我們把上面的代碼轉換一下:
Sub mynzclass1_2() '第一講 什麼是類,什麼是對象
Sheets("1").Activate
Dim RA As Range '引用一個Range類
Set RA = Range("A1") 'set将類執行個體化
RA.Value = "Hello,world" 'RA是一個對象了
Set RA = Nothing '将執行個體化銷毀
End Sub
代碼截圖:
代碼的運作:
上述第二段代碼是上面mynzclass1_1的原始代碼,從中我們看出類本身并不直接為我們做什麼,但是,它卻又一直默默地隐藏在幕後規化着我們的動作。是的,這就是類。它是通過對象的方式展現在我們的面前,讓我們無時無刻不與之交流,卻又常常在不經意間忽視了它的存在。
現在,再回到mynzclass1_1去看,就會很容易的發現,ActiveSheet實際引用了Worksheet類、ActiveWorkbook引用了Workbook類,而Application則引用了和它同名的Application類(這也正是我們會經常被混淆的一個概念,一個對象可以和被它所引用的類同名),原來我們在短短一個指派的語句中,已經在與這麼多的類打交道。
那我們又要怎樣來區分類和對象呢?其實它們經常成對地出現在我們面前,隻是一個是看得見摸得着的,一個卻深藏不露。我們可以這樣去了解類與對象:類是一個概念或是一種定義,每個類擁有其自己的特征和行為方式,而對象就是某個類的執行個體。是以類是對象的“靈魂”,它無處不在,而你卻看不到它。
比如:汽車。如果作為類:汽車的定義為有四個或者四個以上輪子,人能夠坐在上面,操作它行走的工具(好難的定義)。這個時候“汽車類”是有自己的屬性,如:汽車的前輪(是負責轉向的)。汽車的前玻璃(是負責擋風的)等等。這裡的“汽車”是一個概念抽象的概念。
而我們通常指的汽車是作為對象:如豐田汽車,就是汽車類中的一個大對象,這個大對象中還有小的對象,如“威馳FS”對象,屬性:輪子是某某牌子的,前擋風玻璃是某某牌子的。這些就是很具體的屬性值了。
今日内容回向:
1 什麼是類?
2 類和對象的聯系是什麼?
本講内容參考程式檔案:VBA-CLASS(1-28).xlsm
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中:
【分享成果,随喜正能量】人生的路上離不開朋友,有一個值去珍惜和記挂的朋友,便是人生的福氣。。