主頁 > 知識(shí)庫 > VBA 編程基礎(chǔ)

VBA 編程基礎(chǔ)

熱門標(biāo)簽:邯鄲外呼調(diào)研線路 樂昌電話機(jī)器人 開封百應(yīng)電銷機(jī)器人聯(lián)系方式 真人語音電銷機(jī)器人系統(tǒng) 電話機(jī)器人電話卡封號(hào)怎么辦 武漢呼叫中心外呼系統(tǒng)線路商 浦東上海400開頭的電話申請(qǐng) 北京語音電銷機(jī)器人價(jià)格 買了外呼系統(tǒng)不想用了怎么辦
11.3.1 了解 Visual Basic 語法
本節(jié)解釋最常見的語法元素。
11.3.1.1 Activate 方法的語法
語法:object.Activate
在 Activate 方法的語法中,object 是一個(gè)所提供信息的占位符,在此例中的代碼會(huì)返回一個(gè)對(duì)象。例如,下面的過程會(huì)在活動(dòng)的文檔中激活第二個(gè)窗口。
Sub MakeActive()
Windows(2).Activate
End Sub

11.3.1.2 MsgBox 函數(shù)的語法
語法:MsgBox(prompt[, buttons] [, title] [, helpfile, context])
在 MsgBox 函數(shù)的語法中,括號(hào)內(nèi)的參數(shù)是此函數(shù)的命名參數(shù)。方括號(hào)所包含的參數(shù)是選擇性的(在Visual Basic 中不用鍵入方括號(hào))。在 MsgBox 函數(shù)中,唯一必須提供的參數(shù)(prompt)是做為提示的文本。
在代碼中可以利用位置或名稱來指定函數(shù)與方法的參數(shù)。若利用位置來指定參數(shù),則必須根據(jù)語法中的順序,利用逗號(hào)來分隔每一個(gè)參數(shù),例如:
MsgBox "Your answer is correct!",0,"Answer Box"
若以名稱來指定參數(shù),則須使用參數(shù)名稱或跟著冒號(hào)與等號(hào)(:=),最后再加上參數(shù)值??梢匀魏蔚捻樞騺碇付麉?shù),例如:
MsgBox Title:="Answer Box", Prompt:="Your answer is correct!"
函數(shù)以及某些方法的語法會(huì)利用圓括號(hào)將參數(shù)封閉起來。這些函數(shù)和方法會(huì)返回值,所以必須用圓括號(hào)將參數(shù)封閉起來,才可以賦值給變量。如果忽略返回值或是沒有傳遞所有的參數(shù),則可以不用圓括號(hào)。方法若不返回值,則不用將參數(shù)用圓括號(hào)封閉起來。上述準(zhǔn)則不管是使用命名參數(shù)或位置參數(shù)都適用。
在下面的示例中,MsgBox 函數(shù)的返回值是一個(gè)號(hào)碼,它被存儲(chǔ)在變量 myVar 中,以用來指示選擇的按鈕。因?yàn)樾枰玫椒祷刂?,所以調(diào)用時(shí)必須使用圓括號(hào)。而另一個(gè)消息框則是用來顯示變量的值。

Sub Question()
myVar = MsgBox(Prompt:="I enjoy my job.", _
Title:="Answer Box", Buttons:="4")
MsgBox myVar
End Sub

11.3.1.3 選項(xiàng)語句的語法
語法:Option Compare {Binary | Text | Database}
在 Option Compare 語句的語法中,大括號(hào)和垂直線指示三項(xiàng)中的強(qiáng)制性選擇(在Visual Basic 的語句中不用鍵入大括號(hào))。例如,下列的語句指出在模塊中,字符串的比較是根據(jù)文本的排序順序而不區(qū)分大小寫。
Option Compare Text


