Excel-VBA基础语法
VBA简介、数据类型、变量、数组、运算符、内置函数、过程与函数
⼀、VBA介绍
1、宏和VBA的关系
  vba是编程语⾔,宏是⽤vba代码保存下来的程序。录制的宏是vba⾥最简单的程序,正因为如此,录制宏存在许多缺陷:如⽆法进⾏判断和循环,不能显⽰⽤户窗体,不能进⾏⼈机交互……
  解决录制宏的这些问题,需要掌握vbs编程的⽅法,⾃主的编写vba程序。
2、VBA程序结构
代码:vba程序由代码组成。
过程:例如Sub过程、Function过程
模块:保存过程的地⽅,⼀个模块可以保存多个不同类型的过程
对象:⽤代码操作或控制的东西即为对象,例如⼯作簿、⼯作表、单元格、图⽚、图表、透视表等
对象的属性:每个对象都有属性,属性是对象包含的内容或特点,例如A1单元格的内容:A1.内容,代码表达为Range("A1).Value
对象的⽅法:⽅法是指在对象上执⾏的某个动作,例如Range("A1").Select
关键字:关键字是vba中的保留字或符号,例如语句名称、函数名称、运算符等都是关键字
3、VBE介绍
  VBE即Visual Basic Editor即VBA的编程环境
  1)打开VBE编辑器
    Alt+F11(Alt+F8是查看宏)
    依次执⾏:(2003版本)⼯具——宏——Visual Basic编辑器,(2007以上版本)在“视图”下的“宏”选项卡下
vbs小程序代码大全    右键单击⼯作表标签,执⾏“查看代码”命令
  2)主窗⼝:包含“⼯程资源管理器”、“属性窗⼝”、“菜单栏”、“⼯具栏”、“代码窗⼝”、“⽴即窗⼝”
  3)菜单栏:包含VBE中各种组件的命令
  4)⼯具栏:可以在“视图”——“⼯具栏”菜单⾥显⽰或隐藏
  5)⼯程资源管理器:在这⾥可以看到所有打开的Excel⼯作簿和已加载的宏,⼀个Excel的⼯作簿就是⼀个⼯程,⼯程名称为“VBA Project(⼯作簿名称)”,这⾥最多可以显⽰⼯程⾥的4类对象,即Excel对象(包括sheet对象和ThisWorkbook对象)、窗体对象、模块对象和类模块对象。
  6)属性窗⼝:在这⾥查看或设置对象的属性
  7)代码窗⼝:包含对象列表框、过程列表框、边界标识条、视图按钮、代码编辑区、过程分界线。
  8)⽴即窗⼝:⼀个重要⽤途是⽤来调试代码,想显⽰⽴即窗⼝,可以在视图选项卡中选择或者⽤快捷键“Ctrl+G”
4、⽜⼑⼩试:⽤vba⽣成⼯资条
Sub ⽣成⼯资条()
'
' ⽣成⼯资条宏
'
' 快捷键: Ctrl+m
'
Application.ScreenUpdating = False
For i = 2 To 7
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
ActiveCell.Offset(2, 0).Rows("1:1").EntireRow.Select
Selection.Insert Shift:=xlDown
ActiveCell.Select
Next
End Sub
⼆、VBA数据类型
1、VBA中的数据类型
数据类型就是对同⼀组数据的统称,如⽂本、⽇期、数值等。
VBA⾥的数据类型有:字节型(Byte)、整数型(Integer)、长整数型(Long)、单精度浮点型(Single)、双精度浮点型(Double)、货币型(Currency)、⼩数型(Decimal)、字符串型(String)、⽇期型(Date)、布尔型(Boolean)等,如表3-1
类型声明符:⽤特殊符号代替变量类型进⾏变量类型声明,例如Dim str$  中$代表String类型。只有部分数据类型可以使⽤类型声明符。integer % 短整型
long & 长整型
single ! 单精度浮点型
double # 双精度浮点型
currency @ 货币型
string $ 字符型
三、VBA变量、常量
1、变量命名要求
变量必须以字母或汉字开头,不能包含空格、句号、感叹号、@、&、$和#,最长不能超过255个字符(⼀个汉字计2个字符)
2、声明变量
单变量定义:Dim 变量名 As 数据类型
  ⽰例:
  Dim str As String  声明⼀个String类型(变长)的变量,名称是str
  Dim str As String*10  声明⼀个String类型(定长,最⼤存储10个字符)的变量,名称为str
  Dim str$  声明⼀个String(变长)类型变量,$变量类型声明符,代表String
多变量定义(变量类型相同):Dim 变量1,变量2,…… As 数据类型
  Dim x, y, z As String  (其中,只有z为String型,x, y变量均为variant类型)
  Dim x$ y$ z$ (3个String型)
