一、VBA基本定义
1.VBA定义:Visual Basic for Applications(VBA)是 VisualBasic 的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
2.宏定义:宏是一段可以运行的 VBA 代码片段。
3.VB的窗口定义:
- 工具栏:编辑器命令栏,与 Excel 功能区域类似,包含 Excel VBA 开发相关的命令。
- VBA 工程:显示当前 VBA 工程包含的所有对象。通常,一个工作簿就是一个 VBA 工程,其中包括 Excel对象、工作表对象、模块等。
- 属性窗口:查看和设置选中对象的属性的窗口。
- 代码编辑窗口:实际编写代码的位置。编写、修改、保存代码。
- 立即窗口:代码运行过程中,打印出的内容,在立即窗口中显示,一般用于调试代码。
- 注释:注释是对代码的一种解释,不影响代码的运行。VBA 中的注释语句是,以英文单引号
'
开头,后接需要解释说明的内容。
二、操作步骤
1.新建工作簿,保存为.xlsm
格式。
2.Excel 工作簿中的 VBA 代码通常保存在工作表对象或模块中。
3.创建一个宏(子程序代码片段)。其中 Sub
是 Subroutine
的缩写,直译过来是子程序。在 VBA 中表示一个过程,也是代表一个过程的开始。下一行 End Sub 表示过程的结束。
Sub MyCode()
End Sub
4.代码运行:按F5
。
三、with结构代码
使用 With
结构,可以避免重复写同一个对象名,代码如下:
Sub MyCode()
With Worksheets("Sheet1")
.Name = "新名称"
.Tab.ThemeColor = xlThemeColorLight1
.Visible = xlSheetHidden
End With
End Sub
四、编辑器的便捷使用
- 注释的添加和取消:可通过调出编辑窗口批量注释和取消。
- 强制换行:插入两个空格或
_
或回车。 - 调试:
f8
单步运行,在最左边点一下设置断点f9
。
五、宏的简单使用
- 使用相对流录制宏,不固定位置,相对位置操作。
- 宏的存储:保存到模块;保存到加载项。
- 常见运算符:
- 不等于:<>
- like通配符:
-
*
任意个字符 -
?
一个字符 -
#
一个数字 -
[A-W a-w]
a-w或A-W中的一个字符 -
[!0-9]
字符不是0-9之间
4.简单定义变量
Dim x As Integer '整数
Dim st As String '文本
Dim rg As Range '对象
Set rg = Range("A1") '对象赋值
Dim arr(1 to 10) As Integer '数组
'Long 长整数, Single 单精度,Double 双精度,Date 时间
5.数值
dim arr() '定义数组,不能单独给每个变量赋值,用区域赋值
dim arr(10) '下标从0开始'
ReDim [Preserve] arr(1 To j) '数组中不能直接定义变量。需要重定义才能加变量,Preserve保留原本有的值,只改大小
dim arr(1 to 20)
arr = Range("A1:D9") '给数组赋值
Range("A11") = arr(7,2) '数组第七行,第二列
'最大值
Range("h3") = Application.WorksheetFunction.Max(arr)
'match是找到值在数组中的位置,参数是要找的值,要找的数组,精确为0
Range("h2") = Range("a" & Application.WorksheetFunction.Match(Range("h3"), arr, 0) + 1)
'数组的上界,下界
MsgBox UBound(arr)
MsgBox LBound(arr)
- 字典(自动去除重复项)
'在VBE界面中 工具—引用勾选Microsoft scripting runtime,没有就浏览scrrun.dll-确定
Dim dic As New Dictionary
'推荐使用方法
Dim dic
Set dic = CreateObject("Scripting.Dictionary")
'增加一项
dic.Add Key, Item
'通过值取得,修改item
Range("A1") = dic(key)
dic(key) = 200
'通过作为key存入字典,去掉重复值,keys取出
For i = LBound(arr) To UBound(arr)
If arr(i, 2) = Me.ListBox1.Value Then
dic(arr(i, 3)) = 1
End If
Next
Me.ListBox2.List = dic.keys
- 调用语句
'调用其他程序
Sub test1()
Call test 'test是一个其他sub子功能程序
End Sub