11.3.1.4 Dim 語句的語法
語法: Dim varname[ ( [subscripts] ) ] [As type] [, varname[([subscripts])] [As type]] . . .
在 Dim 語句的語法中,Dim 是必備的關(guān)鍵字。而唯一必備的元素是 varname(變量名)。例如,下列的語句創(chuàng)建三個(gè)變量:myVar、 nextVar 和 thirdVar。它們會(huì)自動(dòng)被聲明成 Variant 變量。
Dim myVar, nextVar, thirdVar
下面的示例聲明了一個(gè)String 型的變量。它包含了數(shù)據(jù)類型,如此可以節(jié)省內(nèi)存并且可幫助從代碼中找出錯(cuò)誤。
Dim myAnswer As String
若在一個(gè)語句中聲明好幾個(gè)變量,則必須包含每一個(gè)變量的數(shù)據(jù)類型。變量在聲明時(shí)若少了數(shù)據(jù)類型,則會(huì)自動(dòng)地聲明為Variant 。
Dim x As Integer, y As Integer, z As Integer
在下列的語句中,x 與 y 都被指定成 Variant 數(shù)據(jù)類型,只有 z 被指定成 String 數(shù)據(jù)類型。
Dim x, y As Integer,Z As String
如果聲明一個(gè)數(shù)組變量,則必須包含圓括號(hào),但下標(biāo)則是可選的。下列的語句中定義了一個(gè)動(dòng)態(tài)數(shù)組 myArray。
Dim myArray()

11.3.2 有效地利用數(shù)據(jù)語法
表11-1 列出VBA 所支持的數(shù)據(jù)類型,以及存儲(chǔ)空間的大小與范圍。


注意:
任何數(shù)據(jù)類型的數(shù)組都需要 20 個(gè)字節(jié)的內(nèi)存空間,加上每一數(shù)組維數(shù)占 4 個(gè)字節(jié),再加上數(shù)據(jù)本身所占用的空間。數(shù)據(jù)所占用的內(nèi)存空間可以用數(shù)據(jù)元數(shù)目乘上每個(gè)元素的大小加以計(jì)算。例如,以 4 個(gè) 2 字節(jié)的Integer 數(shù)據(jù)元所組成的一維數(shù)組中的數(shù)據(jù),占 8個(gè)字節(jié)。這 8 個(gè)字節(jié)加上額外的 24 個(gè)字節(jié),使得這個(gè)數(shù)組所需總內(nèi)存空間為 32 個(gè)字節(jié)。包含一數(shù)組的 Variant 比單獨(dú)的一個(gè)數(shù)組需要多 12 個(gè)字節(jié)。
注意:
使用 StrConv 函數(shù)把字符串?dāng)?shù)據(jù)從一種類型轉(zhuǎn)換為另一種類型。
除非有其他的指定,否則未聲明變量會(huì)被指定成 Variant 數(shù)據(jù)類型。這個(gè)數(shù)據(jù)類型可使寫程序變得較容易,但它并不總是使用中最有效率的數(shù)據(jù)類型。
若有下列情形時(shí)必須考慮使用其他的數(shù)據(jù)類型:

程序非常大并且使用很多變量。
程序的執(zhí)行速度必須盡可能得快。
將數(shù)據(jù)直接寫到隨機(jī)存儲(chǔ)文件中。
除了 Variant 之外,支持的數(shù)據(jù)類型包括 Byte、Boolean、 Integer、Long、Single、Double、Currency、Decimal、Date、Object 以及 String。可使用 Dim 語句去聲明一個(gè)指定類型的變量,例如:
Dim X As Integer
上述語句聲明變量 X 是一個(gè)整型,其范圍介于-32,768~32,767 之間。如果試著去設(shè)置超出此范圍的數(shù)值給 X ,則會(huì)有錯(cuò)誤發(fā)生。如果試著去指定一個(gè)分?jǐn)?shù)給 X,則此分?jǐn)?shù)會(huì)自動(dòng)四舍五入。例如:
X = 32768 ' 產(chǎn)生錯(cuò)誤。 X = 5.9 ' 設(shè)置 x = 6。

