301
技術社區[雲棲]
QTP自動化測試之VBScript基礎
要想使用QTP進行自動化測試,必須了解VBScript這門語言,對於使用過ASP或VB開發的人來說,VBScript已經再熟悉不過了,但是沒有接觸過VBScript的同學也不要灰心,因為這門語言簡單易學。
1. VBScript利器
2. Hello World
3. 數據類型
4. 變量
5. 常數
6. 運算符
1. VBScript利器
子曰:工欲善其事,必先利其器。學習一門語言自然是離不開工具及文檔,有好的工具及文檔在手,學習起來也會得心應手。在此,我推薦大家一個很不錯的編輯工具——VbsEdit,該工具既能編輯代碼,又可調試代碼,有不錯的智能提示,還有很多示例代碼。可惜不是免費使用,不過網上已經有綠色版,您可以搜索下載。若你已經安裝了QTP,那麼使用QTP工具也是一個不錯的選擇。參考文檔可以使用在線版《Microsoft Windows腳本技術》,也可以從網上搜索下載CHM文件。
2. Hello World
每種語言的入門都是一樣,從簡單的Hello World開始,我們也不例外。如何使用VBScript來彈出一個對話框顯示Hello World問候語呢?很簡單,代碼如下:
- MsgBox("Hello world!")
- MsgBox "Hello world!"
- result = MsgBox("Hello World!", vbOKOnly, "Greeting")
- MsgBox "Hello World!", vbOKOnly, "Greeting"
既然在此出現的第一個函數是MsgBox,那麼就簡單介紹一下該函數,其簽名如下:
- MsgBox(prompt[, buttons][, title][, helpfile, context])
主要參數:
- prompt:為要顯示的消息,其他帶[]參數為可選參數;
- buttons:為顯示對話框按鈕及類型,默認值為0,即隻顯示“確定”按鈕;
- title:為對話框標題欄文字。
MsgBox函數也有返回值,當你點擊確定或取消按鈕時,其返回的值是不一樣的。其他詳細內容,大家可以去查閱參考文檔,這裏就不逐一說明。
3. 數據類型
VBScript隻有一種數據類型——Variant,它是根據上下文來判斷是數字還是字符串。因為Variant是VBScript中唯一的數據類型,所以它也是VBScript中所有函數的返回值的數據類型。為了進一步區分數據類型,它包含如下數據子類型:
子類型 | 描述 |
---|---|
Empty | 未初始化的Variant。對於數值變量,值為0;對於字符串變量,值為零長度字符串 ("")。 |
Null | 不包含任何有效數據的Variant。 |
Boolean | 包含True或False。 |
Byte | 包含0到255之間的整數。 |
Integer | 包含-32,768到32,767之間的整數。 |
Currency | -922,337,203,685,477.5808到922,337,203,685,477.5807。 |
Long | 包含-2,147,483,648到2,147,483,647之間的整數。 |
Single | 包含單精度浮點數,負數範圍從-3.402823E38到-1.401298E-45,正數範圍從1.401298E-45到3.402823E38。 |
Double | 包含雙精度浮點數,負數範圍從-1.79769313486232E308到-4.94065645841247E-324,正數範圍從4.94065645841247E-324到1.79769313486232E308。 |
Date (Time) | 包含表示日期的數字,日期範圍從公元100年1月1日到公元9999年12月31日。 |
String | 包含變長字符串,最大長度可為20億個字符。 |
Object | 包含對象。 |
Error | 包含錯誤號。 |
您可以使用轉換函數(CInt,CStr等等)來轉換數據的子類型。另外,可使用VarType函數返回數據的Variant子類型。
4. 變量
4.1. 變量聲明
變量聲明有兩種方式——顯式與隱式,顯式使用Dim、Public、Private語句進行聲明,隱式直接使用變量名。使用隱式聲明方式的習慣不好,因為這樣有時會由於變量名拚錯而導致程序運行出現意外,因此,最好在每個腳本開始第一行使用Option Explicit語句強製顯式聲明所有變量。聲明示例如下:
- Option Explicit
- Dim i, conn '聲明多個變量時用逗號隔開
- Public UserName, Password
- Private m_id
注意:在VBScript中,變量名是不區分大小寫,即userName與UserName是指同一個變量。
4.2. 命名規則
VBScript中變量命名是有其規則標準的,變量命名必須遵循:
- 第一個字符必須是字母。
- 不能包含嵌入的句點。
- 長度不能超過255個字符。
- 在被聲明的作用域內必須唯一。
4.3. 作用域與存活期
變量的作用域由聲明它的位置所決定。如果在過程中聲明的,則隻有該過程可以使用,即過程級變量;如果在過程之外聲明的,則該變量可以被腳本中所有過程所使用,即Script級變量。
變量所存在的時間為存活期。Script級變量的存活期為從被聲明開始,直到腳本運行結束為止;過程級變量的存活期僅是過程被調用執行開始到結束的時間。不同的過程可以使用相同的變量名,因為局部變量隻有聲明它的過程才能識別。
4.4. 變量賦值
給變量賦值很簡單,使用等號進行賦值,等號左邊為變量名,右邊為變量值。若該變量是對象引用級別的,則需使用Set語句。示例代碼如下:
- Dim i, conn, ui
- i = 0
- Set conn = CreateObject("ADODB.Connection")
- Set ui = New UserInfo
4.5. 標量與數組
隻包含一個值的變量成為標量變量;有時候為了方便將一組相關值賦給一個變量,則成為數組變量。區別標量與數組的唯一方式是聲明時數組變量名後麵帶有括號()。變量聲明就不說了,前麵已經提到,這裏我們看看怎樣聲明一維數組及多維數組(最大60維——:)隻要您能夠理解)。
- Dim a(9), table(2, 3)
- a(0) = 1
- ...
- a(9) = 11
- MsgBox(a(1)) '輸出數組變量值
- table(0, 0) = 1
- ...
- table(2, 3) = 10
我們也可以聲明動態數組(在運行腳本時大小發生變化的數組),使用Dim或ReDim語句,但括號中不包含任何數字。要使用動態數組,必須隨後使用ReDim確定維數和每一維的大小。若同時使用Preserve關鍵字,則在重新調整大小時保留數組的內容。
- Dim count, a()
- count = 9
- ReDim a(count)
- ReDim Preserve a(10)
5. 常數
常數在VBScript中是表示不變的值,用於代替數字或字符串。其內部定義了許多常數,都是以vb開頭,例如在Hello World程序中涉及到的MsgBox常數“vbOKOnly”。除了MsgBox常數外,還有顏色常數、比較常數、日期和時間常數等等,詳見參考文檔。
內部自帶常數,我們可以直接使用。當自帶常數不能滿足我們的需求時,我們也可以自定義常數,在VBScript中是使用Const語句來定義常數,該語句的簽名如下:
- [Public | Private] Const constname = expression
主要參數:
- constname:為常數名稱,為了區分常數與變量,最好有一套自己的命名規則,這裏推薦字母全大寫,單詞間用下劃線分割;
- expression:文字或其他常數,或包括除 Is 外的所有算術運算符和邏輯運算符的任意組合。
常數默認是Public級別,您也可以指定為Private級別,在同一行中聲明多個常數需要用逗號分割,常數聲明中不能使用變量、自定義函數及內部函數。下麵是常數的一些示例代碼:
- Const PI = 3.14 '常數默認為公有。
- Private Const STEP_APPLY = "Apply" '定義私有常數。
- Const STEP_APPLY = "Apply", PI = 3.14 '在一行上定義多個常數。
6. 運算符
VBScript有一套完整的運算符,包括算術運算符、比較運算符、連接運算符和邏輯運算符。當表達式中含有多個運算符時,它們的運算優先級是:算術運算符 > 比較運算符 > 邏輯運算符。所有比較運算符的優先級相同,算術運算符和邏輯運算符的優先級如下所示:
6.1. 算術運算符
描述 | 符號 |
---|---|
求冪 | ^ |
負號 | - |
乘 | * |
除 | / |
整除 | \ |
求餘 | Mod |
加 | + |
減 | - |
字符串連接 | & |
字符串連接 (&) 運算符不是算術運算符,但是在優先級順序中,它排在所有算術運算符之後和所有比較運算符之前。
6.2. 邏輯運算符
描述 | 符號 |
---|---|
邏輯非 | Not |
邏輯與 | And |
邏輯或 | Or |
邏輯異或 | Xor |
邏輯等價 | Eqv |
邏輯隱含 | Imp |
6.3. 比較運算符
描述 | 符號 |
---|---|
等於 | = |
不等於 | <> |
小於 | < |
大於 | > |
小於等於 | <= |
大於等於 | >= |
對象引用比較 | Is |
Is 運算符是對象引用比較運算符。它並不比較對象或對象的值,而隻是進行檢查,判斷兩個對象引用是否引用同一個對象。
7. 條件語句
VBScript中可以使用以下條件語句:
- If…Then…Else語句
- Select Case語句
7.1. If…Then…Else語句
If…Then…Else語句結構如下:
- If condition Then statements [Else elsestatements]
或者使用塊形式
- If condition Then
- [statements]
- [ElseIf condition-n Then
- [elseifstatements]] . . .
- [Else
- [elsestatements]]
- End If
主要參數:
- condition:為一個(多個)數值或字符串表達式,其運算結果為True或False,若condition為Null,則被視為False。
- statements:為condition等於True時執行的一條或多條(以冒號分開)語句。
對於短小簡單的測試,可以使用單行形式(第一種語法),但塊形式(第二種語法)提供了比單行形式更強的結構化與適應性,比較容易閱讀、維護及調試。
- '1. 條件為True時
- '單行形式
- Dim myDate
- myDate = #2011-9-8# '日期時間字符串需用#括起來
- If myDate < Now Then myDate = Now
- '塊形式
- If i = 100 Then
- c = True
- i = 0
- End If
- '2. 條件為True和False時
- If user.UserName = "admin" Then
- showAdminPage = True
- Else
- showAdminPage = False
- End If
- '3. 對多個條件判斷
- If value = 0 Then
- MsgBox(0)
- ElseIf value = 1 Then
- MsgBox(9999)
- Else
- MsgBox("輸入不合法!")
- End If
7.2. Select Case語句
語法結構如下:
- Select Case testexpression
- [Case expressionlist-n
- [statements-n]] . . .
- [Case Else expressionlist-n
- [elsestatements-n]]
- End Select
主要參數:
- testexpression:任意數值或字符串表達式。
- statements:當testexpression與expressionlist-n中的任意部分匹配時,執行的一條或多條語句。
Select Case結構提供了If...Then...ElseIf結構的另一個變通形式,功能與If...Then...ElseIf類似,但可以使代碼更加簡練易讀,它與Case語句關聯使用。
- Dim value : value = 5 '多條語句在一行,需用冒號分開
- Select Case value
- Case 0:
- MsgBox(0)
- Case 1:
- MsgBox(9999)
- Case Else
- MsgBox("輸入不合法!")
- End Select
8. 循環語句
VBScript中可以使用以下循環語句:
- Do...Loop語句
- While...Wend語句
- For...Next語句
- For Each...Next語句
8.1. Do…Loop語句
當(或直到)條件為True時循環,語法結構如下:
當條件為True時重複執行某語句塊。
- Do [{While | Until} condition]
- [statements]
- [Exit Do]
- [statements]
- Loop
當條件變為True之前重複執行某語句塊。
- Do
- [statements]
- [Exit Do]
- [statements]
- Loop [{While | Until} condition]
主要參數:
- condition:數值或字符串表達式,其值為True或False。如果condition為Null,則condition被當作False。
- statements:當condition為True時被重複執行的一條或多條命令。
Exit Do可以退出循環體,循環可以嵌套使用。
- Do Until response = vbNo
- myNum = Int(6 * Rnd + 1) '產生1到6之間的隨機數
- response = MsgBox(myNum & "想要另一個數嗎?", vbYesNo)
- Loop
- Dim check, counter
- check = True : counter = 0
- Do
- Do While count < 20
- counter = counter + 1 '增加計數器
- If counter = 10 Then
- check = false
- Exit Do '終止內循環
- End If
- Loop
- Loop Until Not check
8.2. While…Wend語句
當條件為True時循環,語法結構如下:
- While condition
- [statements]
- Wend
主要參數:
- condition:數值或字符串表達式,其值為True或False。如果condition為Null,則condition被當作False。
- statements:當condition為True時被重複執行的一條或多條命令。
While…Wend沒有Exit語句,從頭一直循環到尾,若要在中途退出,則需用Do…Loop語句。
8.3. For…Next語句
指定循環次數,使用計數器重複運行語句,語法結構如下:
- For counter = start To end [Step step]
- [statements]
- [Exit For]
- [statements]
- Next
主要參數:
- counter:用做循環計數器的數值變量。這個變量不能是數組元素或用戶自定義類型的元素。
- start:counter的初值。
- end:counter的終值。
- step:counter的步長。如果沒有指定,則step的默認值為1。
8.4. For Each…Next語句
對於集合中的每項或數組中的每個元素,重複執行一組語句,語法結構如下:
- For Each element In group
- [statements]
- [Exit For]
- [statements]
- Next [element]
主要參數:
- element:用來枚舉集合或數組中所有元素的變量。對於集合,element可能是Variant變量、通用Object變量或任意指定的Automation對象變量。對於數組,element隻能是Variant變量。
- group:對象集合或數組的名稱。
9. 過程
在VBScript中,過程被分為兩類:Sub過程和Function過程。
9.1 Sub過程
語法結構如下:
- [Public [Default] | Private] Sub name [(arglist)]
- [statements]
- [Exit Sub]
- [statements]
- End Sub
主要參數:
- Public:表示Sub過程可被所有腳本中的所有其他過程訪問。
- Default:隻與Class塊中的Public關鍵字連用,用來表示Sub過程是類的默認方法。如果在類中指定了不止一個Default過程,就會出錯。
- Private:表示Sub過程隻可被聲明該過程的腳本中的其他過程訪問。
- name:Sub的名稱,遵循標準變量命名規則。
- arglist:代表在調用時要傳遞給Sub過程的參數的變量列表。用逗號隔開多個變量。其語法為:[ByVal | ByRef] varname[()],ByVal表示該參數是按值傳遞的,ByRef表示該參數按引用傳遞,varname代表參數的變量名稱。
如沒有顯式地指定使用Public或Private,則Sub過程默認為Public。調用Sub過程時,隻需輸入過程名及所有參數值,參數值之間使用逗號分隔。不需使用Call語句,但如果使用了此語句,則必須將所有參數包含在括號之中。調用Sub過程的兩種方式。一種使用Call語句;另一種則不使用。兩種方式效果相同,如:Call MySub(a, b)或MySub a, b。
9.2 Function過程
語法結構如下:
- [Public [Default]| Private] Function name [(arglist)]
- [statements]
- [name = expression]
- [Exit Function]
- [statements]
- [name = expression]
- End Function
主要參數:
- Public:表示Function過程可被所有腳本中的所有其他過程訪問。
- Default:隻與Class塊中的Public關鍵字連用,用來表示Function過程是類的默認方法。如果在類中指定了不止一個Default過程,就會出錯。
- Private:表示Function過程隻可被聲明該過程的腳本中的其他過程訪問。
- name:Function的名稱,遵循標準變量命名規則。
- arglist:代表在調用時要傳遞給Function過程的參數的變量列表。用逗號隔開多個變量。其語法為:[ByVal | ByRef] varname[()],ByVal表示該參數是按值傳遞的,ByRef表示該參數按引用傳遞,varname代表參數的變量名稱。
如沒有顯式地指定使用Public或Private,則Function過程默認為Public。調用Function過程時,函數名必須用在變量賦值語句的右端或表達式中,如:b = MyFunction(a)。要從函數返回一個值,隻需將值賦給函數名。在過程的任意位置都可以出現任意個這樣的賦值。
9.3 Sub與Function的區別
- Sub沒有返回值,而Function有返回值。
- Sub不能放在表達式中,而Function可以。
QTP自動化測試之VBScript對象
VBScript作為腳本語言不僅能夠編寫簡單的腳本,而且還能夠創建及使用對象編寫複雜的腳本,如Class對象,數據字典,操作文件夾及文件,錯誤處理,正則表達式等等。
1. Class對象
2. Dictionary對象
3. FileSystemObject對象
4. Err對象
5. RegExp對象
1. Class對象
使用Class語句可以創建一個對象,可以為它編寫字段、屬性及方法,它隻有兩個對象事件——Initialize與Terminate。首先來看一個簡單的Class示例:
- Class User
- '私有字段,也可以使用Public語句定義公有字段
- Private m_UserName
- Private m_Profile
- 'Initialize事件相當於構造函數
- Private Sub Class_Initialize
- m_UserName = Empty '設置UserName初始值為空字符串
- End Sub
- 'Terminate事件相當於析構函數
- Private Sub Class_Terminate
- Set m_Profile = Nothing '將對象設置為Nothing,銷毀對象
- End Sub
- 'Property Get語句,獲取屬性值或對象引用,Default隻與Public一起使用,表示該屬性為類的默認屬性
- Public Default Property Get UserName
- UserName = m_UserName
- End Property
- 'Property Let語句,設置屬性值
- Public Property Let UserName(newUserName)
- m_UserName = newUserName
- End Property
- Public Property Get Profile
- Set Profile = m_Profile
- End Property
- 'Property Set語句,設置屬性對象引用
- Public Property Set Profile(newProfile)
- Set m_Profile = newProfile
- End Property
- 'ToString方法
- Public Function ToString()
- ToString = "Hello! " & Me.UserName 'Me相當於C#中的this關鍵字
- End Function
- End Class
用VBScript創建的對象並不是真正的麵向對象,它不能繼承和實現多態,但是在QTP對象模型Utility中,提供了一個RegisterUserFunc方法可以覆寫對象的方法,但這也不是真正意義上的麵向對象。Class及其成員如何創建,上麵已經簡單介紹過,若要對其中的一些語句進一步了解,還需要去仔細閱讀一些參考文檔。下麵我們來看看如何調用對象,在《VBScript基礎上》變量賦值中也已經提到過。
- Dim u '定義對象變量名,注意變量名不能與類名相同,即使是大小寫不同
- Set u = New User '創建對象用New語句
- u.UserName = "known" '給屬性賦值
- MsgBox u.ToString() '調用方法
2. Dictionary對象
Dictionary是存儲數據鍵和項目對的對象,其主要屬性有Count、Item、Key,主要方法有Add、Exists、Items、Keys、Remove、RemoveAll。下麵是該對象的一個綜合示例:
- '定義並創建Dictionary對象,使用CreateObject創建並返回自動化對象的引用
- Dim d
- Set d = CreateObject("Scripting.Dictionary")
- '向Dictionary對象中添加鍵值對
- d.Add "a", "Known" 'Add方法第一個參數是Key值,第二個是Item值
- d.Add "b", "Christina"
- d.Add "c", "test"
- d.Add "d", "fuck"
- Call ShowDictionary(d)
- '遍曆Dictionary對象,更改Item值
- For i = 0 To d.Count - 1 'Count返回Dictionary對象中的項目數
- If d.Exists("c") Then 'Exists判斷Dictionary對象中是否存在指定關鍵字
- d.Item("c") = "Test" 'Item返回Dictionary對象中指定Key的Item值
- End If
- Next
- d.Remove("d") 'Remove從Dictionary對象中刪除一個關鍵字,項目對。
- Call ShowDictionary(d)
- '輸出Dictionary對象所有鍵值
- Sub ShowDictionary(dic)
- Dim str, a
- a = dic.Items 'Items返回一個包含所有Item值的數組
- For i = 0 To dic.Count - 1
- str = str & a(i) & vbCrlf
- Next
- MsgBox(str)
- End Sub
3. FileSystemObject對象
FileSystemObject對象可以操作驅動器、文件夾及文件,其對象模型包含下麵的對象和集合。
對象/集合 | 描述 |
---|---|
FileSystemObject | 主對象。包含用來創建、刪除和獲得有關信息,以及通常用來操作驅動器、文件夾和文件的方法和屬性。和該對象相關聯的許多方法,與其他 FSO 對象中的方法完全相似;它們是為了方便才被提供的。 |
Drive | 對象。包含用來收集信息的方法和屬性,這些信息是關於連接在係統上的驅動器的,如驅動器的共享名和它有多少可用空間。請注意,"drive" 並非必須是硬盤,也可以是 CD-ROM 驅動器,RAM 磁盤等等。並非必須把驅動器實物地連接到係統上;它也可以通過網絡在邏輯上被連接起來。 |
Drives | 集合。提供驅動器的列表,這些驅動器實物地或在邏輯上與係統相連接。Drives 集合包括所有驅動器,與類型無關。要可移動的媒體驅動器在該集合中顯現,不必把媒體插入到驅動器中。 |
File | 對象。包含用來創建、刪除或移動文件的方法和屬性。也用來向係統詢問文件名、路徑和多種其他屬性。 |
Files | 集合。提供包含在文件夾內的所有文件的列表。 |
Folder | 對象。包含用來創建、刪除或移動文件夾的方法和屬性。也用來向係統詢問文件夾名、路徑和多種其他屬性。 |
Folders | 集合。提供在 Folder 內的所有文件夾的列表。 |
TextStream | 對象。用來讀寫文本文件。 |
FileSystemObject對象所有屬性、方法及對象和集合的詳細說明,您可以查閱參考文檔,因為內容比較多,我們就看一個簡單的示例,直觀地來了解一下該對象的使用,該示例是將一個文件複製到指定文件夾下。
- '定義並創建對象
- Dim fso, filePath, folderPath
- Set fso = CreateObject("Scripting.FileSystemObject")
- filePath = "C:\\Test.txt"
- folderPath = "D:\\Test"
- Call MoveFile(filePath, folderPath)
- '將文件移動到指定文件夾
- Sub MoveFile(sourceFile, targetFolder)
- Dim file, fileName
- '獲取文件對象
- Set file = fso.GetFile(sourceFile)
- '判斷目標文件夾是否存在
- If Not fso.FolderExists(targetFolder) Then
- fso.CreateFolder(targetFolder)
- End If
- '將文件移動到目標位置
- file.Move(targetFolder & "\\" & file.Name)
- End Sub
4. Err對象
Err對象是一個具有全局範圍的內部對象,不必在代碼中創建它的實例,含有關於運行時錯誤的信息。主要屬性有Description、HelpContext、HelpFile、Number、Source,主要方法有Clear、Raise,其屬性及方法的詳細說明詳見參考文檔。下麵的示例說明了Err對象的用法:
- '示例1:
- On Error Resume Next
- Err.Raise 6 '產生溢出錯誤
- MsgBox("Error #" & CStr(Err.Number) & " " & Err.Description)
- Err.Clear
- '示例2:
- '定義數據庫連接
- Dim conn
- Set conn = CreateObject("ADODB.Connection")
- conn.BeginTrans '開始事務
- ...
- '提交數據庫事務錯誤處理
- On Error Resume Next
- If conn.Errors.Count > 0 Then
- conn.RollbackTrans '回滾事務
- Else
- conn.CommitTrans '提交事務
- End If
- Err.Clear
5. RegExp對象
RegExp是正則表達式對象,提供簡單的正則表達式支持功能。主要屬性有Global、IgnoreCase、Pattern,主要方法有Execute、Replace、Test,其屬性及方法的詳細說明詳見參考文檔。下麵的示例說明了RegExp對象的用法:
- Function RegExpTest(patrn, strng)
- Dim regEx, match, matches '建立變量。
- Set regEx = New RegExp '建立正則表達式。
- regEx.Pattern = patrn '設置模式。
- regEx.IgnoreCase = True '設置是否區分字符大小寫。
- regEx.Global = True '設置全局可用性。
- Set matches = regEx.Execute(strng) '執行搜索。
- For Each match in matches '遍曆匹配集合。
- retStr = retStr & "Match found at position "
- retStr = retStr & match.FirstIndex & ". Match Value is '"
- retStr = retStr & match.Value & "'." & vbCRLF
- Next
- RegExpTest = retStr
- End Function
- MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
VBScript之Eval函數與Execute語句(Array.ForEach的實現)
每當使用C#中的Array.ForEach時,感覺很爽。最近在做QTP自動化測試時,偶然在QTP自帶示例中看到一段代碼可以動態調用方法,於是先喜若狂,著手改編了一下,寫了一個VBScript版的Array.ForEach功能,使用起來確實不錯。其實關鍵的一個地方就在於使用了VBScript中的Eval函數。首先我們來看看Eval函數的作用。
1. Eval函數
Eval函數主要是計算一個表達式的值並返回結果。其簽名如下:
- [result = ]Eval(expression)
參數如下:
- result:可選項。是一個變量,用於接受返回的結果。如果未指定結果,應考慮使用Execute語句代替。
- expression:必選項。可以是包含任何有效VBScript表達式的字符串。
在VBScript中,x = y可以有兩種解釋。第一種方式是賦值語句,將y的值賦予x。第二種解釋是測試x和y是否相等。如果相等,result為True;否則result為False。Eval方法總是采用第二種解釋,而Execute語句總是采用第一種。下麵是Eval函數的簡單示例:
- Dim a, b
- a = 1
- b = 2
- MsgBox Eval("a + b")
2. Excute語句
執行一個或多個指定的語句。其簽名如下:
- Execute statements
所需要的statements參數是一個字符串表達式,其中包含一個或多個要執行的語句。如果要在statements參數中包含多條語句,應使用冒號或嵌入的分行將其分隔開。下麵是Execute語句的簡單示例:
- Dim a, b, c, d
- a = 1
- b = 2
- Execute "c = a + b : d = a + c"
- MsgBox c
- MsgBox d
3. 自定義ForEach函數
ForEach函數有兩個參數,一個是數組變量,一個是遍曆方法名稱。其實現代碼如下:
- Sub ForEach(source, method)
- Dim i, current
- For i = 0 To UBound(source)
- If IsObject(source(i)) Then '判斷數組元素是否為對象
- Set current = source(i)
- Else
- current = source(i)
- End If
- Eval(method & "(current)") '調用遍曆方法
- Next
- End Sub
遍曆一個整數數組的示例:
- '顯示數組元素方法
- Function ShowValue(val)
- MsgBox val
- End Function
- Dim i, arr(10)
- '給數組元素賦值
- For i = 0 To 10
- arr(i) = i
- Next
- '調用ForEach遍曆
- Call ForEach(arr, "ShowValue")
遍曆一個對象數組的示例:
- '用戶類
- Class User
- '用戶屬性
- Public UserName, Email
- 'ToString方法
- Function ToString()
- ToString = Me.UserName & " : " & Me.Email
-
End Function最後更新:2017-04-03 05:39:54
上一篇:
【算法小總結】最大連續子序列和最大連續子矩陣的關係與實現
下一篇:
使用HashMap對象傳遞url參數實用工具類