1、1.什么是Excel VBA?,Visual,Basic,For Application,VBA是一种编程语言,是建立在Office中的一种应用程序开发工具。 它可以有效地自定义和扩展Excel的功能。例如:操作表格的任意属性(颜色、字体等)、迅速完成大量重复的操作。 启用宏的Excel文件,后缀名为xlsm。,-,数据处理神器!,宏是用VBA代码保存的程序,是录下的用户对Excel的操作。,但是,录制的宏执行起来却不方便。,因此,最好将宏指定给按钮来执行。,但是,录制的宏无法进行判断和循环,无法进行人机交互,因此需要掌握VBA编程的方法。,2.开始VBA编程,VBE(VBA编辑窗口)快捷键:
2、Alt+F11,代码:录制宏或者自主编写 过程:执行某些动作的代码组合,Sub过程(不返回运行结果)、Function过程(返回运行结果) 模块:保存过程,一个模块可以保存多个不同类型的过程 对象:用代码进行操作的即是对象,如单元格、图片、工作表、透视表 Application.Workbooks(“1“).Worksheets(“Sheet1“).Range(“A1“) 属性:每个对象都有属性,如字体的颜色、单元格的宽度。对象和属性之间使用.连接。如:Range(“A1“).Value 方法:在对象上执行的动作,对象和方法之间也使用.连接。如:Range(“A1“).Select 事件:事件
3、就是由用户或者系统触发的,可以在代码中响应的一段代码。如打开工作簿、激活工作表、改变单元格的值,声明变量:Dim 变量名 As数据类型 变量名必须以字母或汉字开头,不能包含空格、句号、感叹号、#、$、& 例如:Dim Str As String*10 10指定变量能存储字符的最大长度,变量类型声明符,例如:Dim Str$ 声明多个变量,可以写在同一个Dim后面,变量名之间用逗号隔开 如果不指定变量的数据类型,则默认为Variant型,但会占用更大的存储空间,故应尽量避免使用Variant型,强制声明变量:菜单栏工具选项勾选要求变量声明;这样VBA会在每个模块第一句自动写下“Option Ex
4、plicit“,给变量赋值:变量名称 = 数据,例如:str = “VBA“ d = #2016-1-1# 如果给对象变量赋值(Object型,如单元格),Set 变量名称 = 对象,例如:Set rng = Worksheets(“Sheet1“).Range(“A1“) 常量:Const 常量名称 As 数据类型 = 数值,常量的作用域用法与变量一致,例如:Const p As String = 3.14 数组:同种类型多个变量的集合,数组中的元素按次序存储在数组中,通过索引号进行区分,数组也是变量;Dim/Public 数组名(a to b) As 数据类型,a和b分别是数组的起始和终止
5、索引号。 声明数组时,也可以用一个自然数指定数组的大小,该自然数为数组的最大索引号,默认起始索引号为0 给数组赋值:要分别给数组中的每个元素赋值,数组名(1) = “XX“,多维数组:Dim/Public 数组名(a to b,c to d) As 数据类型 动态数组:若声明数组时不能预知数组大小,可以首次定义数组时括号内为空,Dim 数组名(),然后再程序中使用ReDim语句重新定义数组大小。 其它创建数组的方式:Array函数 Option Explicit Sub ArrayTest()Dim arr As Variant将1到10十个自然数赋给数组arrarr = Array(1, 2
6、, 3, 4, 5, 6, 7, 8, 9, 10)MsgBox “arr数组的第2个元素为:“ & arr(1) End Sub,Split函数 Option Explicit Sub SplitTest()Dim arr As Variant利用split生成数组arr = Split(“王,何,张,赵,冯,刘“, “,“)MsgBox “arr数组的第2个元素为:“ & arr(1) End Sub UBound和LBound函数:计算最大和最小索引号,UBound(数组名) Join函数:可以将一维数组元素使用指定分隔符连接成新的字符串,Join(数组名,“),VBA函数:VBA函数使
7、用方法与Excel类似,可选中函数后按F1查看帮助,在代码窗口输入“ VBA. “会显示函数列表供你选择; Sub myabs() a = InputBox(“请输入数值:“, “提示“) labs = Abs(a) MsgBox “你输入的值的绝对值为:“ & labs End Sub 但不是所有的函数在VBA里都可以直接调用,此时只需要在函数名称前加上Application.WorksheetFunction语句即可。例如计算非空单元格个数application.worksheetfunction.counta(range(“a1:a10“),程序控制语句:分为判断、分支、循环三种 If语
8、句:例如判断A1单元格的数是否能被2、3、5其中之一整除 Sub test() If a1 = “ Then MsgBox “A1单元格没有输入任何内容!“ ElseIf a1 Mod 2 = 0 Then MsgBox “A1单元格的数能被2整除!“ ElseIf a1 Mod 3 = 0 Then MsgBox “A1单元格的数能被3整除!“ ElseIf a1 Mod 5 = 0 Then MsgBox “A1单元格的数能被5整除!“ Else MsgBox “A1单元格的数不能被2、3、5其中之一整除!“ End If End Sub,Select Case语句:在设置条件时,应把最有
9、可能发生的情况写在前面 Sub Test() If a1.Value = “ Then MsgBox “A1单元格没有输入数字“ Exit Sub 退出程序 End If Select Case a1.Value 测试表达式 Case Is 30 表达式列表,与测试表达式进行比较 MsgBox “差“ Case Is 60 MsgBox “不及格“ Case Is 80 MsgBox “及格“ Case Is 90 MsgBox “良好“ Case Else MsgBox “优秀“ End Select End Sub,For.Next语句: Sub 求1到10000之间奇数和() Dim I
10、&, J& For I = 1 To 10000 Step 2 J = J + I Next MsgBox “1到10000之间奇数和为“ & J End Sub,For Each.Next语句: Sub shtname() Dim i As Integer, sht As Worksheet i = 1 For Each sht In Worksheets Cells(i, 1) = sht.name i = i + 1 Next End Sub,Do While语句:有开头判断和结尾判断两种,Do Until语句:有开头判断和结尾判断两种,GoTo语句:通常用来作错误处理,但增加阅读调试难
11、度,尽量避免使用 Sub mysum() Dim Lsum As Long, i As Long i = 1 x: 设置标签,使用带冒号的字符串或者不带冒号的数字 Lsum = Lsum + i i = i + 1 If i = 1000 Then GoTo x MsgBox “1到1000的自然数和为:“ & Lsum End Sub,With语句:对相同对象进行多次操作时,可以简化代码,提高运行效率 Sub FontSet()With Worksheets(“Sheet1“).Range(“A1“).Font.Name = “宋体“ 字体.Size = 13 字号.Bold = True 加粗.ColorIndex = 3 颜色End With End Sub,