11.3.3 Visual Basic 的命名規(guī)則
當(dāng)在 Visual Basic 的模塊中為過程、常數(shù)、變量以及參數(shù)命名時(shí),可以使用下列的規(guī)則:
第一個(gè)字符必須使用英文字母。
不能在名稱中使用空格、句點(diǎn)(.)、驚嘆號(hào)(!)、或 @、、 $,# 等字符。
名稱的長(zhǎng)度不可以超過 255 個(gè)字符。
通常,使用的名稱不能與 Visual Basic 本身的 Function 過程、語句以及方法的名稱相同。必須退出使用與程序語言的關(guān)鍵字相同的名稱。若所使用的內(nèi)在語言函數(shù),語句或方法與所指定的名稱相沖突,則必須顯示地識(shí)別它。常規(guī)會(huì)將內(nèi)建函數(shù),語句或方法的名稱之前加上關(guān)聯(lián)的類型庫的名稱。例如,如果有一個(gè)名為 Left 的變量,則只能用 VBA.Left 來調(diào)用 Left 函數(shù)。
不能在范圍的相同層次中使用重復(fù)的名稱。例如,不能在同一過程中聲明兩個(gè)命名為 age 的變量。然而,可以在同一模塊中聲明一個(gè)命名為 age 的私有變量和命名為 age 的過程級(jí)別的變量。
注意:
Visual Basic 不區(qū)分大小寫,但它會(huì)在名稱被聲明的語句處保留大寫。

11.3.4 聲明變量、常數(shù)和數(shù)組

