VBA的全称是: Office Visual Basic for Applications,是用来
扩展 Office 应用程序
的。
编辑器
任意 Office 套件中的一个。比如 word、excel 都可以,热键Alt + F11
即可打开VBA编辑器
。
编辑器很简单,用过VS
的这个无缝上手。(其实就是个阉割的VS)。
没用过也没关系,边用边学,有不会的再F1
查一下VBA编辑器菜单和命令帮助就好了。
从宏录制开始
学习vba
一个最简单的入门方式就是使用Office的录制宏
功能。
如下:
- 我开启了录制宏,然后在单元格里写了些数字,还设置了背景色。
- 结束后
宏
就录制好了。 - 最后我先清除刚才的操作,然后执行一下
宏
刚才操作的结果就又出现了。
word长这样:
宏
其实录的就是vba
现在我们 或者
Alt + F11
,就可以看到刚才录下的代码了。
学习时要注意的就是录制的代码毕竟和人的思路不一样,通常都比较啰嗦。
比如:单元格A1
写入1
- 录制代码
Range("A1").Select ' 选择 A1
ActiveCell.FormulaR1C1 = "1" ' 设置活动单元格的值
- 正式写代码
Range("A1").Value2 = "1" ' 设置 A1 单元格的值
语法
语法方面两个栏目搞定:(其它的遇到再查即可)
- Office VBA 参考 / 语言参考 / 用户界面帮助 / 菜单和命令
- Office VBA 参考 / 语言参考 / 参考
查漏补缺
命名参数赋值(:=
冒号等号)
命名参数赋值,通常用在跳过可选参数的时候,直接以参数名
:=值
的形式传参。
官方说明:了解命名参数和可选参数
以 MsgBox (prompt, [ buttons, ] [ title, ] [ helpfile, context ])
为列,我们只想传prompt
、title
。
- 方式一:按顺序
这里我们没传buttons
但是位置你得给人家空出来,不能省。
MsgBox "省略可选参数 ,留出位置即可!", , "温馨提示"
- 方式二:命名参数赋值
这里我们以命名的方式,点名道姓的传title
,所以系统就不会将第二个参数误认为buttons
了。
另外prompt
我们并没有点名,因为它是必填的,位置也没有歧义。
MsgBox "明确告诉系统我传的是哪个参数,不用你按位置猜!", Title:="温馨提示"
例子
接收函数返回的数组
因为VB
坑爹的数组,可以声明Variant
来接受。
Dim 文件夹数组 As Variant
文件夹数组 = 获取文件夹结构(path)
推荐范式
操作数组而不是单元格
不要操作单元格,把值出来到数组里操作,最后再写回去。
Sub 操作数组而不是Range()
Dim vArray As Variant
Dim iRow As Integer
Dim iCol As Integer
Dim dValue As Double
vArray = Range("A1:C10000").Value2 '取出所有值到数组
For iRow = LBound(vArray, 1) To UBound(vArray, 1)
For iCol = LBound(vArray, 2) To UBound(vArray, 2)
vArray(iRow, iCol) = iRow * iCol
Next iCol
Next iRow
Range("A1:C10000").Value2 = vArray ' 一次性将数组写回去
End Sub
With 语句
使用 With 语句用不是反复取值。可以多层嵌套的。
With MyObject
.Height = 100 ' Same as MyObject.Height = 100.
.Caption = "Hello World" ' Same as MyObject.Caption = "Hello World".
With .Font
.Color = Red ' Same as MyObject.Font.Color = Red.
.Bold = True ' Same as MyObject.Font.Bold = True.
End With
End With
参考
【中】函数 (Visual Basic for Applications)
【英】函数 (Visual Basic for Applications)
【中】Office VBA 参考
【英】Office VBA 参考
W3cschool.cn Excel VBA 编程教程 (实例较多,可参考)
教程:Analystcave vba-tutorial
教程:www.educba.com/vba