多变量定义(变量类型不同):Dim 变量1 As 数据类型1,变量2 As 数据类型2
  Dim str As String,nu As Integer  不同变量之间⽤逗号隔开
  不指定类型的变量定义,默认为Variant类型
  Dim str  每个变量都要指定数据类型,如果不指定,默认为Variant类型
3、声明常量
常量定义:Const 变量名称 As 数据类型=数值
⽰例:
Const pi As Single=3.14
4、变量的作⽤域
Public 变量名称  As 数据类型  【公有变量】
Private 变量名称  As 数据类型  【私有变量】
Static 变量名称 As 数据类型  【静态变量,整个代码运⾏期间值不变】
单个变量:本地变量
单个模块:模块级变量,⽤Dim或Private
所有模块:公共变量,⽤Public
5、强制声明所有变量(未定义变量则提⽰,否则不提⽰)
Option Explicit  在模块的第⼀句表⽰。
可以在VBE下的“⼯具”——“选项”——“编辑器”选项卡中进⾏设置,这⾥设置后,每个模块的第⼀句会⾃动写下“Option Explicit”,⽆需⼿动输⼊。
6、给变量赋值
给⽂本、数值、⽇期等数据类型变量赋值
  语句为:[Let]变量名称 = 数据  这⾥的Let可以省略,即:变量名称=数据
  例如:
  Dim str As String
  Let str = “⼀起来学习VBA”
给对象变量(object型,例如单元格)赋值
  语句为:Set 变量名称=对象  这⾥Set千万不能少。
  例如:
  Dim rng = Range    '声明rng变量为Range类型
  Set rng = Worksheets("sheet1").Range("A1")  '给变量rng赋值
  rng.Value="欢迎来到ExcelHome论坛"    '将⽂本写⼊变量指定的单元格
四、VBA数组
1、⼀维数组
声明:Public|Dim 数组名(a to b) As 数据类型
⽰例:
Dim 七6班(1 to 50) As String  '声明⼀个String类型的数组,名称为“七6班”,可以存储50个元素。
等价于:
Public|Dim Arr(0 to 49) As String
Public|Dim Arr(49) As String  '数组索引默认是从0开始计数,如果在模块的第⼀句写“Option Base 1”,则数组的起始索引从1开始,⽽不是0.
七6班(1)="张青"
七6班(2)="邓城"
……
七6班(50)="冯吉"
2、多维数组:
Dim 酱油(1 to 3,1 to 20)
等价于
Dim 酱油(2,19)
3、多维动态数组
  不确定数组中存储多少个元素,即不能预知元素的⼤⼩,可以在⾸次定义数组时括号内为空,写成:
  Dim 数组名称()
例⼦:
Sub dtsz()
Dim arr() As String '定义多维动态数组
Dim n As Long
'统计A列有多少⾮空单元格
n = Application.WorksheetFunction.CountA(Range("A:A"))
MsgBox n
'使⽤Dim语句声明变量时,括号内的参数不能是变量,所以必须使⽤ReDim语句重新指定⼤⼩
ReDim arr(1 To n) As String '重新定义数组的⼤⼩
End Sub
4、其他常⽤的创建数组的⽅式
  1)使⽤Array函数创建数据
Sub ArrayTest()
Dim arr As Variant '定义变量
'将1-10的⾃然数赋给数组
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
MsgBox "arr数组的第2个元素为:" & arr(1)
End Sub
  2)使⽤split创建数组
Sub ArrayTest()
Dim arr As Variant '定义变量
'⽆论是否在模块中写⼊Option Base 1,Split函数返回的数组的最⼩索引都是0
arr = Split("邓成,林梅,张青,孔丽,冯吉维,孔佳", ",") '第⼀个参数包含分隔符或字符串变量,第⼆个参数是分隔符
MsgBox "arr数组的第2个元素为:" & arr(1)
End Sub
  3)通过Range对象直接创建数组
