– 宏是一系列存储于VisualBasic模块中的命令与函数,它们记录了用户的一段操作,能够在需要时执行以重现用户的操作过程。宏相当于一段记录用户操作的录像,在任何需要的时候可以重现。因此,使用宏是避免大量重复操作,实现操作自动化的好方法。
– Excel具有录制宏的能力,录制完成的宏,将作为VBA程序代码,存储在模块的“代码”窗口(如下图所示)中
– VBA是针对Office软件的一种程序语言,其能够帮助用户从繁杂的重复工作中解脱出来。录制宏可以直接借助于界面操作完成大部分的代码编写,程序员只需要对宏代码进行修改和优化即可获得最终需要的代码。
1.点击上图中的录制宏按钮
2.对Excel表格中的某对象依次进行若干操作
3.点击下图中的停止录制按钮
可以使用图片、图形或文本框等对象来作为宏的开关
举例:在文本框(或其他对象)上右击,选择关联菜单中的“指定宏”命令,此时将打开“指定宏”对话框,在对话框中选择列表中的宏,点击“确定”,即可完成关联。
"这是一组使用双引号括起来的字符串"
这是空字符串:
""
实际操作过程中, 由于某些企业对于货币计量的精度要求极高,存储金额所使用的数据类型可能依然是字符串型
# January 1, 2023#
枚举类型是VBA中的一种特殊数据类型,当一个变量只有几种可能的值时,可以将其定为枚举类型。枚举类型的数据时将变量的所有可能值一一列举出来,属于该枚举类型的变量只能取枚举中的某一个值。
Public Enum Week星期日星期一星期二星期三星期四星期五星期六
End Enum
自定义数据的语法格式:
Type 数据类型名数据类型元素名 As 数据类型数据类型元素名 As 数据类型数据类型元素名 As 数据类型...
End Type
Type myTypemyName As StringmyID As NumbermyBir As Date
End Type
' 在这串代码中,定义了名为myType的自定义数据类型,
' 该数据类型包含了3个数据元素,这三个数据类型的元素分别是String,Number 和Date
Number 是个什么样子的数据类型?刚才也没提到啊
Dim 变量名 [As 数据类型]
Dim IntA As Integer, stringB As string ,
Option Explicit
...' 剩余代码
Option Explicit
Public myString As String
动态变量:假设某变量是动态变量,当程序进入该变量所在的sub过程时,该变量就会被初始化并载入内存;当退出该过程时,该变量占用的内存会被释放,其值也会消失。
静态变量:假设某变量是静态变量,在程序进入该变量所在的sub过程时,该变量会和动态变量一样被初始化,当退出该过程时,该变量占用的内存不会被释放,其值会依然留存在内存中,当再次进入该过程时,变量值可以被重复利用。
无论动态变量还是静态变量,其生存期都会在Excel工作簿关闭后结束
' 静态变量的声明:
Static myString As String
Square = 3.14
字符常量需要使用双引号"作为定界符,在字符串中有双引号时,需要用到转义字符:双引号"的转义字符是一个双引号"自己
"我说:""VBA实际上真的很简单!"""
在这里,最后用了三个引号,其中前两个引号将输出一个引号“"”,最后一个引号是这个字符串的右定界符
这也是在VBA中很常见的一类常量:用来表示某一天或者某一个时间。与字符常量不同,其需要使用“#”作为定界符
[Public|Private] Const 常量名 [As 数据类型] = 常数表达式
其中,Public声明的是公有常量,Private声明的是私有常量
Excel VBA 系统常量是系统内部提供的一系列具有各种不同用途的符号常数。如色彩常数中的vbRed表示红色,显然比用数值0xFF0000要更直观的多
在VBA中,系统常数名常采用大小写混合的格式,其前缀表示定义常数的对象库名,在Excel中,系统常量名通常采用大小写混合的格式,其前缀表示定义常数的对象库名。
在Excel中,系统常量名通常是由小写的xl作为前缀。如设置工作簿显示状态属性的常量xlSheetVisible。VBA系统内部的符号常量通常是由小写vb作为前缀,如定义颜色的常量vbBlack和定义日期的常量vbSaturday等。
Excel VBA 系统常量的查阅:
Visual Basic 编辑器=> 对象浏览器=> 视图=> 搜索需要的系统常量
"EFGHIJK" like "*GH*"
其中,* 是通配符,在Excel中,* 表示一个或几个任意字符
蕴含是指表达式A为True,表达式B为False时才会返回False,否则其他情况都返回True
** A Imp B 和 B Imp A是不同结果的两种表达式
“&”运算符用来强制将两个表达式作为字符串连接起来,如:
"I love" & "VBA"
Dim 数组名(上界) As 数据类型
Dim myStrings(15) As String
这里,声明了一个名为myStrings的一维数组,数组中的元素从myStrings(0)开始,一直到myStrings(15),一共包含16个元素
Dim 数组名(下界 to 上界) As 数据类型
Dim myArray(-2 to 8) As String
这里,声明了一个名为myArray的一维数组,数组中的元素从myArray(-2)开始,一直到myStrings(8),一共包含11个元素
Dim 数组名(第一维上界,第二维上界) As 数据类型
Dim 数组名(第一维下界 to 第一维上界,第二维下界 to 第二维上界) As 数据类型
主要分为两步:
1.使用Dim、Static、Private或Public语句来声明一个数组,此时括号内不写上下限,如:
Dim myArray() As Integer
2.在创建数组之后,使用ReDim语句再次对数组进行声明,为数组重新分配内存空间:
ReDim [Preserve] myArray(UBound(myArray)+10)
注意:这里UBound函数用来获取函数的最大下标,如果需要获取最小下标,使用LBound函数
VBA提供了两种为代码添加单行注释的方法,如下例所示:
Rem 后面这些文字都是注释
' 后面这些文字都是注释
返回值 = InputBox(Prompt[,Title] [,Default] [,Xpos,Ypos] [,Helpfile,Context])
Prompt : 该参数用于设置对话框中显示的提示信息,最大长度为1024个字符。如果需要在对话框内显示多行字符,可以在文字之间只用回车符 vbCrLf来换行
Title : 该参数用于设置对话框标题栏中显示的字符,其值为字符串型数据。
Default : 默认值
Xpos和Ypos : 这两个参数分别用于设置对话框在屏幕上的位置。
Helpfile: 该参数用于设置对话框的帮助文件
Context: 该参数用于设置对话框的帮助主题编号
MsgBox函数有两种使用方法:
1.不返回值的函数调用:只显示某些提示信息。例如:
MsgBox Prompt [,Buttons] [,Title] [,Helpfile,Context]
2.获取返回值的函数,需要将用户点击了哪个按钮告知程序,则可以使用下面的语法格式:
返回值 = MsgBox(Prompt [,Button] [,Title] [,Helpfile] [,Context])
其中,Buttons参数决定了按钮的样式,由VBA常数来设置,这些常数的意义如下表所示
常数 | 值 | 描述 |
---|---|---|
vbOKOnly | 0 | 显示 OK 按钮。 |
vbOKCancel | 1 | 显示 OK 及 Cancel 按钮。 |
vbAbortRetryIgnore | 2 | 显示 Abort、Retry 及 Ignore 按钮。 |
vbYesNoCancel | 3 | 显示 Yes、No 及 Cancel 按钮。 |
vbYesNo | 4 | 显示 Yes 及 No 按钮。 |
vbRetryCancel | 5 | 显示 Retry 及 Cancel 按钮。 |
vbCritical | 16 | 显示 Critical Message 图标。 |
vbQuestion | 32 | 显示 Warning Query 图标。 |
vbExclamation | 48 | 显示 Warning Message 图标。 |
vbInformation | 64 | 显示 Information Message 图标。 |
vbDefaultButton1 | 0 | 第一个按钮是缺省值。 |
vbDefaultButton2 | 256 | 第二个按钮是缺省值。 |
vbDefaultButton3 | 512 | 第三个按钮是缺省值。 |
vbDefaultButton4 | 768 | 第四个按钮是缺省值。 |
vbApplicationModal | 0 | 应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作。 |
vbSystemModal | 4096 | 系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。 |
vbMsgBoxHelpButton | 16384 | 将Help按钮添加到消息框 |
vbMsgBoxSetForeground | 65536 | 指定消息框窗口作为前景窗口 |
vbMsgBoxRight | 524288 | 文本为右对齐 |
vbMsgBoxRtlReading | 1048576 | 指定文本应为在希伯来和阿拉伯语系统中的从右到左显示 |
常数 | 值 | 描述 |
---|---|---|
vbOK | 1 | OK |
vbCancel | 2 | Cancel |
vbAbort | 3 | Abort |
vbRetry | 4 | Retry |
vbIgnore | 5 | Ignore |
vbYes | 6 | Yes |
vbNo | 7 | No |
MsgBox "这是一个信息提示框",vbYesNoCancel + vbMsgBoxHelpButton + vbExclamation + vbDefaultButton2
Debug.Print 显示内容
会在Visual Basic编译器的“立即窗口”中直接显示其内容
实例:使用Stop语句实现逐行显示:
Sub 使用Stop方法() Dim a As Stringa = InputBox("请输入字符","输入字符")Debug.Print Tab(3);aStopDebug.Print Tab(2);a;Tab(4);aStopDebug.Print Tab(1);a;Tab(3);a;Tab(5);a
End Sub
继续点击运行按钮两次:
对于之前本博客所举之案例,大部分Sub过程都只有一个End语句作为结束。特别地,如果代码中存在分支语句时,我们也许会给每一个分支语句的末尾写一个End语句作为结束,这样就有了不止一个End语句。
If 条件表达式1 Then 语句块1ElseIf 条件表达式2 Then语句块2 .......Else语句块 n End If
Select Case 条件表达式Case 条件表达式1 语句序列1Case 条件表达式2语句序列2.......Case Else 语句序列n
End Select
循环结构的基本语法代码如下
For 循环变量 = 初始值 To 终值 [步长]循环体语句
Next [循环变量]
循环变量:该变量为必选参数,用于设置虚幻次数的计数变量名。
初始值:此参数为必选参数,用于设置循环变量的初始值。
终值:该参数为必选参数,用于设置循环变量的终止值。
步长:该参数为可选参数,用于设置循环变量在每次循环后变化的数值
示例:使用For循环计算累加值
Sub 计算指定范围内的累加和()Dim a,bDim i As Integer,sum As Double' 声明变量,i 为循环变量,sum为每次循环变量获得的和a = InputBox("请输入初始值","计算数字的累加和","0")' 获取用户输入的初始值和终止值b = InputBox("请输入终止值","计算数字的累加和","0")sum = 0For i = a To b sum = sum + iNext MsgBox "从" & a &"到" & b &"的和为" & sum, , "计算数字的累加和" ' 显示计算结果
End Sub