excel vba 指令對象
excel vba 指令對象
至此,我們已經了解了對象、屬性和方法的基本概念,認識了Excel的對象模型以及常用的對象在VBA中的表示,以及如何使用對象的屬性和方法,這些都是Excel VBA編程最基礎的部分。熟悉和了解這些知識,對進一步學習VBA編程很重要。
為了進一步鞏固已經學習的知識,我們引用Excel先生(Bill Jelen)的著作《VBA and Macros for Microsoft Excel》中的例子,稍作修改,再次形象化地說明相關的概念和表示對象的基礎語法結構。
假設我們使用VBA來玩足球,那么踢球的指令應該類似下面這樣:
“Kick the Ball”(中文為:“踢球”)
這就是我們平時說話的方式,具有很明確的意義,句子中有動詞(Kick)和名詞(the Ball)。還記得前面的系列文章中的VBA代碼,也有動詞(Add)和名詞(Worksheets)。
雖然說平時我們用于踢球的指令聽起來已經很自然,但是VBA代碼并不是這樣來表示的。如果使用VBA來踢足球,那么基礎的語言結構應該是:
Ball.Kick
這里的名詞(Ball),位于最前面,在VBA中,就是對象,也有動詞(Kick)緊隨在名詞之后,在VBA中,就是方法。
這也就是VBA中最基礎的結構:
對象.方法(Object.Method)
如果使用VBA編寫程序,就一定要習慣于這樣的結構。
接著來做假設。在綠色的草地上,放在你面前的有5個球,分別是足球、籃球、棒球、保齡球和網球。現在,你給足球隊員發出一條指令:
Kick the soccer ball(中文為:踢足球)
如果你僅僅告訴他踢球(或者Ball.Kick),沒有明確踢哪一個球,可能他就會踢離他最近的那一個,例如保齡球,這明顯會出問題。
對于任何名詞或者對象,在VBA中,都會有一類對象集合。看看Excel中,可以有一行,也可以有多行;可以有一個單元格,也可以有多個單元格;可以有一個工作表,也可以有多個工作表。對象與對象集合的惟一不同之處就是需要在對象的名稱后面加上一個表示復數的“s”,例如:
Workbook成為Workbooks
Worksheet成為Worksheets
Ball成為Balls
當所指的是某個對象集合時,就需要告訴VBA具體要操作的對象。可以使用不同的方法。
一種方法是使用數字來指明具體的對象:
Balls(2).Kick
然而,這種方式雖然可以達到目的,但也比較危險。例如,可能最初代碼工作得很好,但某個時候某人調整了球的順序,那么Balls(2).Kick可能就變為踢到其他的球了。
另一種方法是使用名稱來指明具體的對象,這是一種比較安全的方式:
Balls(“Soccer”).Kick
很明確地知道是要踢足球。
在Excel VBA中,對于大多數動詞或者方法,都會有參數告訴如何執行動作,這些參數相當于副詞。你可能想把足球踢到左邊并且是使勁踢:
Balls(“Soccer”).KickDirection:=Left,Force:=Hard
多數方法都有大量的參數告訴程序如何執行方法。
在查看VBA代碼時,當看到冒號和等號的組合時,就說明是使用參數描述動詞如何執行動作。(而對于屬性來說,則是進一步描述形容詞的特性)
有時,某個方法可能會有10個參數,其中有些參數是可選的,可能Kick方法有一個Elevation參數,使用下面的代碼:
Balls(“Soccer”).KickDirection:=Left,Force:=Hard,Elevation:=High
這里容易讓人搞糊涂。每個方法的參數都有默認的順序,如果你碰巧知道參數的位置,那么可以不使用參數的名稱,下面的代碼等效于上面的代碼:
Balls(“Soccer”).Kick Left,Hard,High
這也可能影響我們對代碼的理解,沒有冒號和等號的組合,參數的含義就不那么明顯了。當然,知道參數的順序,是可以理解其意思的,但大多數參數的順序我們是無法全部記住的。
上面例子中的Left、Hard和Hign還是比較容易理解,但使用下面的參數時:
WordArt.Add Left:=10,Top:=20,Width:=100,Height:=200
將其簡寫成下面的代碼:
WordArt.Add 10,20,100,200
這就讓人困惑了!這也是一條有效的代碼,但除非你知道Add方法默認的順序分別是Left、Top、Width、Height,否則這條代碼的意思很難明白。
再復雜一些。用戶在一條代碼中可以指定某個參數的名稱,省略掉另外參數的名稱。例如,用戶在不指明參數名稱的情況下在參數的默認位置設置參數,然后突然帶上一個指明名稱的參數,而且這個參數不一定在默認的位置上。如果想把踢高高地踢到左邊,而不介意力量的大小(使用默認的力量),那么下面的兩條語句是等效的:
Balls(“Soccer”).Kick Direction:=Left,Elevation:=High
Balls(“Soccer”).Kick Left, Elevation:=High
一旦開始指明參數名,后面的代碼就都需要指明參數名稱。
靈活的參數表示,方便的同時也帶來了問題!
對于對象的屬性的參數來說,也有類似的規則。
有些方法很簡單,例如要模擬按下F9鍵(即重新計算工作表),可以使用如下代碼:
Application.Calculate
有些方法可以執行一個動作并創建新的對象,例如,下面的代碼添加一張工作表:
Worksheets.Add Before:=Worksheets(1)
可以將Add方法創建的新對象指定給一個變量,此時,必須使用括號將參數包住:
Set MyWorksheet= Worksheets.Add(Before:=Worksheets(1))
與很多解對象的書相似,一般代表對象的是名詞,代表方法的是動詞,而代表屬性的則是形容詞。前面我們過,代碼中的:
ActiveCell
代表活動單元格。
現在,我們想將活動單元格的顏色更改為黃色,要用到其屬性Interior.ColorIndex,代碼如下:
ActiveCell.Interior.ColorIndex = 6
雖然代碼中用到了兩個句點,看似復雜一點,但是其結構仍然是“名詞+點+其他內容”,這次是Object.Property(對象.屬性)。
差別在于,給屬性賦值時,等號前面沒有冒號。
對象的屬性總是被設置成等于什么,或者是獲取屬性的值給變量或其它對象的屬性。
例如,要將當前單元格的顏色設置成單元格A1的顏色,代碼如下:
ActiveCell.Interior.ColorIndex =Range(“A1”).Interior.ColorIndex
Interior.ColorIndex是屬性,通過更改屬性的值,可以將對象的表現進行相應的更改。更改形容詞就可以對單元格進行某些設置。我們通常會說“將單元格設置為紅色的”,而VBA會這樣“說”:
ActiveCell.Interior.ColorIndex = 3
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。