文章目录
一、Excel VBA 介绍
VBA(Visual Basic for Applications),是一种用来扩展 Microsoft Office 功能的编程语言,常见的是用来扩展 Excel 功能,为 Excel 添加自动化脚本,而从提高 Excel 的办公效率
1.1. 宏
宏是录制 Excel 操作过程,然后自动生成 VBA 代码的工具,通过宏可以避免编写大量的 VBA 代码,能更简单的实现 Excel 自动化,但是宏具有局限性,当要实现逻辑更复杂的功能时,还是需要编写 VBA 代码
1. 录制宏
Microsoft Office 中自带 VBA 相关插件, 但是本文使用的是 WPS Office,需要自行安装插件才能支持 VBA 功能,如果找不到插件的下载地址,可以留言邮箱
WPS 中录制宏很简单,按下面步骤操作即可:
- 在 Excel 中点击 开发工具 -> 录制新宏
- 从这一刻开始,对 Excel 的操作都会被录制下来,想停止时点击结束录制即可
附上一张 WPS 中录制宏的完整操作动图,录制的内容是,为 C1 单元格添加 =SUM(A1,B1)
表达式:
2. 其他 Excel 工作簿中使用录制好的宏
WPS 中使用宏同样简单,按下面步骤操作即可:
- 打开带有宏的 Excel 工作簿
- 打开要使用宏的工作簿
- 在要使用宏的工作簿中点击 开发工具-> VB宏 -> 按名称选择要使用的宏 -> 运行即可
附上一张 WPS 中使用宏的完整操作动图,宏的内容是,为 C1 单元格添加 =SUM(A1,B1)
表达式:
3. 查看录制宏后自动生成的 VBA 代码
WPS 中查看宏对应的 VBA 代码,按下面步骤操作即可:
- 打开带有宏的 Excel 工作簿
- 在要使用宏的工作簿中点击 开发工具-> VB宏 -> 按名称选择要使用的宏 -> 编辑
附上一张 WPS 中查看宏自动生成的 VBA 代码的动图:
例子虽然简单,但是也能很好的展示宏的基本作用
1.2. Visual Basic 编辑器
不论是 Microsoft Office 还是 WPS Office,VBA 代码是通用的,一般习惯使用 Visual Basic 编辑器来编写 VBA 代码,在 WPS 中打开 Visual Basic 编辑器的方式如下
Visual Basic 编辑器基本布局介绍
因为没想把 VBA 研究的太深,所以对于 VB 编辑器界面,简单了解下几个比较重要的地方就可以了
1. 代码书写的位置
2. 常用窗口
3. 其他常用窗口
二、VBA - 定义过程
语法
通过 Sub
关键字来定义过程,一个模块中可以定义多个过程,每个过程其实就是一个宏,都可以被单独使用,也可以在一个过程内通过 Call 过程名
的方式调用另一个过程:
Sub 过程名称()
'过程内容
End Sub
演示
在 Excel 中使用 VBA 代码一般有两种方式,一种是通过事件触发,一种是通过窗体控件触发,现在通过窗体控件的方式演示一下如何使用 VBA 代码
1. 在模块中定义如下过程:
Sub studyVBA()
Sheet1.Cells(1, 1) = "今天开始学习VBA!!"
End Sub
2. 在 Excel 工作表中添加一个按钮,并为其指定宏(既我们定义的过程名称):
三、VBA - 类型与变量
1. 数据类型
想定义变量首先得知道要定义的变量是什么类型,VBA 中有很多数据类型,常用的有:
类型名称 | 关键字 | 关键字简写 |
---|---|---|
整型 | Integer | % |
长整型 | Long | & |
单精度 | Single | ! |
双精度 | Double | # |
字符型 | String | $ |
声明类型时个人不建议用简写的方式,VBA 中除了基本类型外,也支持对象类型
2. 定义变量
在 VBA 中声明变量常见的方式是 Public
和 Dim
,Dim
声明的变量属于局部临时变量,其作用域为其所在结构体,Public
声明的变量一般定义在全局中,既不会定义在某个过程中
等后面学习类相关知识时,还会学习 Public
的其他用法,以及其他定义变量的方式
声明变量语法:
Dim 变量名 As 数据类型
Public 变量名 As 数据类型
声明变量演示:
Public globalNum As Integer
Sub studyVBA()
Dim localNum As Integer
End Sub
变量赋值:
仅仅声明变量是不够的,我们还需要给变量赋值,给变量赋值分两种情况:
- 给基本类型的变量赋值,直接使用
变量名 = 值
的语法即可 - 给对象类型的变量赋值,需要利用到
Set
关键字,语法为Set 变量名 = 值
变量赋值的演示:
Sub studyVBA()
' 给基本类型变量赋值
Dim localNum As Integer
localNum = 100
' 给对象类型变量赋值
Dim obj As Range
Set obj = Range("a1")
End Sub
四、VBA - 函数
1. 普通函数
定义普通函数的语法:
Function 函数名称(参数1,参数2, 参数n)
逻辑代码
函数名称=返回值
End Function
定义普通函数的示例:
'定义函数
Function setValue(num1, num2)
setValue = num1 + num2
End Function
调用普通函数的示例:
1. 在过程中使用定义好的函数
'在过程中调用函数
Sub invoke()
Sheet1.Cells(1, 1) = setValue(1, 2)
End Sub
2. 在 Excel 中以函数表达式的方式使用定义好的函数
2. 可选参数的函数
可选参数的函数:定义函数时,指定参数为可选,调用函数时该参数就可传,可不传
定义可选参数的函数 - 语法:
Function 函数名称(参数1,Optional 参数2 as 类型,参数n)
逻辑代码
函数名称=返回值
End Function
定义可选参数的函数 - 示例:
'定义函数
Function setValue(num1, Optional num2 As Integer)
setValue = num1 + num2
End Function
调用可选参数的函数 - 示例:
与调用普通函数没有区别,只不过参数可以选填
'在过程中调用函数,选择不传入第二个参数
Sub invoke()
Sheet1.Cells(1, 1) = setValue(5)
End Sub
3. 参数有默认值的函数
参数有默认值的函数:在可选参数的函数基础上,为没有传值的参数设置默认值
定义参数有默认值的函数 - 语法:
Function 函数名称(参数1,Optional 参数2 as 类型 = 默认值,参数n)
逻辑代码
函数名称=返回值
End Function
定义参数有默认值的函数 - 示例:
'定义函数
Function setValue(num1, Optional num2 As Integer = 100)
setValue = num1 + num2
End Function
调用参数有默认值的函数 - 示例:
'在过程中调用函数,选择不传入第二个参数
Sub invoke()
Sheet1.Cells(1, 1) = setValue(5)
End Sub
4. 调用函数时指定参数名称传值
当调用函数时,如不想按照参数列表的顺序传入参数值,也可以使用 函数名(参数名:=参数值)
这种指定参数名称的格式进行函数调用
示例
Sub invoke()
Sheet1.Cells(1, 1) = setValue(num2:=100, num1:=200)
End Sub
5. 不定长参数列表的函数
当定义函数时,参数数量无法确定,需要在函数调用时由调用者决定,这种场景可用不定长参数列表的函数
不定长参数列表的函数 - 语法
不定长参数列表的函数是将传递过来的参数变化成数组
Function 函数名(ParamArray 参数名())
End Function
示例
定义不定长参数列表的函数
'定义函数
Function setValue(ParamArray params())
For Each Item In params
Debug.Print Item
Next
End Function
调用不定长参数列表的函数
'调用函数
Sub invoke()
'不需要返回值时参数列表不需要小括号
setValue 5, 6
'需要返回值时参数列表必须有小括号
Dim returnVal As Integer
returnVal = setValue(5, 6)
End Sub
不管哪种方式的函数定义,在调用时如果想使用函数返回值,在调用时就必须将参数列表写在小括号里, 如果不想使用返回值,调用处可以将小括号省略