11.3.4.1 聲明變量
通常會(huì)使用 Dim 語句來聲明變量。一個(gè)聲明語句可以放到過程中以創(chuàng)建屬于過程的級(jí)別的變量。或在聲明部分可將它放到模塊頂部,以創(chuàng)建屬于模塊級(jí)別的變量。
下面的示例創(chuàng)建了變量 strName 并且指定為 String 數(shù)據(jù)類型。 Dim strName As String
如果該語句出現(xiàn)在過程中,則變量 strName 只可以在此過程中被使用。如果該語句出現(xiàn)在模塊的聲明部分,則變量 strName 可以被此模塊中所有的過程所使用,但是不能被同一工程中不同的模塊所含過程來使用。為了使變量可被工程中所有的過程所使用,則在變量前加上 Public 語句,如以下的示例:
Public strName As String
變量可以聲明成下列數(shù)據(jù)類型中的一種:Boolean、Byte、 Integer、Long、Currency、Single、Double、Date、String(變長(zhǎng)字符串)、String * length (定長(zhǎng)字符串)、Object 或 Variant。如果未指定數(shù)據(jù)類型,則 Variant 數(shù)據(jù)類型被賦予默認(rèn)。也可以使用 Type 語句來創(chuàng)建用戶自定義類型。
可以在一個(gè)語句中聲明幾個(gè)變量。而為了指定數(shù)據(jù)類型,必須將每一個(gè)變量的數(shù)據(jù)類型包含進(jìn)來。在下面的語句中,變量 intX、 intY、與 intZ 被聲明為 Integer 類型。
Dim intX As Integer, intY As Integer, intZ As Integer
在下面的語句中,變量 intX 與 intY 被聲明為 Variant 類型;只有intZ 被聲明為 Integer 類型。
Dim intX, intY, intZ As Integer
在聲明語句中,不一定要提供變量的數(shù)據(jù)類型。若省略了數(shù)據(jù)類型,則會(huì)將變量設(shè)成 Variant 類型。
使用 Public 語句:可以使用 Public 語句去聲明公共模塊級(jí)別變量。
Public strName As String
公有變量可用于工程中的任何過程。如果公有變量是聲明于標(biāo)準(zhǔn)模塊或是類模塊中,則它也可以被任何引用到此公有變量所屬工程的工程中使用。
使用 Private 語句:可以使用 Private 語句去聲明私有的模塊級(jí)別變量。
Private MyName As String
私有變量只可使用于同一模塊中的過程。
注意:
在模塊級(jí)別中使用 Dim 語句與使用 Private 語句是相同的。不過使用 Private 語句可以更容易地讀取和解釋代碼。
使用Static 語句:當(dāng)使用 Static 語句取代 Dim 語句時(shí),所聲明的變量在調(diào)用時(shí)仍保留它原先的值。
使用Option Explicit 語句:在 Visual Basic 中可以簡(jiǎn)單地通過一個(gè)賦值語句來隱含聲明變量。所有隱含聲明變量都為 Variant 類型,而Variant 類型變量比大多數(shù)其他類型的變量需要更多的內(nèi)存資源。如果顯式地聲明變量為指定的數(shù)據(jù)類型,則應(yīng)用程序?qū)⒏行Аo@式聲明所有變量減少了命名沖突以及拼寫錯(cuò)誤的發(fā)生率。
如果不想使Visual Basic 生成隱含聲明,可以將Option Explicit 語句放置于模塊中所有的過程之前。這一個(gè)語句要求對(duì)模塊中所有的變量做顯式地聲明。如果模塊包含Option Explicit 語句,則當(dāng) Visual Basic 遇到一個(gè)先前未定義的變量或拼寫錯(cuò)誤,它會(huì)發(fā)生編譯時(shí)間的錯(cuò)誤。
可以設(shè)置 Visual Basic 程序環(huán)境中的某個(gè)選項(xiàng),使得自動(dòng)在所有新的模塊中包含 Option Explicit 語句。
注意: 需顯式地聲明固定大小的數(shù)組與動(dòng)態(tài)數(shù)組。
為自動(dòng)化聲明一個(gè)對(duì)象變量:當(dāng)使用一個(gè)應(yīng)用程序去控制另外一個(gè)應(yīng)用程序的對(duì)象時(shí),應(yīng)該設(shè)置一個(gè)對(duì)于其他應(yīng)用程序的類型庫的引用。若設(shè)置一個(gè)引用,則可以根據(jù)它們最常指定的類型來聲明對(duì)象變量。例如,如果是在 Microsoft Word 中,當(dāng)對(duì) Microsoft Excel 類型庫做一引用設(shè)置時(shí),可以在 Microsoft Word 中聲明 Worksheet 類型的變量來表示 Microsoft Excel 中的Worksheet 對(duì)象。
如果使用其他的應(yīng)用程序去控制 Microsoft Access 對(duì)象,在多數(shù)情況下,可以根據(jù)它們最常指定的類型來聲明對(duì)象變量。也可以使用關(guān)鍵字 New 去自動(dòng)生成一個(gè)對(duì)象的新實(shí)例。然而,可能要指示它是 Microsoft Access 對(duì)象。例如,當(dāng)在 Microsoft Visual Basic 里面聲明一個(gè)對(duì)象變量去表示 Microsoft Access form 時(shí),必須區(qū)別它是 Microsoft Access Form 對(duì)象或是 Visual Basic Form 對(duì)象。所以在聲明變量的語句中必須要包含類型庫的名稱,如下面示例所示:
Dim frmOrders As New Access.Form
某些應(yīng)用程序并不能識(shí)別特別的 Microsoft Access 對(duì)象類型。既使已經(jīng)在這些應(yīng)用程序中設(shè)置了一個(gè)對(duì) Microsoft Access 類型庫的引用,必須聲明所有 Microsoft Access 對(duì)象變量為 Object 類型。不能使用 New 關(guān)鍵字去創(chuàng)建這個(gè)對(duì)象的新實(shí)例。下面的示例顯示了不能識(shí)別 Microsoft Access 對(duì)象類型的應(yīng)用程序,如何去聲明一個(gè)變量用來表示 Microsoft Access Application 對(duì)象。然后應(yīng)用程序創(chuàng)建一個(gè) Application 對(duì)象的實(shí)例。
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")

11.3.4.2 聲明常數(shù)
如果要聲明一個(gè)常數(shù),可以使用 Const 語句去聲明,并且設(shè)置它的值;而在常數(shù)聲明完之后,則不能加以更改或賦予新值。
在聲明部分,可以在過程中或者在模塊頂部聲明常數(shù)。模塊級(jí)別中的常數(shù)默認(rèn)為私有的。若要聲明一個(gè)公共模塊級(jí)別常數(shù),則可以在 Const 語句前加上 Public 這個(gè)關(guān)鍵字。也可以利用在 Const 語句前加上 Public 關(guān)鍵字來明確地聲明一個(gè)私有的常數(shù),使得我們可更容易地去讀取并且解釋代碼。
下面的示例,聲明了一個(gè) Public 常數(shù) conAge 為 Integer 類型,并且指定它的值 為34。
Public Const conAge As Integer = 34
常數(shù)可以聲明成下列數(shù)據(jù)類型中的一種:Boolean、Byte、 Integer、Long、Currency、Single、Double、Date、String 或 Variant。因?yàn)橐呀?jīng)知道常數(shù)的值,所以可以指定 Const 語句中的數(shù)據(jù)類型。關(guān)于數(shù)據(jù)類型的詳細(xì)信息。
可以在一個(gè)語句中聲明數(shù)個(gè)常數(shù)。為了指定數(shù)據(jù)類型,必須將每一個(gè)常數(shù)的數(shù)據(jù)類型包含進(jìn)來。在下面的語句中,常數(shù) conAge 和 conWage 被聲明為 Integer 類型。
Const conAge As Integer = 34, conWage As Currency = 35000

11.3.4.3 聲明數(shù)組
數(shù)組的聲明方式和其他的變量是一樣的,它可以使用 Dim、 Static、Private 或 Public 語句來聲明。標(biāo)量變量(非數(shù)組)與數(shù)組變量的不同在于通常必須指定數(shù)組的大小。若數(shù)組的大小被指定的話,則它是個(gè)固定大小數(shù)組。若程序運(yùn)行時(shí)數(shù)組的大小可以被改變,則它是個(gè)動(dòng)態(tài)數(shù)組。
數(shù)組是否從 0 或 1 索引是根據(jù) Option Base 語句的設(shè)置。如果 Option Base 沒有指定為1,則數(shù)組索引從0 開始。
1.聲明固定大小的數(shù)組
下面這行代碼聲明了一個(gè)固定大小的數(shù)組,它是個(gè) 11 行乘以 11 列的Integer 數(shù)組:
Dim MyArray(10, 10) As Integer
第一個(gè)參數(shù)代表的是行;而第二個(gè)參數(shù)代表的是列。
與其他變量的聲明一樣,除非指定一個(gè)數(shù)據(jù)類型給數(shù)組,否則聲明數(shù)組中元素的數(shù)據(jù)類型為 Variant。數(shù)組中每個(gè)數(shù)組的數(shù)字型 Variant 元素占用 16 個(gè)字節(jié)。每個(gè)字符串型 Variant 元素占用 22 個(gè)字節(jié)。為了盡可能使寫的代碼簡(jiǎn)潔明了,則要明確聲明的數(shù)組為某一種數(shù)據(jù)類型而非 Variant。下面的這幾行代碼比較了幾個(gè)不同數(shù)組的大?。?
' 整型數(shù)組使用 22 個(gè)字節(jié)(11 元素* 2 字節(jié))。
ReDim MyIntegerArray(10) As Integer
' 雙精度數(shù)組使用 88 個(gè)字節(jié)(11 元素 * 8 字節(jié))。
ReDim MyDoubleArray(10) As Double
' 變體型數(shù)組至少使用 176 字節(jié)(11 元素 * 16 字節(jié))。
ReDim MyVariantArray(10)
' 整型數(shù)組使用 100 * 100 * 2 字節(jié)(20,000 字節(jié))。
ReDim MyIntegerArray (99, 99) As Integer
' 雙精度數(shù)組使用 100 * 100 * 8 字節(jié)(80,000 字節(jié))。
ReDim MyDoubleArray (99, 99) As Double
' 變體型數(shù)組至少使用 160,000 字節(jié)(100 * 100 * 16 字節(jié))。
ReDim MyVariantArray(99, 99)
數(shù)組變量的最大值,是以所用的操作系統(tǒng)有多少可用內(nèi)存為基礎(chǔ)。若使用的數(shù)組大小超過了系統(tǒng)中可用內(nèi)存總數(shù)的話,則速度會(huì)變慢,因?yàn)楸仨殢拇疟P中讀寫回?cái)?shù)據(jù)。
2.聲明動(dòng)態(tài)數(shù)組
若聲明為動(dòng)態(tài)數(shù)組,則可以在執(zhí)行代碼時(shí)改變數(shù)組大小??梢岳?Static、Dim、Private 或 Public 語句來聲明數(shù)組,并使括號(hào)內(nèi)為空,如下示例所示。
Dim sngArray() As Single
注意:
可以在過程中使用 ReDim 語句來做隱含性的數(shù)組聲明。當(dāng)使用 ReDim 語句時(shí)要小心點(diǎn),不要拼錯(cuò)數(shù)組的名稱。否則即使在模塊中有包含 Option Explicit 語句,仍然會(huì)因此而生成第二個(gè)數(shù)組。
對(duì)于過程中的數(shù)組范圍,可以使用 ReDim 語句去改變它的維數(shù),去定義元素的數(shù)目以及每個(gè)維數(shù)的底層綁定。每當(dāng)需要時(shí),可以使用 ReDim 語句去更改動(dòng)態(tài)數(shù)組。然而當(dāng)做這個(gè)動(dòng)作時(shí),數(shù)組中存在的值會(huì)丟失。若要保存數(shù)組中原先的值,則可以使用 ReDim Preserve 語句來擴(kuò)充數(shù)組。例如,下列的語句將 varArray 數(shù)組擴(kuò)充了10 個(gè)元素,而原本數(shù)組中的當(dāng)前值并沒有消失掉。
ReDim Preserve varArray(UBound(varArray) + 10)
注意:
當(dāng)對(duì)動(dòng)態(tài)數(shù)組使用 Preserve 關(guān)鍵字時(shí),只可以改變最后維數(shù)的上層綁定,而不能改變維數(shù)的數(shù)目。

11.3.5 過程及其調(diào)用
11.3.5.1 Function 過程
Function 過程是一系列由 Function 和 End Function 語句所包含起來的 Visual Basic 語句。Function 過程和 Sub 過程很類似,但函數(shù)可以返回一個(gè)值。Function 過程可經(jīng)由調(diào)用者過程通過傳遞參數(shù),例如常數(shù)、變量、或是表達(dá)式等來調(diào)用它。如果一個(gè) Function 過程沒有參數(shù),它的 Function 語句必須包含一個(gè)空的圓括號(hào)。函數(shù)會(huì)在過程的一個(gè)或多個(gè)語句中指定一個(gè)值給函數(shù)名稱來返回值。
在下面的示例中,Celsius 函數(shù)會(huì)根據(jù)華氏溫度來計(jì)算攝氏溫度。當(dāng) Main 過程調(diào)用此函數(shù)時(shí),會(huì)有一包含參數(shù)值的變量傳遞給此函數(shù)。而計(jì)算的結(jié)果會(huì)返回到調(diào)用的過程,并且顯示在一個(gè)消息框中。
Sub Main()
temp = Application.InputBox(Prompt:= _
"Please enter the temperature in degrees F.",
Type:=1)
MsgBox "The temperature is " Celsius(temp) "
degrees C."
End Sub
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function

11.3.5.2 Sub 過程
Sub 過程是一系列由 Sub 和 End Sub 語句所包含起來的 Visual Basic 語句,它們會(huì)執(zhí)行動(dòng)作卻不能返回一個(gè)值。Sub 過程可有參數(shù),例如常數(shù)、變量、或是表達(dá)式等來調(diào)用它。如果一個(gè) Sub 過程沒有參數(shù),則它的 Sub 語句必須包含一個(gè)空的圓括號(hào)。
下面 Sub 過程中,每一行都有注釋來解釋它的作用:

'聲明過程命名為 GetInfo
'該 Sub 過程沒有參數(shù)
Sub GetInfo()
'聲明字符串變量命名為 answer
Dim answer As String
'指定 InputBox 函數(shù)的返回值給 answer
answer = InputBox(Prompt:="What is your name?")
'條件 If...Then...Else 語句
If answer = Empty Then
'調(diào)用 MsgBox 函數(shù)
MsgBox Prompt:="You did not enter a name."
Else
'MsgBox 函數(shù)與 answer 變量連接。
MsgBox Prompt:="Your name is " answer
'結(jié)束 If...Then...Else 語句
End If
'結(jié)束 Sub 過程
End Sub

11.3.5.3 屬性過程
屬性過程是一系列的 Visual Basic 語句,它允許程序員去創(chuàng)建并操作自定義的屬性。屬性過程可以用來為窗體,標(biāo)準(zhǔn)模塊,以及類模塊創(chuàng)建只讀屬性??杀挥脕碓诖a中代替 Public 變量,當(dāng)設(shè)置屬性值時(shí)上述動(dòng)作應(yīng)被執(zhí)行。
與 Public 變量不同,在對(duì)象瀏覽器中屬性過程會(huì)有一些幫助字符串指定給自定義的屬性。
當(dāng)創(chuàng)建一個(gè)屬性過程時(shí),它會(huì)變成此過程所包含的模塊的一個(gè)屬性。Visual Basic 提供下列三種類型的 Property 過程:
Property Let 用來設(shè)置屬性值的過程。
Property Get 用來返回屬性值的過程。
Property Set 用來設(shè)置對(duì)對(duì)象引用的過程。
聲明屬性過程的語法如下所示:
[Public | Private] [Static] Property {Get | Let | Set}
propertyname_ [(arguments)] [As type]
statements
End Property
屬性過程通常是成對(duì)使用的:Property Let 與 Property Get 一組,而 Property Set 與 Property Get 一組。單獨(dú)聲明一個(gè) Property Get 過程就像聲明只讀屬性。三個(gè) Property 過程一起使用時(shí),只有對(duì) Variant 變量有用,因?yàn)橹挥?Variant 才能包含一個(gè)對(duì)象或其他數(shù)據(jù)類型的信息。Property Set 本意是使用在對(duì)象上;而 Property Let 則不是。
在 Property 過程聲明中所需要的參數(shù)如下:
Property Get Property Get propname(1, ..., n) As type
Property Let Property Let propname(1, ..., n, n+1)
Property Set Property Set propname(1, ..., n, n+1)
在具有相同名稱屬性過程中,從第一個(gè)到最后一個(gè)參數(shù)(1, ..., n)都必須共享相同的名稱與數(shù)據(jù)類型。
Property Get 過程聲明時(shí)所需的參數(shù)比相關(guān)的 Property Let 以及 Property Set 聲明少一個(gè)。Property Get 過程的數(shù)據(jù)類型必須與相關(guān)的 Property Let 以及 Property Set 聲明中的最后 (n+1)個(gè)參數(shù)的類型相同。例如,如果聲明下列的 Property Let 過程,則 Property Get 聲明所使用參數(shù)的名稱與數(shù)據(jù)類型必須同 Property Let 過程中所用的一樣。

Property Let Names(intX As Integer, intY As Integer,
varZ As Variant)
' 執(zhí)行語句.
End Property
Property Get Names(intX As Integer, intY As Integer)
As Variant
' 執(zhí)行語句.
End Property
在 Property Set 聲明中,最后一個(gè)參數(shù)的數(shù)據(jù)類型必須是對(duì)象類型或是 Variant。

11.3.5.4 調(diào)用 Sub 以及 Function 過程
從其他過程調(diào)用一個(gè) Sub 過程時(shí),必須鍵入過程名稱以及任何需要的參數(shù)值。而 Call 語句并不需要,不過若使用它,則任何參數(shù)必須以括號(hào)括起來。
可以使用 Sub 過程去組織其他的過程,因此可以較容易地了解并調(diào)試它們。在下面的示例中,Sub 過程 Main 傳遞參數(shù)值 56 去調(diào)用 Sub 過程 MultiBeep。運(yùn)行 MultiBeep 后,控件返回 Main,然后 Main 調(diào)用 Sub 過程 Message。Message 顯示一個(gè)信息框;當(dāng)按“確定”鍵時(shí),控件會(huì)返回 Main,接著 Main 退出執(zhí)行。

Sub Main()
MultiBeep 56
Message
End Sub
Sub MultiBeep(numbeeps)
For counter = 1 To numbeeps
Beep
Next counter
End Sub
Sub Message()
MsgBox "Time to take a break!"
End Sub
1.調(diào)用具有多個(gè)參數(shù)的 Sub 過程
下面的示例展示了調(diào)用具有多個(gè)參數(shù)的 Sub 過程的兩種不同方法。當(dāng)?shù)诙握{(diào)用 HouseCalc 時(shí),因?yàn)槭褂?Call 語句所以需要利用括號(hào)將參數(shù)括起來。

