1.變量
? ? 1.Dim <<variable_name>> As <<variable_type>>
? ? 2.規(guī)則
? ? ? ? 變量名稱必須使用一個(gè)字母作為第一個(gè)字符巍耗。
? ? ? ? 變量名稱不能使用空格辨嗽,句點(diǎn)(.),感嘆號(hào)(!)或字符@,&,$夜焦,#。
? ? ? ? 變量名稱的長(zhǎng)度不能超過255個(gè)字符岂贩。
? ? ? ? 不能使用Visual Basic保留關(guān)鍵字作為變量名稱茫经。
? ? 3.
? ? ? ? Sub var()
? ? ? ? ? ? Dim str As String
? ? ? ? ? ? str = "string"
? ? ? ? ? ? MsgBox (str)
? ? ? ? End Sub
2.常量
? ? 1.Const <<constant_name>> As <<constant_type>> = <<constant_value>>
? ? 2.規(guī)則
? ? ? ? 常量名稱必須使用一個(gè)字母作為第一個(gè)字符。
? ? ? ? 常量名稱不能在名稱中使用空格河闰,句點(diǎn)(.),感嘆號(hào)(!)或字符@褥紫,&姜性,$,#髓考。
? ? ? ? 常量名稱的長(zhǎng)度不能超過255個(gè)字符部念。
? ? ? ? 不能使用Visual Basic保留關(guān)鍵字作為常量名稱。
? ? 3.
? ? ? ? Sub const_var()
? ? ? ? ? ? Const MyInteger As Integer = 720
? ? ? ? ? ? MsgBox (MyInteger)
? ? ? ? End Sub
3.數(shù)組
? ? 1.數(shù)組聲明的方式與聲明變量相同氨菇,只是數(shù)組變量的聲明使用括號(hào)
? ? 2.規(guī)則
? ? ? ? 若數(shù)組大小被指定為5儡炼,但是當(dāng)數(shù)組索引從零開始時(shí),它可以保持6個(gè)值
? ? ? ? 數(shù)組索引不能是負(fù)數(shù)
? ? ? ? 可以在一個(gè)數(shù)組變量中存儲(chǔ)一個(gè)整數(shù)查蓉,字符串或字符乌询。
? ? 2.數(shù)組聲明
? ? ? ? 定義
? ? ? ? ? ? 1. Dim arr1()?
? ? ? ? ? ? 2. Dim arr2(5)
? ? ? ? ? ? 3. arr3 = Array("apple","Orange","Grapes")
? ? ? ? 賦值
? ? ? ? ? ? Dim arr(5)
? ? ? ? ? ? arr(0) = "1"
? ? ? ? ? ? arr(2) = 100
? ? ? ? ? ? arr(3) = 2.45
? ? ? ? ? ? arr(4) = #10/07/2013#? ’日期
? ? ? ? ? ? arr(5) = #12.45 PM#? '時(shí)間
? ? 3.多維數(shù)組
? ? ? ? 定義
? ? ? ? ? ? 1. Dim arr(2,3)
? ? ? ? 賦值
? ? ? ? ? ? arr(0,0) = "Apple"
? ? ? ? ? ? arr(0,1) = "Orange"
? ? ? ? ? ? arr(1,0) = "cucumber"
? ? 4.數(shù)組方法
? ? ? ? LBound(ArrayName[,dimension])
? ? ? ? ? ? '返回指定數(shù)組的最小下標(biāo),數(shù)組的LBound的結(jié)果是零。
? ? ? ? ? ? MsgBox ("Line 1 : " & LBound(Array(5, 2, 3)))
? ? ? ? UBound(ArrayName[,dimension])
? ? ? ? ? ? '返回指定數(shù)組的最大下標(biāo)豌研。
? ? ? ? ? ? MsgBox ("Line 1 : " & UBound(Array(5, 2, 3)))
? ? ? ? Split(expression[,delimiter[,count[,compare]]])
? ? ? ? ? ? '返回一個(gè)數(shù)組妹田,其中包含基于分隔符分割的特定數(shù)量的值唬党。
? ? ? ? ? ? Split("Red $ Blue $ Yellow","$")
? ? ? ? Join(List[,delimiter])
? ? ? ? ? ? '返回一個(gè)包含數(shù)組中指定數(shù)量的子串的字符串
? ? ? ? ? ? MsgBox ("Line 1" & " is :" & Join(Array("Red", "Blue", "Yellow"), "---"))
? ? ? ? Filter(inputstrings,value[,include[,compare]])
? ? ? ? ? ? '函數(shù)返回一個(gè)基于零的數(shù)組,其中包含基于特定過濾條件的字符串?dāng)?shù)組的子集鬼佣。
? ? ? ? IsArray(variablename)
? ? ? ? ? ? '返回一個(gè)布爾值驶拱,指示指定的輸入變量是否是數(shù)組變量
? ? ? ? ? ? msgbox("Line 1 : " & IsArray(Array(1,2,3)))
? ? ? ? ? ? msgbox("Line 1 : " & IsArray("sdfadd"))
4.ReDim語句
? ? ’用于聲明動(dòng)態(tài)數(shù)組變量并分配或重新分配存儲(chǔ)空間
? ? ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
? ? Sub Constant_demo_Click()
? ? ? Dim a() as variant
? ? ? i = 0
? ? ? redim a(5)
? ? ? a(0) = "XYZ"
? ? ? a(1) = 41.25
? ? ? a(2) = 22
? ? ? REDIM PRESERVE a(7)
? ? ? For i = 3 to 7
? ? ? a(i) = i
? ? ? Next
? ? ? 'to Fetch the output
? ? ? For i = 0 to ubound(a)
? ? ? ? ? Msgbox a(i)
? ? ? Next
? ? End Sub
5.運(yùn)算符
? ? 1.算術(shù)操作符
? ? ? ? + : 兩個(gè)操作數(shù)相加
? ? ? ? - : 兩個(gè)操作數(shù)相減
? ? ? ? * : 兩個(gè)操作數(shù)相乘
? ? ? ? / : 兩個(gè)操作數(shù)相除
? ? ? ? % : 模運(yùn)算符,整數(shù)除法后的余數(shù)
? ? ? ? ^ : 指數(shù)運(yùn)算符
? ? 2.比較運(yùn)算符
? ? ? ? = : 檢查兩個(gè)操作數(shù)的值是否相等晶衷。如果是蓝纲,那么條件是真。?
? ? ? ? <> : 檢查兩個(gè)操作數(shù)的值是否不相等晌纫。如果值不相等税迷,則條件為真。?
? ? ? ? > : 檢查左操作數(shù)的值是否大于右操作數(shù)的值缸匪。如果是翁狐,那么條件是真。?
? ? ? ? < : 檢查左操作數(shù)的值是否小于右操作數(shù)的值凌蔬。如果是露懒,那么條件是真。?
? ? ? ? >= : 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值砂心。 如果是懈词,那么條件是真。
? ? ? ? <= : 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值辩诞。如果是坎弯,那么條件是真。?
? ? 3.邏輯運(yùn)算符
? ? ? ? AND : 兩個(gè)條件都為真译暂,則表達(dá)式為真抠忘。
? ? ? ? OR : 如果兩個(gè)條件中的任何一個(gè)為真,則條件為真外永。
? ? ? ? NOT : 用于反轉(zhuǎn)其操作數(shù)的邏輯狀態(tài)崎脉。 如果條件成立屈尼,那么邏輯非運(yùn)算符結(jié)果是條件不成立蜕衡。
? ? ? ? XOR : 如果表達(dá)式中只有一個(gè)表達(dá)式的值為True,則結(jié)果為True黑毅。
? ? 4.連接操作符
? ? ? ? & : 連接兩個(gè)值
? ? ? ? ? ? 1 & 2 = 12
? ? ? ? ? ? "1" & "2" = 12
? ? ? ? + : 將兩個(gè)值添加為變量祭衩,其值是數(shù)字
? ? ? ? ? ? 1 + 2 = 3
? ? ? ? ? ? "1" + "2" = 12
6.單元格的格式方法
? ? 1.Range
? ? ? ? Range("A1")? '表示A1單元格
? ? ? ? Range("A1:A9")? ? '表示A1-A9單元格
? ? 2.[]
? ? ? ? [A1]? ? '表示A1單元格
? ? ? ? [A1:A9]? ? '表示A1到A9單元格
? ? 3.Cells(第幾行灶体,第幾列)
? ? ? ? Cells(1,1)? '表達(dá)第一行第一列的單元格
7.VBA對(duì)單元格的操作
? ? 1.獲取單元格的值
? ? ? ? Sub alert()
? ? ? ? ? ? 'A1 = Sheets(1).[a1]? ? '獲取第一個(gè)工作表(表名為工作表1)中A1的值賦值給X
? ? ? ? ? ? 'A1 = Sheets("工作表1").[a1]
? ? ? ? ? ? 'A1 = Sheets(1).Cells(1, 1)
? ? ? ? ? ? 'A1 = Sheets("工作表1").Cells(1, 1)
? ? ? ? ? ? A1Range("A1").Value? ? '獲取當(dāng)前工作表A1的值
? ? ? ? ? ? MsgBox (A1)? '彈出對(duì)話框
? ? ? ? End Sub
? ? 1.單元格賦值
? ? ? ? Sub setVal()
? ? ? ? ? ? Range("A1").Value = 100? '點(diǎn)擊VBAProject窗口的'運(yùn)行子過程'
? ? ? ? End Sub
? ? 2.設(shè)置單元格的填充色
? ? ? ? Sub setColor()
? ? ? ? ? ? Range("B3").Interior.ColorIndex = 3? '值有1-56,代表56種顏色
? ? ? ? End Sub
? ? 3.單元格的復(fù)制掐暮、粘貼
? ? ? ? Sub cut()
? ? ? ? ? ? Range("B3").copy Range("C3")? '將B3的值蝎抽,復(fù)制到C3單元格
? ? ? ? End Sub
? ? 4.單元格的剪切
? ? ? ? Sub cut()
? ? ? ? ? ? Range("A1").cut Range("B3")? '將A1的值,剪切到B3單元格
? ? ? ? End Sub
8.條件判斷結(jié)構(gòu)
? ? if then 語句
? ? ? ? Sub if_test()
? ? ? ? ? ? B3 = Range("B3").Value
? ? ? ? ? ? If B3 > 10 Then
? ? ? ? ? ? ? ? MsgBox ("大于10")? ? '彈出字符串時(shí)路克,必須為雙引號(hào)
? ? ? ? ? ? ElseIf B3 < 10 Then
? ? ? ? ? ? ? ? MsgBox ("小于10")
? ? ? ? ? ? Else
? ? ? ? ? ? ? ? MsgBox ("aaaa")
? ? ? ? ? ? End If
? ? ? ? ? ? MsgBox (B3)
? ? ? ? End Sub
9.選擇判斷結(jié)構(gòu)
? ? Select Case 語句
? ? ? ? Sub select_test()
? ? ? ? ? ? B3 = Range("B3").Value
? ? ? ? ? ? Select Case B3
? ? ? ? ? ? Case 1 To 10
? ? ? ? ? ? ? ? msg = "1到10之間"
? ? ? ? ? ? Case 11 To 20
? ? ? ? ? ? ? ? msg = "11到20之間"
? ? ? ? ? ? Case 21, 22
? ? ? ? ? ? ? ? msg = "21,22的值"
? ? ? ? ? ? Case Else
? ? ? ? ? ? ? ? msg = "其他的值"
? ? ? ? ? ? End Select
? ? ? ? ? ? MsgBox (msg)
? ? ? ? End Sub
10.循環(huán)結(jié)構(gòu)
? ? for next 語句
? ? ? ? Sub for_test()
? ? ? ? ? ? For i = 1 To 10 Step 1
? ? ? ? ? ? ? ? If i > 5 Then? ?
? ? ? ? ? ? ? ? ? ? Exit For? ? '跳出for循環(huán)
? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? Range("D" & i).Value = i? ? '循環(huán)賦值給D1-D10
? ? ? ? ? ? Next i
? ? ? ? End Sub
? ? for each 語句:用于為數(shù)組或集合中的每個(gè)元素
? ? ? ? Sub for_ecah_test()
? ? ? ? ? ? fruits = Array("蘋果", "香蕉", "雪梨")
? ? ? ? ? ? For Each Item In fruits
? ? ? ? ? ? ? ? MsgBox (Item)
? ? ? ? ? ? Next
? ? ? ? End Sub
? ? do? while? loop
? ? ? ? Sub do_while_loop_test()
? ? ? ? ? Do While i < 5? ? '在循環(huán)開始時(shí)织中,判斷條件是否符合
? ? ? ? ? ? ? If i > 3 Then
? ? ? ? ? ? ? ? ? MsgBox ("跳出循環(huán)")
? ? ? ? ? ? ? ? ? Exit Do
? ? ? ? ? ? ? End If
? ? ? ? ? ? ? i = i + 1
? ? ? ? ? ? ? MsgBox ("The value of i is : " & i)
? ? ? ? ? Loop
? ? ? ? End Sub
? ? ? ? Sub do_while_loop_test()
? ? ? ? ? Do
? ? ? ? ? ? ? If i > 3 Then
? ? ? ? ? ? ? ? ? MsgBox ("跳出循環(huán)")
? ? ? ? ? ? ? ? ? Exit Do
? ? ? ? ? ? ? End If
? ? ? ? ? ? ? i = i + 1
? ? ? ? ? ? ? MsgBox ("The value of i is : " & i)
? ? ? ? ? Loop While i < 5? ? '在循環(huán)結(jié)束時(shí)锥涕,判斷條件是否符合
? ? ? ? End Sub
11.sub 與 function 的區(qū)別
? ? 子過程不需要有返回一個(gè)值,而函數(shù)可能會(huì)或可能不會(huì)有返回一個(gè)值狭吼。
? ? 子程序可以不用call關(guān)鍵字來調(diào)用层坠。
? ? 子程序總是包含在Sub和End Sub語句中。
? ? 過程調(diào)用函數(shù):
? ? ? ? Function function_test(ByVal col, ByVal start_row, ByVal end_row)
? ? ? ? ? ? total = 0
? ? ? ? ? ? ? ? For i = start_row To end_row Step 1
? ? ? ? ? ? ? ? ? ? total = total + Range(col & i).Value
? ? ? ? ? ? ? ? Next i
? ? ? ? ? ? function_test = total
? ? ? ? End Function
? ? ? ? Sub call_function()
? ? ? ? ? ? MsgBox ("總和為:" & function_test("A", 1, 5))
? ? ? ? End Sub
? ? 函數(shù)調(diào)用過程
? ? ? ? Sub test(name As String, age As Integer)
? ? ? ? ? MsgBox ("姓名:" & name & "年齡 :" & age)
? ? ? ? End Sub
? ? ? ? Function call_sub()
? ? ? ? ? ? test "aaa", 22
? ? ? ? End Function
12.字符串函數(shù)
? ? InStr([start,]string1,string2[,compare])
? ? ? ? '函數(shù)返回一個(gè)字符串第一次出現(xiàn)在一個(gè)字符串刁笙,從左到右搜索破花。返回搜索到的字符索引位置。
? ? ? ? MsgBox ("Line 1 : " & InStr(1, “safdfasdf”, "s"))
? ? InStrRev(string1,string2[,start,[compare]])
? ? ? ? '函數(shù)返回一個(gè)字符串在另一個(gè)字符串中的第一次出現(xiàn)疲吸。搜索從右到左
? ? ? ? msgbox("Line 1 : " & InStrRev("asdfasdf","s",10))
? ? Lcase(String)
? ? ? ? '將字符串轉(zhuǎn)換為小寫字母后返回字符串
? ? ? ? msgbox("Line 1 : " & LCase("DJUEG"))
? ? UCase(String)
? ? ? ? '將字符串轉(zhuǎn)換為大寫字母后返回字符串
? ? ? ? msgbox("Line 1 : " & LCase("ioek"))
? ? Left(String, Length)
? ? ? ? '從字符串的左側(cè)返回指定數(shù)量的字符
? ? ? ? msgbox("Line 1 : " & Left("adfasdf",2))
? ? Right(String, Length)
? ? ? ? '從字符串的右側(cè)返回指定數(shù)量的字符
? ? ? ? msgbox("Line 1 : " & Right("adfasdf",2))
? ? Mid(String,start[,Length])
? ? ? ? ’返回給定輸入字符串中指定數(shù)量的字符
? ? ? ? msgbox("Line 1 : " & Mid("adfsd",2))
? ? Ltrim(String)
? ? ? ? '刪除字符串左側(cè)的空格座每。
? ? ? ? msgbox "After Ltrim : " & LTrim("? adfasdfsd")
? ? RTrim(String)
? ? ? ? '刪除字符串右側(cè)的空格
? ? ? ? msgbox "After Ltrim : " & RTrim("adfasdfsd? ")
? ? Trim(String)
? ? ? ? '刪除給定輸入字符串的前導(dǎo)空格和尾隨空格
? ? ? ? msgbox "After Ltrim : " & RTrim("? adfasdfsd? ")
? ? Len(String)
? ? ? ? '返回給定輸入字符串的長(zhǎng)度,包括空格
? ? ? ? msgbox("Length of var1 is : " & Len("sdf sdfsd? "))
? ? space(number)
? ? ? ? '用特定數(shù)量的空格填充字符串
? ? ? ? msgbox("aaa" & Space(2)& "bbb")
? ? StrComp(string1,string2[,compare])
? ? ? ? '比較兩個(gè)給定字符串后,返回一個(gè)整數(shù)值摘悴。
? ? ? ? msgbox("Line 1 :" & StrComp("Microsoft","Microsoft"))
? ? Replace ( string1, find, replacement, [start, [count, [compare]]] )
? ? ? ? '用另一個(gè)字符串替換字符串后返回字符串峭梳。
? ? ? ? msgbox("Line 1 :" & Replace("alphabet", "a", "e", 1, 1))
? ? String(number,character)
? ? ? ? '使用指定的字符填充指定次數(shù)的字符串
? ? ? ? msgbox("Line 1 :" & String(3,"$"))
? ? StrReverse(string)
? ? ? ? '反轉(zhuǎn)指定的字符串
? ? ? ? msgbox("Line 1 : " & StrReverse("VBSCRIPT"))
13.日期函數(shù)
? ? date()
? ? ? ? '返回當(dāng)前的系統(tǒng)日期
? ? ? ? msgbox("The Value of a : " & a)
? ? cdate(date)
? ? ? ? '將有效的日期和時(shí)間表達(dá)式轉(zhuǎn)換為類型日期
? ? ? ? MsgBox ("The Value of a : " & CDate("Jan 01 2020"))
? ? DateAdd(interval,number,date)
? ? ? ? '將有效的日期和時(shí)間表達(dá)式轉(zhuǎn)換為類型日期
? ? ? ? msgbox("Line 1 : " &DateAdd("h",1,"01-Jan-2013 12:00:00"))
? ? DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
? ? ? ? '返回兩個(gè)指定的時(shí)間間隔之間的差值。
? ? ? ? msgbox("Line 2 : " &DateDiff("q","01-Jan-09 00:00:00","01-Jan-10 23:59:00"))
? ? DatePart(interval,date[,firstdayofweek[,firstweekofyear]])
? ? ? ? '返回給定日期的特定部分
? ? ? ? msgbox("Line 4 : " & DatePart("m","2013-01-15"))
? ? Day(date)
? ? ? ? '返回1到31之間的數(shù)字蹂喻,表示指定日期的一天
? ? ? ? msgbox(Day("2018-06-30"))
? ? DateSerial(year,month,day)
? ? ? ? '返回指定的日期葱椭,月份和年份參數(shù)的日期
? ? ? ? msgbox(DateSerial(2018,5,10))
? ? FormatDateTime(date,format)
? ? ? ? '格式化并返回有效的日期和時(shí)間表達(dá)式
? ? ? ? msgbox("Line 5 : " & FormatDateTime("2018-08-15 20:25",4))
? ? IsDate(expression)
? ? ? ? '判斷是否為日期,它都會(huì)返回一個(gè)布爾值
? ? ? ? ? msgbox("Line 1 : " & IsDate("Nov 03, 1950"))
? ? Month(date)
? ? ? ? '返回1到12之間的數(shù)字口四,表示指定日期的月份孵运。
? ? ? ? msgbox("當(dāng)前的月份的值是:"&Month("2018-06-30"))
? ? Year(date)
? ? ? ? '返回一個(gè)表示指定日期的年份的整數(shù)
? ? ? ? msgbox(Year("2018-06-30"))
? ? MonthName(month[,toabbreviate])
? ? ? ? '回指定日期的月份名稱。
? ? ? ? msgbox("Line 1 : " & MonthName(01,True))
? ? ? ? msgbox("Line 2 : " & MonthName(01,false))
? ? Weekday(date[,firstdayofweek])
? ? ? ? '返回一個(gè)從1到7的整數(shù)蔓彩,表示指定日期的星期幾治笨。
? ? ? ? msgbox("Line 1: " & Weekday("2013-05-16",1))
? ? WeekdayName(weekday[,abbreviate[,firstdayofweek]])
? ? ? ? '返回指定日期的工作日名稱
? ? ? ? msgbox("Line 2 : " &WeekdayName(2,True))
? ? ? ? msgbox("Line 3 : " &WeekdayName(1,False))
? ? ? ? msgbox("Line 4 : " &WeekdayName(2,True,0))
? ? ? ? msgbox("Line 5 : " &WeekdayName(1,False,1))