VBA笔记入门篇
VBA全名: Visual Basic Application
准备·工作
打开VBA
打开左上角的:文件->选项 弹出如下画面,选择“自定义功能区”,勾选上“开发工具”,点击确定。Excel的头上就会多出一个选项卡:开发工具。
另一种打开方式:
在excel头部的任意一个选项卡里单击右键,在弹出的菜单里选第三项“自定义功能区域”。也可以弹出如上画面。
启用宏
因为很多病毒是靠VBA的宏传播,所以excel默认禁止执行宏,所以要执行VBA先要允许宏启动。在“开发工具”选项卡里点击“宏安全性”,选“宏设置”,选中“启用所有宏”。点击确定按钮,然后重启excel(关闭excle文件再重新打开)
VBA编辑器
点击“开发工具”中的“Visual Basic”,可以打开VBA编辑器。
VBA编辑器简称BE,即Visual Basic Editor
在资源管理器中并没有“模块”这样的目录结构,需要添加进去。在资源管理器中,右键单击,弹出菜单中选择“插入”,然后选择“模块”
双击资源管理器中的“模块1”,就可以在右边开发代码。
开发第一个小程序
点击一个按钮,计算execl中的公式
添加按钮
1、点击“插入”,弹出表单控件,选中按钮控件
2、选中按钮控件后,在excel需要添加按钮的地方,拖动鼠标左键画出按钮,弹出设置按钮调用宏信息的top画面。给宏起一个方法名,然后点击“新建”按钮,创建代码。然后进入VBA编辑器。看到如下代码。而且在资源管理器中自动给我们创建了一个“模块2”对应此代码。
宏:在VBA中编写的一段小程序(Macro)
Cells(行,列) 单元格行列取值
编辑代码
编辑完代码后保存文件,会弹出提示,我们必须把文件另存为xlsm格式文件,否者编写的代码无法保存。
回到excel画面,点击按钮就会计算出A1+A2的结果,结果放在C1单元格中。
编辑按钮文字 -> 右键单击按钮选第四项“编辑文字”(也可以拖动按钮位置)
调整编辑器字体
首先进入excle中的VBA编程界面,在顶部菜单栏中找到“工具”的按钮,点击“工具”,找到“选项”按钮,然后进入选项的编辑界面,点击“编辑器格式”,在右边可以选择字体的大小。
先写宏后关联按钮
1、先在模块2中创建一个做减法的宏代码
2、然后新建一个按钮,在弹出的top画面中,把按钮关联到这个宏上。
这样点击这个新建的按钮,C1就会等于A1-B1
VBA语法
变量
区别:
VBA的变量规则与java基本一致,最大的不同有以下两点:
1、VBA变量大小写不敏感 xy = XY = xY
2、当VBA程序中遇到一个新的变量名时,VBA会自动创建该变量,无需事先声明。
上面的代码x取一个固定单元格的值,程序根据单元格的值,计算对应行的数据。
注意:因为vba定义变量不像Java有变量初始化,Java程序一旦调用没有定义过的变量编译会出错。vba没有定义变量初始化,所以调用一个不存在的变量不会报错,他会自动创建这个变量,只是这个变量没有值。(所以把一个变量名修改后,后面调用这个变量的地方一旦漏改,程序不会报错,但是结果会出错)
为了应付没有定义变量调用也不会报错的情况,可以在程序里事先声明程序里只使用以下变量。
强制声明变量:
必须写在该模块文件的第一行写上Option Explicit,然后在方法体中用Dim声明,并用逗号分隔。一旦声明dim的方法体里使用了没有用dim声明的变量,编译就会报错。
常量
不可以被修改的变量,一旦定义成了常量,修改这个值会报编译错误。代码写法如下:
Const p = 3.14
FOR循环
上述代码for循环是:i从11循环到20,步长是1(循环一次加1)
注意:For循环结束处的 Next i,i可以省略不写。(for循环套for循环的时候建议写,否者不知道那个结束end是属于哪个for循环的)
如果步长是每次增加1,step 1也可以省略不写。其他情况例如递减需要写成step -1。
(使用tab键让代码缩进关系统一)
While循环
第一种:
While Cells(1,2) <> “”
…
Wend
第二种:(常用)
Do While Cells(1,2) <> “”
…
Loop
例子代码:遍历每一个sheet页,计算每一个sheet页面的指定表格数据
IF ELSE
1、基本用法
下面的宏关联按钮后,点击按钮会根据A1和A2单元格的值在A3中写入合格或不合格,以下就是if else的用例:
Sub ifElseTest()
Dim score1, score2
score1 = Cells(1, 1)
score2 = Cells(1, 2)
'当A1和A2单元格都大于60的时候,A3单元格显示合格
If score1 > 60 And score2 > 60 Then
Cells(1, 3) = "合格"
Else
Cells(1, 3) = "不合格"
End If
End Sub
2、如果判断语句写在同一行,那么可以不写End IF,例:
If score1 > 60 Then Cells(1, 3) = "合格"
3、ElseIf:(ElseIf 是一个关键字)
关系运算符
大于:> 小于:< 大于等于: >= 小于等于:<= 不等于: <> 等于:=
逻辑运算符
与:And 或:or 非:not
字符串
字符串连接用&符号,记得字符串用&连接时,字符串与&符号之间一定要有空格,否者会引发歧义。
str1 = "a"
str2 = "b"
Cells(2, 1) = Cells(2, 1) & str1 & str2
程序调试debug
1、设置断点:直接在vba编辑器中找到要调试的代码,点击左侧竖栏,生成断点。运行程序代码会到此处停下。
2、单步执行 F8 (VBA编辑器点开“调试”,里面能看到所有调试方法和快捷键)
3、添加监视:
4、报错自动定位:
如果运行时代码出错,VBA会弹出提示出错,点击弹出框的“调试”,会自动定位到出错行
宏操作excel
设置单元格字体颜色
Sub setCellsStyle()
'把A1到C2之间(矩形的左上角与右下角范围)所有单元格字体变为红色
Range("A1:C2").Font.Color = -16776961
End Sub
根据上例发现,Excel中每一个元素的操作都有对应的对象,例如Cells就是操作单元格的,Range就是范围操作单元格的,对应的excel中各种图形等都有固定的调用方法,但是我们不可能记住每一种图形的调用对象,所以我们可以利用excel录制宏的方法操作格个图形对象,然后看录制宏的代码,就知道了每种对象如何调用。
录制宏-参照宏代码
Excel提供了一种记录我们操作excel动作的“录制宏”功能,只要我们记录住操作excel的动作,再执行录制的宏,excel就会重复我们录制的动作。我们可以查看excel生成的代码,了解这些宏如何操作控件,从而根据这些代码来完成我们的代码。
例:我们想知道删除行的代码如何操作
1、点击录制宏
2、弹出我们要录制的宏定义,可以直接点击确定
3、我们删除一行代码,然后点“停止录制”
4、发现我们的代码里生成了一段这样的代码
Sub 宏2()
' 宏2 宏
Rows("4:4").Select
Selection.Delete Shift:=xlUp
End Sub
红色部分就是删除行的代码,可以解释为:删除第四行(从第四行到第四行)
5、这样我们就可以开发一个程序,把第一列单元格内容小于10的进行行删除。
先建立一个按钮,关联宏方法deleteRow()
Sub deleteRow()
'从20行遍历到第1行(删除应该倒序遍历,因为index有变化)
For i = 20 To 1 Step -1
If Cells(i, 1) <= 10 Then
'删除第i行
Rows(i & ":" & i).Select
Selection.Delete Shift:=xlUp
End If
Next i
End Sub
对象编程excel
主要类
VBA也把excel的各种控件分装成了对象,可以调用这些定义好的类、属性、方法操作控件。
这里的类、属性、方法与J