Sub Main()
HouseCalc 99800, 43100
Call HouseCalc(380950, 49500)
End Sub
Sub HouseCalc(price As Single, wage As Single)
If 2.5 * wage = 0.8 * price Then
MsgBox "You cannot afford this house."
Else
MsgBox "This house is affordable."
End If
End Sub
在調(diào)用 Function 過程時(shí)使用括號(hào)。
為了使用函數(shù)的返回值,必須指定函數(shù)給變量,并且用括號(hào)將參數(shù)封閉起來;如下示例所示:
Answer3 = MsgBox("Are you happy with your salary?", 4, "Question 3")
如果不在意函數(shù)的返回值,可以用調(diào)用 Sub 過程的方式來調(diào)用函數(shù)。如下面示例所示,可以省略括號(hào),列出參數(shù)并且不要將函數(shù)指定給變量:
MsgBox "Task Completed!", 0, "Task Box"
注意在上述例子中若包含括號(hào),則語句會(huì)導(dǎo)致一個(gè)語法錯(cuò)誤。
2.傳遞命名參數(shù)
Sub 或 Function 過程中的語句可以利用命名參數(shù)來傳遞值給被調(diào)用的過程。參數(shù)有兩種傳遞方式:按值來傳遞和按地址來傳遞。按值傳遞只是傳遞參數(shù)的一個(gè)副本,在函數(shù)內(nèi)建立一個(gè)同參數(shù)類型及內(nèi)容一樣的變量,在過程體內(nèi)部參數(shù)對(duì)參數(shù)所作的改變不會(huì)影響到實(shí)際參數(shù);按地址傳遞則不然,它傳遞的是實(shí)際參數(shù)的地址,過程中所有對(duì)參數(shù)的改變都將影響到實(shí)際參數(shù)”。命名參數(shù)的組成是由參數(shù)名稱緊接著冒號(hào)(:=)以及等號(hào),然后指定一個(gè)值給參數(shù)。
下面的示例使用命名參數(shù)來調(diào)用不具返回值的 MsgBox 函數(shù)。
MsgBox Title:="Task Box", Prompt:="Task Completed!"
下面的示例使用命名參數(shù)調(diào)用 MsgBox 函數(shù)。將返回值指定給變量 answer3。
answer3 = MsgBox(Title:="Question 3", _
Prompt:="Are you happy with your salary?", Buttons:=4)

11.3.5.5 調(diào)用屬性過程
表11-2 列出了調(diào)用屬性過程的語法。

當(dāng)調(diào)用一個(gè) Property Let 或 Property Set 過程時(shí),總是會(huì)有一個(gè)參數(shù)出現(xiàn)在等號(hào)(=)的右邊。
當(dāng)用多個(gè)參數(shù)聲明一個(gè) Property Let 或 Property Set 過程時(shí), Visual Basic 傳遞調(diào)用的右邊參數(shù),給 Property Let 或 PropertySet 聲明中的最后一個(gè)參數(shù)。例如,圖11-18 顯示了 Property 過程調(diào)用中的參數(shù)與 Property Let 聲明中的參數(shù)的關(guān)系:

實(shí)際上,將屬性過程與多個(gè)參數(shù)合用只有在創(chuàng)建屬性的數(shù)組時(shí)才會(huì)使用。
您可能感興趣的文章:
  • excel vba 高亮顯示當(dāng)前行代碼
  • VBA 瀏覽文件夾對(duì)話框調(diào)用的幾種方法
  • Excel VBA連接并操作Oracle
  • vba 獲取PPT幻燈片中的所有標(biāo)題的代碼
  • VBA中連接SQLSERVER數(shù)據(jù)庫例子
  • VBA解決Windows空當(dāng)接龍的617局

標(biāo)簽:石嘴山 宜春 鄂州 河北 松原 淄博 六安 自貢

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《VBA 編程基礎(chǔ)》,本文關(guān)鍵詞  VBA,編程,基礎(chǔ),VBA,編程,基礎(chǔ),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《VBA 編程基礎(chǔ)》相關(guān)的同類信息!
  • 本頁收集關(guān)于VBA 編程基礎(chǔ)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章