1.变量 1.Dim <> As <> 2.规则 变量名称必须使用一个字母作为第一个字符? 变量名称不能使用空格,句点(.),感叹号(!)或字符@,&,$,#。 变量名称的长度不能超过255个字符? 不能使用Visual Basic保留关键字作为变量名称? 3. Sub var() Dim str As String str = "string" MsgBox (str) End Sub 2.常量 1.Const <> As <> = <> 2.规则 常量名称必须使用一个字母作为第一个字符? 常量名称不能在名称中使用空格,句点(.),感叹号(!)或字符@,&,$,#。 常量名称的长度不能超过255个字符? 不能使用Visual Basic保留关键字作为常量名称? 3. Sub const_var() Const MyInteger As Integer = 720 MsgBox (MyInteger) End Sub 3.数组 1.数组声明的方式与声明变量相同,只是数组变量的声明使用括号 2.规则 若数组大小被指定为5,但是当数组索引从零开始时,它可以保持6个值 数组索引不能是负数 可以在一个数组变量中存储一个整数,字符串或字符。 2.数组声明 定义 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/7/2013# '日期 arr(5) = #12:45:00 PM# '时间 3.多维数组 定义 1. Dim arr(2,3) 赋值 arr(0, 0) = "Apple" arr(0, 1) = "Orange" arr(1, 0) = "cucumber" 4.数组方法 LBound(ArrayName[,dimension]) '返回指定数组的最小下标,数组的LBound的结果是零。 MsgBox ("Line 1 : " & LBound(Array(5, 2, 3))) UBound(ArrayName[,dimension]) '返回指定数组的最大下标。 MsgBox ("Line 1 : " & UBound(Array(5, 2, 3))) Split(expression[,delimiter[,count[,compare]]]) '返回一个数组,其中包含基于分隔符分割的特定数量的值。 Split("Red $ Blue $ Yellow","$") Join(List[,delimiter]) '返回一个包含数组中指定数量的子串的字符串 MsgBox ("Line 1" & " is :" & Join(Array("Red", "Blue", "Yellow"), "---")) Filter(inputstrings,value[,include[,compare]]) '函数返回一个基于零的数组,其中包含基于特定过滤条件的字符串数组的子集。 IsArray (variablename) '返回一个布尔值,指示指定的输入变量是否是数组变量 MsgBox ("Line 1 : " & IsArray(Array(1, 2, 3))) MsgBox ("Line 1 : " & IsArray("sdfadd")) 4.ReDim语句 '用于声明动态数组变量并分配或重新分配存储空间 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.运算符 1.算术操作符 + : 两个操作数相加 - : 两个操作数相减 * : 两个操作数相乘 / : 两个操作数相除 % : 模运算符,整数除法后的余数 ^ : 指数运算符 2.比较运算符 = : 检查两个操作数的值是否相等。如果是,那么条件是真。 <> : 检查两个操作数的值是否不相等。如果值不相等,则条件为真。 > : 检查左操作数的值是否大于右操作数的值。如果是,那么条件是真。 < : 检查左操作数的值是否小于右操作数的值。如果是,那么条件是真。 >= : 检查左操作数的值是否大于或等于右操作数的值。 如果是,那么条件是真。 <= : 检查左操作数的值是否小于或等于右操作数的值。如果是,那么条件是真。 3.逻辑运算符 AND : 两个条件都为真,则表达式为真。 or : 如果两个条件中的任何一个为真,则条件为真。 NOT : 用于反转其操作数的逻辑状态。 如果条件成立,那么逻辑非运算符结果是条件不成立。 XOR : 如果表达式中只有一个表达式的值为True,则结果为True。 4.连接操作符 & : 连接两个值 1 & 2 = 12 "1" & "2" = 12 + : 将两个值添加为变量,其值是数字 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) '表达第一行第一列的单元格 7.VBA对单元格的操作 1.获取单元格的值 Sub alert() 'A1 = Sheets(1).[a1] '获取第一个工作表(表名为工作表1)中A1的值赋值给X 'A1 = Sheets("工作表1").[a1] 'A1 = Sheets(1).Cells(1, 1) 'A1 = Sheets("工作表1").Cells(1, 1) A1Range("A1").Value '获取当前工作表A1的值 MsgBox (A1) '弹出对话框 End Sub 1.单元格赋值 Sub setVal() Range("A1").Value = 100 '点击VBAProject窗口的'运行子过程' End Sub 2.设置单元格的填充色 Sub setColor() Range("B3").Interior.ColorIndex = 3 '值有1-56,代表56种颜色 End Sub 3.单元格的复制、粘贴 Sub cut() Range("B3").copy Range("C3") '将B3的值,复制到C3单元格 End Sub 4.单元格的剪切 Sub cut() Range("A1").cut Range("B3") '将A1的值,剪切到B3单元格 End Sub 8.条件判断结构 if then 语句 Sub if_test() B3 = Range("B3").Value If B3 > 10 Then MsgBox ("大于10") '弹出字符串时,必须为双引号 ElseIf B3 < 10 Then MsgBox ("小于10") Else MsgBox ("aaaa") End If MsgBox (B3) End Sub 9.选择判断结构 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.循环结构 for next 语句 Sub for_test() For i = 1 To 10 Step 1 If i > 5 Then Exit For '跳出for循环 End If Range("D" & i).Value = i '循环赋值给D1-D10 Next i End Sub for each 语句:用于为数组或集合中的每个元素 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 '在循环开始时,判断条件是否符合 If i > 3 Then MsgBox ("跳出循环") 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 ("跳出循环") Exit Do End If i = i + 1 MsgBox ("The value of i is : " & i) Loop While i < 5 '在循环结束时,判断条件是否符合 End Sub 11.sub 与 function 的区别 子过程不需要有返回一个值,而函数可能会或可能不会有返回一个值。 子程序可以不用call关键字来调用? 子程序总是包含在Sub和End Sub语句中? 过程调用函数: 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 函数调用过程 Sub test(name As String, age As Integer) MsgBox ("姓名:" & name & "年龄 :" & age) End Sub Function call_sub() test "aaa", 22 End Function 12.字符串函数 InStr([start,]string1,string2[,compare]) '函数返回一个字符串第一次出现在一个字符串,从左到右搜索。返回搜索到的字符索引位置。 MsgBox ("Line 1 : " & InStr(1, “safdfasdf”, "s")) InStrRev(string1,string2[,start,[compare]]) '函数返回一个字符串在另一个字符串中的第一次出现。搜索从右到左 MsgBox ("Line 1 : " & InStrRev("asdfasdf", "s", 10)) Lcase(String) '将字符串转换为小写字母后返回字符串 MsgBox ("Line 1 : " & LCase("DJUEG")) UCase(String) '将字符串转换为大写字母后返回字符串 MsgBox ("Line 1 : " & LCase("ioek")) Left(String, Length) '从字符串的左侧返回指定数量的字符 MsgBox ("Line 1 : " & Left("adfasdf", 2)) Right(String, Length) '从字符串的右侧返回指定数量的字符 MsgBox ("Line 1 : " & Right("adfasdf", 2)) Mid(String,start[,Length]) '返回给定输入字符串中指定数量的字符 MsgBox ("Line 1 : " & Mid("adfsd", 2)) Ltrim(String) '删除字符串左侧的空格。 MsgBox "After Ltrim : " & LTrim(" adfasdfsd") RTrim(String) '删除字符串右侧的空格 MsgBox "After Ltrim : " & RTrim("adfasdfsd ") Trim(String) '删除给定输入字符串的前导空格和尾随空格 MsgBox "After Ltrim : " & RTrim(" adfasdfsd ") Len(String) '返回给定输入字符串的长度,包括空格 MsgBox ("Length of var1 is : " & Len("sdf sdfsd ")) Space (Number) '用特定数量的空格填充字符串 MsgBox ("aaa" & Space(2) & "bbb") StrComp(string1,string2[,compare]) '比较两个给定字符串后,返回一个整数值。 MsgBox ("Line 1 :" & StrComp("Microsoft", "Microsoft")) Replace ( string1, find, replacement, [start, [count, [compare]]] ) '用另一个字符串替换字符串后返回字符串。 MsgBox ("Line 1 :" & Replace("alphabet", "a", "e", 1, 1)) String(number,character) '使用指定的字符填充指定次数的字符串 MsgBox ("Line 1 :" & String(3, "$")) StrReverse(string) '反转指定的字符串 MsgBox ("Line 1 : " & StrReverse("VBSCRIPT")) 13.日期函数 date() '返回当前的系统日期 MsgBox ("The Value of a : " & a) cdate(date) '将有效的日期和时间表达式转换为类型日期 MsgBox ("The Value of a : " & CDate("Jan 01 2020")) DateAdd(interval,number,date) '将有效的日期和时间表达式转换为类型日期 MsgBox ("Line 1 : " & DateAdd("h", 1, "01-Jan-2013 12:00:00")) DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]]) '返回两个指定的时间间隔之间的差值。 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之间的数字,表示指定日期的一天 MsgBox (Day("2018-06-30")) DateSerial(year,month,day) '返回指定的日期,月份和年份参数的日期 MsgBox (DateSerial(2018, 5, 10)) FormatDateTime(date,format) '格式化并返回有效的日期和时间表达式 MsgBox ("Line 5 : " & FormatDateTime("2018-08-15 20:25", 4)) IsDate (Expression) '判断是否为日期,它都会返回一个布尔值 MsgBox ("Line 1 : " & IsDate("Nov 03, 1950")) Month (Date) '返回1到12之间的数字,表示指定日期的月份。 MsgBox ("当前的月份的值是:" & Month("2018-06-30")) Year (Date) '返回一个表示指定日期的年份的整数 MsgBox (Year("2018-06-30")) MonthName(month[,toabbreviate]) '回指定日期的月份名称。 MsgBox ("Line 1 : " & MonthName(1, True)) MsgBox ("Line 2 : " & MonthName(1, False)) Weekday(date[,firstdayofweek]) '返回一个从1到7的整数,表示指定日期的星期几。 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))