3-1、程序的作成
VBE环境中程序的作成
3-2、变量
声明变量
' 变量声明:Dim 变量名A
' 变量赋值:变量名A = 1
Sub test( )
Dim a1
a1 = Range( "B1" ) .Value
Range( "B2" ) .Value = a1 + 1
End Sub
强制变量声明
' 强制变量声明语句
Option Explicit
Sub test( )
Dim a1
a1 = Range( "B1" ) .Value
Range( "B2" ) .Value = a1 + 1
End Sub
变量名命名规则 变量名类型指定
' 变量声明并指定类型:Dim 变量名 As 数据类型
Sub test( )
Dim a1 As Integer
a1 = Range( "B1" ) .Value
Range( "B2" ) .Value = a1 + 1
End Sub
经常使用的变量名类型 部分变量名类型的使用
''' 字符串类型,整数类型
Sub test( )
Dim intAge As Integer , strName As String
intAge = 30
strName = "ccblogd"
MsgBox "Name:" & strName & ", Age:" & intAge
End Sub
''' 日付类型
' 程序能够识别的日付值设定
' myDate = #10 / 23 / 2019 #
' myDate = #10 / 23 / 2019 #
' myDate = #1 : 15 : 30 PM#
Sub test( )
Dim myDate As Date , myTime As Date
myDate = "2019 年06 月23 日"
myTime = #2 : 14 : 14 PM#
MsgBox "Date:" & myDate & ", Time:" & myTime
End Sub
''' Variant
Sub test( )
Dim varCc As Variant
varCc = "ccblogs"
MsgBox TypeName( varCc)
varCc = 123
MsgBox TypeName( varCc)
End Sub
''' 对象类型的使用
' 固有对象
' Dim 变量名 As Worksheet
' Dim 变量名 As Range
' 通用对象
' Dim 变量名 As Object
' 对象变量赋值
' Set 变量名 = 值
Sub test( )
Dim mySheet As Worksheet
Set mySheet = Worksheet( 1 )
mySheet.Name = "ccblogs"
Set mySheet = Nothing
End Sub
变量作用域
3-3、常量
常量声明
' 声明与赋值
' nst 常量名 As 数据类型 = 值
内置常量 对象浏览器: 对象浏览器构造:
3-4、数组
数组的声明与赋值
' 声明
' Dim 数组名( 索引最大值) As 数据类型
' 赋值
' 数组名( 索引) = 值
Sub test( )
Dim strs( 2 ) As String
strs( 0 ) = "a"
strs( 1 ) = "b"
strs( 2 ) = "c"
End Sub
数组索引开始值设定
' Option Base 索引开始值
Option Base 1
Sub test( )
Dim strs( 3 ) As String
strs( 1 ) = "a"
strs( 2 ) = "b"
strs( 3 ) = "c"
End Sub
数组的索引开始值和终了值设定
Sub test( )
Dim strs( 2 To 4 ) As String
strs( 2 ) = "a"
strs( 3 ) = "b"
strs( 4 ) = "c"
End Sub
使用Array函数给数组赋值
' Dim 变量名 As Variant
' 变量名 = Array ( 值1 , 值2 , 值3 ,……)
Sub test( )
Dim strs As Variant
strs = Array ( "a" , "b" , "c" )
End Sub
动态数组
' 语法(不保留原值)
' Dim 变量名 As 数据类型
' ReDim 变量名( 数组索引终了值)
Sub test( )
Dim strs( ) As String
ReDim strs( 3 )
For i = 0 To 3
strs( i) = i + 1
Next
End Sub
数组索引开始值与终了值的取得
' 数组索引开始值取得
' LBound ( 数组变量名)
' 数组索引终了值取得
' UBound ( 数组变量名)
Sub test( )
Dim strs( 2 To 4 ) As String
MsgBox UBound ( strs) - LBound ( strs)
End Sub
数组保留原数值扩容
Sub test( )
Dim strs( ) As String
ReDim strs( 1 )
strs( 0 ) = "a"
strs( 1 ) = "b"
ReDim Preserve strs( 3 )
strs( 2 ) = "c"
strs( 3 ) = "d"
MsgBox strs( 0 ) & strs( 1 ) & strs( 2 ) & strs( 3 )
End Sub
二维数组的声明
' 声明
' Dim 变量名( 行数, 列数) As 数据类型
' 赋值
' 变量名( 行索引, 列索引) = 值
Sub test( )
Dim strs( 2 , 1 ) As String
strs( 0 , 0 ) = "a"
strs( 0 , 1 ) = "b"
strs( 1 , 0 ) = "c"
strs( 1 , 1 ) = "d"
strs( 2 , 0 ) = "e"
strs( 2 , 1 ) = "f"
End Sub
数组初期化
' Erase 数组名
3-5、运算符
算术运算符
运算符 使用例 结果 + 5 + 2 7 - 5 - 2 3 * 5 * 2 10 / 5 / 2 2.5 ^ 5 ^ 2 25 \ 5 \ 2 2 Mod 5 Mod 2 1
比较运算符
运算符 使用例 结果 < 5 < 2 False <= 5 <= 2 False > 5 > 2 True >= 5 >= 2 True = 5 = 2 False <> 5 <> 2 True Like “紫水晶” Like “*水晶” True Is Worksheets(“Sheet1”) Is Worksheets(2) False
通配符
通配符 含义 使用例 * 0文字以上的任意文字列 “E ” -> 包含E的文字列 ? 任何一个文字 “E???” -> E开头的五个文字列 # 任何一个数字 “#E” -> 数字+E [ ] []内指定的任何一个文字 [VBA] -> VBA中任何一个文字 [ ! ] []内指定以外的任何一个文字 [!VBA] -> VBA以外任何一个文字 [ - ] []内指定范围的文字 [A-E] -> A-E中任何一个文字
字符串连接运算符
运算符 使用例 结果 & “Excel” & “VBA” ExcelVBA + “Excel” + “VBA” ExcelVBA
逻辑运算符
运算符 使用例 结果 And True And True True Or True Or False True Not Not True False Eqv(等价) True Eqv False False Eqv(等价) False Eqv False True Imp(蕴含) False Imp True True Xor(排他) True Xor False True
3-6、函数
VBA函数与Worksheet函数的区别 VBA中使用Worksheet函数
' Application.WorksheetFunction.Worksheet函数名( 参数)
Sub test( )
Dim myMin As Long , myMax As Long
myMin = Application.WorksheetFunction.Min ( Range( "B3:E6" ) )
myMax = Application.WorksheetFunction.Max ( Range( "B3:E6" ) )
End Sub
通过[]和Evaluate使用Worksheet函数的方法
3-7、控制结构
条件
''' 1
' If 条件式 Then 处理
' If 条件式 Then
' 处理
' End If
''' 2
' If 条件式 Then 处理1 Else 处理2
' If 条件式 Then
' 处理1
' Else
' 处理2
' End If
''' 3
' If 条件式1 Then
' 处理1
' ElseIf 条件式2
' 处理2
' ElseIf 条件式3
' 处理3
' Else
' 处理4
' End If
''' 4
' Select Case 条件判断对象
' Case 条件式1
' 处理1
' Case 条件式2
' 处理2
' Case Else
' 处理3
' End Select
Sub test( )
Dim myMin As Long
myMin = Application.WorksheetFunction.Min ( Range( "B3:E6" ) )
Select Case myMin
Case 1
MsgBox 1
Case Is > 1
MsgBox 2
End Select
End Sub
循环
''' 1
' Do While 条件式
' 处理
' Loop
''' 2
' Do Until 条件式
' 处理
' Loop
''' 3
' Do
' 处理
' Loop While 条件式
''' 4
' Do
' 处理
' Loop Until 条件式
''' 5
Sub test( )
Dim i As Integer
For i = 0 To 5 Step 1
MsgBox i
Next
End Sub
''' 6
Sub test( )
Dim myRange As Range
For Each myRange In Range( "C5:E14" )
Next
End Sub
跳出控制结构
Exit Do
Exit For
Exit Sub
Exit Function
对象名省略
Sub test( )
With Range( "A1:C1" )
.Font.Bold = True
.Font.Size = 18
.Merge
End With
End Sub
3-8、消息显示
MsgBox函数
InputBox函数
3-9、异常处理
编译错误 执行错误 逻辑错误 On Error GoTo
' Sub test( )
' On Error GoTo Err1
' 处理
' Exit Sub
' Err1:
' Err处理
' End Sub
On Error Resume Next
Sub test( )
On Error Resume Next
ActiveSheet.Next .Activate
MsgBox activatesheet.Name
End Sub
On Error GoTo 0 错误处理无效,处理中断,显示错误。 Resume与Resume Next
种类 解释 Resume 从发生错误的行开始再执行 Resume Next 从发生错误的下一行开始再执行 Resume 行番号 发生错误后,跳到指定行开始再执行
错误Code和错误内容
3-10、调试
调试方法 命令执行窗口