Sub ArrayTest()
Dim arr As Variant '定义变量
arr = Range("A1:C3").Value '将A1:C3单元格内容存储到数组arr⾥
Range("E1:G3").Value = arr '将数组arr的数据写⼊⼤E1:G3
'将数组的值写⼊到单元格区域时,单元格区域的⼤⼩必须与数组相同
End Sub
5、数组相关函数:UBound和LBound函数
UBound(arr) 获取数组arr的最⼤索引号
LBound(arr)  获取数组arr的最⼩索引号
数组的元素个数可以表⽰为:UBound(arr)-LBound(arr)+1
Sub arrcount()
Dim arr(10 To 50)
'Char(13)表⽰回车,_表⽰代码换⾏连接符
MsgBox "数组的最⼤索引号是:" & UBound(arr) & Chr(13) _
& "数组最⼩的索引号是:" & LBound(arr) & Chr(13) _
& "数组的元素个数是:" & UBound(arr) - LBound(arr) + 1
End Sub
Sub arrcount()
Dim arr(1 To 10, 1 To 100)
'Char(13)表⽰回车,_表⽰代码换⾏连接符
MsgBox "第⼀维的最⼤索引号是:" & UBound(arr, 1) & Chr(13) _
& "第⼆维的最⼩索引号是:" & LBound(arr, 2)
End Sub
6、数组相关函数:Join函数
将⼀个以为数组⾥的元素使⽤指定的分隔符连接成⼀个新的字符串
Sub joinTest()
Dim arr As Variant, txt As String
arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
'分割符@可以省略,如果省略,默认使⽤空格作为分隔符
txt = Join(arr, "@")
MsgBox txt
End Sub
将数组写⼊单元格区域
Sub ArrToRng1()
Dim arr As Variant
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
'将⼀维数组写⼊单元格区域,单元格区域必须在同⼀⾏。如果要写⼊垂直的⼀列单元格区域,必须先使⽤⼯作表的Transpose函数进⾏转换
Range("A1:A9").Value = Application.WorksheetFunction.Transpose(arr)
End Sub
五、VBA运算符
1、算术运算符
⽤于算术运算,返回值类型为数值型。
2、⽐较运算符
⽤于⽐较运算
3、连接运算符
连接运算符⽤来连接两个⽂本字符串,有+和&两种
⽰例:
a="欢迎来到"
b="ExcelHome论坛!"
a+b       '问号?告诉VBA在⽴即窗⼝中显⽰问号后⾯命令的结果,可以⽤Print关键字代替问号。
欢迎来到ExcelHome论坛!
a & b
欢迎来到ExcelHome论坛!
4+5 '符号+两边都是数值,执⾏算术运算
9
"4"+5 '其中5是数值,执⾏算术运算
9
"4"+"5" '两个都是⽂本,执⾏连接运算
45
4、逻辑运算符
逻辑运算符⽤于判断逻辑运算式的真假,参与逻辑运算的数据为逻辑型数据,返回结果为Boolean型,只能为True或False。
5、VBA中的通配符
6、运算符优先级
在VBA中要优先处理蒜素运算符,接着处理连接运算符,然后处理⽐较运算符,最后再处理逻辑运算符,可以⽤括号来改变运算顺序。
7、换⾏符
VBA中字符换⾏显⽰需要使⽤换⾏符来完成。下⾯是常⽤的换⾏符
'chr(10) 可以⽣成换⾏符
'chr(13) 可以⽣成回车符
'vbcrlf 换⾏符和回车符
'vbCr 等同于chr(10)
'vblf 等同于chr(13)
'例:
Sub test3()
MsgBox "我爱" & Chr(10) & "Excel"
' MsgBox "我爱你" & Chr(13) & "Excel"
' MsgBox "今天" & vbCrLf & "我是⼤王"
End Sub
六、VBA内置函数
使⽤VBA中内置函数与在⼯作表中使⽤⼯作表函数类似。
例如,我们想知道当前系统时间
Sub NowTime()
MsgBox "现在的时间是:" & Time()
End Sub
VBA中的内置函数有哪些?查看VBA内置函数的⽅法:
1、在VBE中“帮助(H)”——“Microsoft Visual Basic 帮助(H) F1”——“Visual Basic 语⾔参考”——“函数” 或者在VBE下快捷键“F1”
2、在VBE代码窗⼝中⾸先键⼊“VBA.”系统会⾃动提⽰“函数列表”,如图
七、VBA控制结构
1、If…Then语句
Sub SayHello1()
If Time < 0.5 Then MsgBox "早上好!"
If Time >= 0.5 Then MsgBox "下午好!"
End Sub
Sub SayHello2()
If Time < 0.5 Then
MsgBox "早上好!"
Else
MsgBox "下午好!"
End If
End Sub
Sub SayHello3()
If Time < 0.5 Then
MsgBox "早上好!"
ElseIf Time > 0.75 Then
MsgBox "晚上好!"
Else
MsgBox "下午好!"
End If
End Sub
2、Select Case语句
Sub SayHello1()
Select Case Time
Case Is < 0.5
MsgBox "早上好!"
Case Is > 0.75
MsgBox "晚上!"
End Select
End Sub
Sub SayHello2()
Select Case Time
Case Is < 0.5
MsgBox "早上好!"
Case Is > 0.75
MsgBox "晚上!"
Case Else
MsgBox "下午好!"
End Select
End Sub
Sub xingji()
Dim xj As String
Select Case Cells(2, "H")
Case Is < 85
xj = "不评定"
Case Is < 100
xj = "⼀星级"
Case Is < 115
xj = "⼆星级"
Case Is < 130
xj = "三星级"
Case Is < 150
xj = "四星级"
Case Else
xj = "五星级"
End Select
Cells(2, "I") = xj
End Sub
3、For…Next语句
语法结构:
For <;循环变量>=<;初值>To<;终值> [Step 步长值]
  <;循环体>
[Exit For]  '可以在循环体中任意处加⼀句或多句Exit For,当遇到这个语句,退出For循环,执⾏Next后语句  <;循环体>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。