一、定義
標(biāo)識(shí)符是一種標(biāo)識(shí)變量、常量、過(guò)程、函數(shù)、類等語(yǔ)言構(gòu)成單位的符號(hào),利用它可以完成對(duì)變量、常量、過(guò)程、函數(shù)、類等引用。
二、命名規(guī)則
(1)字母打頭,由字母、數(shù)字和下劃線組成,如?A987b_23Abc
?
(2)字符長(zhǎng)度小于40,(Excel2002以上中文版本等,可以用漢字且長(zhǎng)度可達(dá)254個(gè)字符)
(3)不能與VB保留字重名,如?public
?,?private
?,?dim
?,?goto
?,?next
?,?with
?,?integer
?,?single
?等
=
?
&
?(強(qiáng)制字符連接)、?+
? (運(yùn)算符兩邊都是字符時(shí)連接字符)、?+
?(運(yùn)算符兩邊都是數(shù)字時(shí)為加法運(yùn)算符)、?-
?(減)、?Mod
?(取余)、?\
?(整除)、?*
?(乘)、?/
?(除)、?-
?(負(fù)號(hào))、?^
?(指數(shù))Not
?(非)、?And
?(與)、?Or
?(或)、?Xor
?(異或)、?Eqv
?(相等)、?Imp
?(隱含)=
?(相同)、?<>
?(不等)、?>
?(大于)、?<
?(小于)、?>=
?(不小于)、?<=
?(不大于)、?Like
?(判斷給定的字符串是否與指定的模式相匹配)、?Is
?(判斷該數(shù)據(jù)是數(shù)字還是是字符)Not
?(邏輯非)、?And
?(邏輯與)、?Or
?(邏輯或)、?Xor
?(邏輯異或)、?Eqv
?(邏輯等)、?Imp
?(蘊(yùn)含)
VBA共有12種數(shù)據(jù)類型,具體見下表,此外用戶還可以根據(jù)以下類型用Type自定義數(shù)據(jù)類型。
數(shù)據(jù)類型
|
類型標(biāo)識(shí)符 | 字節(jié) |
字符串型 String | $ | 字符長(zhǎng)度(0-65400) |
字節(jié)型 Byte | 無(wú) | 1 |
布爾型 Boolean | 無(wú) | 2 |
整數(shù)型 Integer | % | 2 |
長(zhǎng)整數(shù)型 Long | & | 4 |
單精度型 Single | ! | 4 |
雙精度型 Double | # | 8 |
日期型 Date | 無(wú) | 8 (范圍為公元100/1/1-99/12/31) |
貨幣型 Currency | @ | 8 |
小數(shù)點(diǎn)型 Decimal | 無(wú) | 14 |
變體型 Variant | 無(wú) | 以上任意類型,可變 |
對(duì)象型 Object | 無(wú) | 4 |
(3)變量定義語(yǔ)句及變量作用域
Dim 數(shù)組名([lower to ]upper [, [lower to ]upper, ….]) as type ;
?Lower缺省值為0。二維數(shù)組是按行列排列,如XYZ(行,列)。Dim array1() as double : Redim array1(5) : array1(3)=250 : Redim preserve array1(5,10)
?If condition Then [statements][Else elsestatements]
?If A>B And C<D Then A=B+2 Else A=C+2
?
If x>250 Then x=x-100
?If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements] ...
[Els]
[elsestatements]]
End If
If Number < 10 Then
Digits = 1
ElseIf Number < 100 Then
Digits = 2
Else
Digits = 3
End If
Select Case Pid
Case “A101”
Price=200
Case “A102”
Price=300
……
Case Else
Price=900
End Select
(3)Choose 函數(shù)
?choose(index, choice-1,choice-2,…,choice-n)
?
可以用來(lái)選擇自變量串列中的一個(gè)值,并將其返回,index 必要參數(shù),數(shù)值表達(dá)式或字段,它的運(yùn)算結(jié)果是一個(gè)數(shù)值,且界于 1 和可選擇的項(xiàng)目數(shù)之間。choice 必要參數(shù),Variant表達(dá)式,包含可選擇項(xiàng)目的其中之一。如:?GetChoice = Choose(Ind, "Speedy", "United", "Federal")
?
(4)Switch函數(shù)
?Switch(expr-1, value-1[, expr-2, value-2 _ [, expr-n,value-n]])
?
switch 函數(shù)和 Choose 函數(shù)類似,但它是以兩個(gè)一組的方式返回所要的值,在串列中,最先為
TRUE 的值會(huì)被返回。 expr 必要參數(shù),要加以計(jì)算的 Variant 表達(dá)式。value 必要參數(shù)。如果相關(guān)的表達(dá)式為 True,則返回此部分的數(shù)值或表達(dá)式,沒有一個(gè)表達(dá)式為 True,Switch 會(huì)返回一個(gè) Null值。
For counter = start To end [Step step] 'step 缺省值為1
[statements]
[Exit For]
[statements]
Next [counter]
For Words = 10 To 1 Step -1 '建立 10 次循環(huán)
For Chars = 0 To 9 '建立 10 次循環(huán)
MyString = MyString & Chars '將數(shù)字添加到字符串中
Next Chars 'Increment counter
MyString = MyString & " " '添加一個(gè)空格
Next Words
For Each element In group
Statements
[Exit for]
Statements
Next [element]
For Each rang2 In range1
With range2.interior
.colorindex=6
.pattern=xlSolid
End with
Next
With object
[statements]
End With
Do {while |until} condition' while 為當(dāng)型循環(huán),until為直到型循環(huán),顧名思義,不多說(shuō)啦
Statements
Exit do
Statements
Loop
Do ' 先do 再判斷,即不論如何先干一次再說(shuō)
Statements
Exit do
Statements
Loop {while |until} condition
Sub gosubtry()
Dim num
Num=inputbox(“輸入一個(gè)數(shù)字,此值將會(huì)被判斷循環(huán)”)
If num>0 then Gosub Routine1 :Debug.print num:Exit sub
Routine1:
Num=num/5
Return
End sub
while condition ‘while I<50
[statements] ‘I=I+1
wend ‘Wend
On Error Goto Line ‘當(dāng)錯(cuò)誤發(fā)生時(shí),會(huì)立刻轉(zhuǎn)移到line行去
On Error Resume Next ‘當(dāng)錯(cuò)誤發(fā)生時(shí),會(huì)立刻轉(zhuǎn)移到發(fā)生錯(cuò)誤的下一行去
On Erro Goto 0 ‘當(dāng)錯(cuò)誤發(fā)生時(shí),會(huì)立刻停止過(guò)程中任何錯(cuò)誤處理過(guò)程
Sub password(x As Integer, ByRef y As Integer)
If y = 100 Then
y = x + y
Else
y = x - y
End If
x = x + 100
End Sub
Sub call_password()
Dim x1 As Integer
Dim y1 As Integer
x1 = 12
y1 = 100
Call password(x1, y1) ' 或直接寫成 password x1, y1
Debug.Print x1, y1 ' 結(jié)果應(yīng)該是112、212,因?yàn)閤1是按值傳遞,y1是按引用傳遞
End Sub
Function password(ByVal x As Integer, ByRef y As Integer) As Boolean
If y = 100 Then
y = x + y
Else
y = x - y
End If
x = x + 100
If y = 150 Then
password = True
Else
password = False
End If
End Function
Sub call_password()
Dim x1 As Integer
Dim y1 As Integer
x1 = 12
y1 = 100
If password(x1, y1) Then
Debug.Print x1
End If
End Sub
一.測(cè)試函數(shù)
IsNumeric(x) ‘是否為數(shù)字, 返回Boolean結(jié)果,True or False
IsDate(x) ‘是否是日期, 返回Boolean結(jié)果,True or False
IsEmpty(x) ‘是否為Empty, 返回Boolean結(jié)果,True or False
IsArray(x) ‘指出變量是否為一個(gè)數(shù)組。
IsError(expression) ‘指出表達(dá)式是否為一個(gè)錯(cuò)誤值
IsNull(expression) ‘指出表達(dá)式是否不包含任何有效數(shù)據(jù) (Null)。
IsObject(identifier) ‘指出標(biāo)識(shí)符是否表示對(duì)象變量
刪除
Kill pathname 從磁盤中刪除文件, pathname 參數(shù)是用來(lái)指定一個(gè)文件名
RmDir pathname 從磁盤中刪除目錄,pathname 參數(shù)是用來(lái)指定一個(gè)文件夾
打開
filenumber 必要。一個(gè)有效的文件號(hào),范圍在 1 到 511 之間。使用 FreeFile 函數(shù)可得到下一個(gè)可用的文件號(hào)。 reclength 可選。小于或等于 32,767(字節(jié))的一個(gè)數(shù)。對(duì)于用隨機(jī)訪問(wèn)方式打開的文件,該值就是記錄長(zhǎng)度。對(duì)于順序文件,該值就是緩沖字符數(shù)。
寫入
Write #filenumber, [outputlist] 將數(shù)據(jù)寫入順序文件
Print #filenumber, [outputlist] 將格式化顯示的數(shù)據(jù)寫入順序文件中
Put [#]filenumber, [recnumber], varname 將一個(gè)變量的數(shù)據(jù)寫入磁盤文件中。
關(guān)閉
Close [filenumberlist] 關(guān)閉 Open 語(yǔ)句所打開的輸入/輸出 (I/O) 文件
注意 如果今后想用 Input # 語(yǔ)句讀出文件的數(shù)據(jù),就要用 Write # 語(yǔ)句而不用 Print # 語(yǔ)句將數(shù)據(jù)寫入文件。因?yàn)樵谑褂?Write# 時(shí),將數(shù)據(jù)域分界就可確保每個(gè)數(shù)據(jù)域的完整性,因此可用 Input# 再將數(shù)據(jù)讀出來(lái)。使用 Write# 還能確保任何地區(qū)的數(shù)據(jù)都被正確讀出。Write與 Print # 語(yǔ)句不同,當(dāng)要將數(shù)據(jù)寫入文件時(shí),Write # 語(yǔ)句會(huì)在項(xiàng)目和用來(lái)標(biāo)記字符串的引號(hào)之間插入逗號(hào)。Write # 語(yǔ)句在將 outputlist 中的最后一個(gè)字符寫入文件后會(huì)插入一個(gè)新行字符,即回車換行符,(Chr(13)
+ Chr(10))。
更多建議: