2022年ExcelVBA语法基础.pdf
Excel VBA 语法基础第 2 章VBA 语法基础与其她编程语言类似 ,VBA 程序代码也就是有基础语句组成的。在本章中,将结合具体的例子来介绍VBA 语法的基础内容。主要包括输入、输出语句、分支结构与循环结构等。在讲解各例子的时候 , 将详细分析例子的应用范围。2、1 输入与输出语句在本小节中 , 将详细讲解最基础的语法结构: 顺序结构。顺序结构不需要使用特殊的控制语句 , 编辑工具按照用户编写的程序语句依次编译, 依次执行。本小节中, 将详细讲解最基础的顺序语句 : 输入与输出语句。案例 8 输出数据表1. 功能说明在Excel VBA 中, 用户可以使用Print 方法输入各种类型的数据。同时 ,用户可以在程序代码中设置不同的输出 , 来检测程序代码。2. 语法说明在Excel VBA 中,Print 方法组要应用于Debug 对象, 其语法格式如下 : Debug 、Print outputlist 参数outputlist 表示需要打印的表达式或列表。如果省略参数, 则打印空白行。Print 方法先计算表达式的数值 ,然后输出结果。 在outputlist 参数中还可以使用分隔符 ,格式化输出的结果 , 分隔符有以下几种 :?Spc(n): 插入n 个空格到输出数据之间 ;?Tab(n): 移动光标到适当位置 ,n 为移动的列数 ;?分号 : 表示前后两个数据项连在一起输出;?逗号: 以14 个字符为一个输出区 , 每个数据输出到对应的输出区。3. 案例说明本例使用Print 方法向VBE 的立即窗口中输出数据表。4. 编写代码输出数据表的代码如下 :Sub GetNumbers() Dim i As Integer 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础5. 运行结果按功能键“F5”运行子过程 , 在“立即窗口”输出数据计算表 , 如图2、1 所示。图2、1 输出结果6. 程序分析在上面的程序代码中 , 利用循环结构依次输出不同情况的数字计算结果。关于循环结构的知识, 将在后面章节中详细讲解。案例 9 输入用户名1. 功能说明在Excel VBA 开发过程中 , 经常需要与用户进行交互。例如, 很多程序代码的结果依赖于用户输入的信息。这个时候, 用户需要调用输入函数, 提供用户输入信息, 并接收用户所输入的信息。2. 语法说明在Excel VBA 中, 用户可以使用InputBox 函数输入信息。该函数将打开对话框, 用户可以在对话框中输入数据 , 并返回所输入的内容。其语法格式如下: InputBox(prompt, title , default , xpos , ypos , helpfile, context) 各参数的含义如下 :?Prompt: 对话框消息出现的字符串表达式。最大长度为1024 个字符。如果需要在对话框中显示多行数据, 则可在各行之间用回车符换行符来分隔。?Title: 对话框标题栏中的字符串。如果省略该参数, 则把应用程序名放入标题栏中。?Default: 显示在文本框中的字符串。如果省略该参数, 则文本框为空。Dim j As Integer For i = 1 To 5 For j = 1 To i Debug 、Print i; +; j; =; i + j; ; Next Debug 、Print Next End Sub 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础?Xpos: 与Ypos 成对出现 , 指定对话框的左边与屏幕左边的水平距离。如果省略该参数, 则对话框会在水平方向居中。?Ypos: 与Xpos 成对出现 , 指定对话框的上边与屏幕上边的距离。如果省略该参数, 则对话框被放置在屏幕垂直方向距下边大约三分之一的位置。?Helpfile: 设置对话框的帮助文件, 可省略。?Context: 设置对话框的帮助主题编号, 可省略。3. 案例说明在本例中 , 将演示使用InputBox 函数对话框输入信息 , 然后将信息输出到立即窗口中。4. 编写代码在模块中输入以下代码 :5. 运行结果(1) 按功能键“F5”运行子过程 , 将弹出“输入个人信息”窗口, 如图2、2 所示。在对话框中输入内容后单击“确定”按钮。(2) 在“立即窗口”中将输出这些内容 , 如图2、3 所示。图2、2 输入用户名图2、3 输出结果6. 程序分析本案例比较简单 , 直接使用InputBox 函数来输入信息。对于InputBox 函数的其她参数, 都直接使用默认数值。在实际开发中, 用户可以设置这些参数的数值, 实现不同的功能。Sub CetUserName() Dim Title As String Dim Name As String Dim StrName As String Title = 输入用户名 Name = 在选框中输入用户名: StrName = InputBox(Name, Title) Debug 、Print 用户名 : ; StrName 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础案例 10 事件确认1. 功能说明在Excel VBA 编码与调试代码的过程中 ,经常需要获取代码运行的阶段性结果或者信息。例如 , 在编写数据处理的代码中, 用户需要跟踪某变量的数值变化。因此, 需要在程序进行的不同地方 , 显示该变量的数值。2. 语法说明在Excel VBA 中, 用户可以使用MsgBox 函数来显示提示信息。MsgBox 函数可打开对话框, 显示提示信息。并根据用户选择对话框中的按钮, 执行不同的程序代码。其语法格式如下: Value=MsgBox(prompt,buttons,title ,help) 通过函数返回值可获得用户单击的按钮, 并可根据按钮数值而选择程序段来执行。函数有5 个参数, 各参数的意义与Inputbox 函数参数的意义类似。对于buttons 参数, 其含义就是指定显示按钮的数目及形式、使用提示图标样式以及默 认按钮等。其常数值如表2、1 所示。表 2、1 按钮常数值常量值说明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 进入该消息框 , 所有应用程序暂停表2、1 中的数值 (或常数)可分为四组 , 其作用分别为 :?第一组值(05) : 确定对话框中按钮的类型与数量。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础?第二组值(16,32,48,64) : 确定对话框中显示的图标。?第三组值(0,256,512) : 设置对话框的默认活动按钮。?第四组值(0,4096) : 确定消息框的强制响应性。buttons 参数由上面4 组数值组成 , 其组成方法就是 : 从每一类中选择一个值 , 把这些数值组合起来 , 就就是buttons 参数的值。3. 案例说明本例的主要功能就是当用户激活工作表Sheet1 时,Excel 显示激活的信息。4. 编写代码(1) 进入VBE, 在代码窗口左上方的对象列表中选择“Worksheet” , 如图2、4 所示。(2) 在代码窗口右上方的事件列表中选择“Activate” , 如图2、5 所示。图2、4 对象列表图2、5 事件列表(3) 在上面生成的事件过程中输入以下代码:5. 运行结果打开工作薄 , 然后选择Sheet1 工作表, 结果如图2、6 所示。图2、6 显示的提示信息Private Sub Worksheet_Activate() MsgBox ( 您激活了 Sheet1 工作表! ) End Sub 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础6. 程序分析在本例中 , 使用的就是MsgBox 函数的最简单形式 , 也就就是直接使用MsgBox 函数显示一个字符串信息。在实际开发中 , 用户可以设置各参数 , 得到不同的显示结果。2、2 选择结构在Excel VBA 中, 除了常见的顺序结构之外 , 还有一种常见结构 : 选择结构。选择结构的程序将根据给定的条件选择执行后续的代码。选择结构在日常生活中应用十分广泛, 在本小节将结合具体的例子来讲解如何使用选择结构。案例 11 判断优秀员工1. 功能说明在实际开发中 , 当用户只需要进行一种情况的判断时,最方便的方法就是If Then 语句。If 后面的语句就就是判断的条件 ,Then 后面的语句就是需要执行的操作。2. 语法说明在Excel VBA 中, 使用If、 Then 语句可有条件地执行语句。其语法格式如下:逻辑表达式可以就是计算数值的表达式,VBA 将为0 瞧作为False, 而非零数值都被瞧作True。该语句的执行顺序就是 :当逻辑表达式的值就是True, 则执行位于Then 与End If 之 间的语句; 当逻辑表达式的值就是False, 则不执行Then 与End If 之间的语句 , 直接跳出循 环结构, 其流程图如图2、7 所示。图2、7 If Then 语句流程图If 逻辑表达式Then 语句 1 语句 1 语句 n End If 语句序列逻辑表达式假真精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础If Then 结构还有单行结构条件语句。其语法格式如下: If 逻辑表达式Then 语句该语句的功能为 : 当逻辑表达式的值就是True, 则执行Then 后的语句; 当逻辑表达式的值就是False,则不执行Then 后的语句。3. 案例说明某公司统计了员工上个月的销量 , 根据销量数值 , 公司判定销量数值大于350 的员工为优秀员工。对于优秀员工将其对应的单元格标红,原始数据如图2、8 所示。图2、8 原始数据4. 编写代码判断优秀员工的代码如下 :5. 运行结果打开工作薄 , 然后运行程序代码 , 结果如图2、9 所示。Sub ShowExcel() Dim i As Integer For i = 2 To 10 If Sheets(1) 、Cells(i, 2) 、Value 350 Then Cells(i, 2)、Interior 、ColorIndex = 3 End If Next 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础图2、9 运行结果6. 程序分析从上面案例的结果中可以瞧出 , 当程序处理的只有一个条件时 , 使用If、 Then 语句可 以很便利的解决问题。案例 12 根据编号分组1. 功能说明当用户在实际开发时 , 经常需要进行多条件判断。例如 , 当满足条件1 时, 执行第一种操作; 当不满足条件1 时, 执行另外一种操作。当用户需要编写这些类型的代码时, 前 面案例中的If Then 语句将无法满足 , 用户需要使用If 、 、 Then Else 语句。2. 语法说明在Excel VBA 中, 用户可以使用If 、 、 Then Else 语句, 根据条件就是否成立分别执行两段不同的代码 , 其语法格式如下 :该语句的执行过程就是 : 当逻辑表达式的值就是True 时, 将执行“语句序列1”中的各条语句;当“逻辑表达式”的值为False 时,就执行“语句序列2”中的各条语句 , 其流程图如图2、10 所示。If 逻辑表达式Then 语句序列1 Else 语句序列2 End If 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础图2、10 If Then Else 语句流程图3. 案例说明某公司统计了员工上个月的销量 , 公司需要根据员工编号判断员工的组别。当编号就是 偶数的时候 , 员工属于女组 ;当编号就是奇数时 ,员工属于男组 , 原始数据如图2、11 所示。图2、11 原始数据4. 编写代码分组的程序代码如下 :Sub ShowTeam() Dim i As Integer For i = 2 To 10 If Sheets(1) 、Cells(i, 1) 、Value Mod 2 Then Cells(i, 3) 、Value = 男组 Else Cells(i, 3) 、Value = 女组 End If Next End Sub 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础5. 运行结果打开工作薄 , 运行程序代码 , 得到的结果如图2、12 所示。图2、12 运行结果6. 程序分析从上面的典型例子中可以瞧出,当在实际情况中需要根据某条件执行两种不同的操作时, 可以使用If 、 、 Then Else 语句便利的完成任务。案例 13 计算消费金额1. 功能说明在实际开发中 , 用户可能需要处理多条件问题。例如, 某公司根据多个销量, 将折扣分为多个档次。在计算销售金额的时候, 需要判断具体销售属于哪个档次, 然后根据该档次的折扣值 , 计算销售金额。这个时候 , 用户可以使用Select Case 语句。2. 语法说明在Excel VBA 中,Select Case 结构的语法格式如下 :根据上面的程序结构 , 代码首先计算“测试表达式”的值 , 然后将表达式的值与结构中的Case 的值进行比较。如果相等 , 就执行与该Case 语句下面的语句块 , 执行完毕再跳Select Case 测试表达式Case 表达式列表1 语句序列1 Case 表达式列表2 语句序列2 Case Else 语句序列n End Select 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础测试表达式语句序列 1 语句序列 2 语句序列 n 转到End Select 语句后执行 , 其流程图如图2、13 所示。图2、13 Select Case 语句流程图在Select Case 结构中, “测试表达式”通常就是数值或字符型的变量。 “表达式列表”可 以就是一个或几个值的列表。如果在列表中有多个值, 需要用逗号将各值分开。表达式列表 可以分下面几种情况 :?表达式: 表示具体的取值。例 :Case 5,8,9。?表达式A To 表达式B: 表示数据范围。例,Case 8 To 12 表示812 之间的值。?Is 比较运算符 表达式 : 表示范围。例 ,Case Is45 表示所有大于45 的值。?以上三种情况的混合。例 ,Case 8 To 12, 17, Is35。3. 案例说明某销售公司根据商品的销量实行不同的折扣, 公司需要根据销量与价格, 计算其销量的总额, 其中原始数据如图2、14 所示。图2、14 原始数据4. 编写代码计算销量金额的代码如下 : Sub GetIncome() 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础5. 运行结果打开工作薄 , 运行程序代码 , 得到的结果如图2、15 所示。图2、15 计算所销售金额Dim IntSale As Integer Dim discount As Single Dim SingleMoney As Single Dim i As Integer Dim IntPric As Integer For i = 2 To 10 IntPric = Cells(i, 1)、Value IntSale = Cells(i, 2)、Value Select Case IntSale Case Is = 100 discount = 0 、95 Case Is = 150 discount = 0 、85 Case Is = 200 discount = 0、7 Case Is = 300 discount = 0 、65 Case Else discount = 0、6 End Select SingleMoney = IntSale * IntPric * discount Cells(i, 3) 、Value = SingleMoney 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础6. 程序分析用户可以使用If 、 Then Elseif 结构来重新编写上面的案例, 然后与Select Case 结构进行比较 , 可以发现Select Case 结构在处理多条件的情况下 ,要简洁很多。2、3 循环结构循环结构就是Excel VBA 中经常使用的一种程序结构 ,当用户需要使用程序代码反复完 成同一任务的时候 , 则需要使用循环结构。在本小节中, 将结合具体例子来讲解如何使用 循环结构。案例 14 计算自然数之与1. 功能说明当用户在进行循环运算的时候, 有时可能了解具体循环的次数。这个时候可以使用For Next 循环语句依次完成循环运算。其中, 最典型的例子就就是计算自然数的总与。当 用户需要计算自然数之与时 , 循环次序已经由自然数的大小决定。2. 语法说明在Excel VBA 中, 如果知道循环的次数 , 可以使用ForNext 循环语句来执行循环。For 循环的语法如下 :在上面的结构中 , 循环变量控制循环 , 每重复一次循环之后 , 循环变量的值将以步长值相加。步长的默认数值就是1, 并且可正可负。如果步长值为正, 则初始值必须小于等于终值, 才执行循环体。如果步长值为负, 则初始值必须大于等于终值, 才能执行循环体。For Next 循环结构的流程图如图2、16 所示。For 循环变量 =初始值To 终值 Step 步长值 语句序列 1 Exit For 语句序列 2 Next 循环变量 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础图2、16 For Next流程图3. 案例说明根据循环结构计算1+2+3+ +1000 的数值。4. 编写代码计算自然数之与程序代码如下 :5. 运行结果运行程序代码 , 结果如图2、17 所示。Sub GetSums() Dim clock As Integer Dim sum As Long Dim counter As Integer clock = 1 sum = 0 counter = 1 For counter = 1 To 1000 sum = sum + clock clock = clock + 1 Next MsgBox 1+2+3+ 、 +1000 = & sum, vbOKOnly, 计算自然数之与 End Sub 循环变量 =初始值Exit For 循环变量累加步长值循环变量超过终值?真假语句序列语句序列2 下一语句精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础图2、17 运行结果6. 程序分析从上面的结果中可以瞧出 , 由于用户计算的就是自然数之与。所以, 在代码中不需要设置参数Step 的数值。案例 15 为单元格赋值1. 功能说明在Excel 中, 由一种特殊的循环。在其循环结构中, 其循环运算的范围就是一个区域。例如, 用户需要在某工作表的单元格区域中进行循环。这个时候 ,用户可以使用For Each Next 循环语句。2. 语法说明在Excel VBA 中,For Each Next 循环语句的语法格式如下 :该循环结构可在对象集合每个元素中执行循环体。集合中必须至少有一个元素, 才会进入For Each 循环体。循环结构先对“对象集合”中的第一个元素执行循环语句, 然后对“对象集合”其她的元素执行循环语句, 当“对象集合”中的所有元素都执行结束, 会退出循环。在循环体中 , 用户可以设置多个Exit For 语句, 退出循环。 。3. 案例说明本例的主要功能就是利用循环结构为单元格区域赋值。4. 编写代码为单元格赋值的程序代码如下 :Sub GetValues() Dim counter As Integer Dim rng As Range Worksheets(sheet1)、Activate For Each rng In Range(A1:E10) For Each 元素In 对象集合语句序列 1 Exit For 语句序列 2 Next 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础5. 运行结果运行程序代码 , 结果如图2、18 所示。图2、18 为单元格区域赋值6. 程序分析从上面例子的结果中可以瞧出 , 循环结构首先填充第一行单元格的数值, 然后依次填充其她行的数值 , 直到循环结束。案例 16 计算阶乘与1. 功能说明在实际开发中 , 用户也许不会仅仅面对循环问题 , 或者仅仅面对选择问题。很多复杂问题都就是嵌套结构 , 循环结构与分支结构的嵌套 , 或者循环结构之间的嵌套等。2. 语法说明在Excel VBA 中, 编写嵌套循环的代码时 , 要注意循环语句的配对情况。如图2、19 所示, 左图就是正确的嵌套关系 ,Next 关闭了内层的For 循环, 而Loop 关闭了外层的Do 循环。同样,在嵌套的If 语句中,End If 语句自动与最靠近的If 语句配对。嵌套的Do、 Loop 结构的工作方式也就是一样的 , 最内圈的Loop 语句与最内圈的Do 语句匹配。图2、19 右图则就是错误的嵌套关系。rng、Value = counter counter = counter + 1 Next End Sub 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础Do While 逻辑表达式1 语句序列 1 Do While 逻辑表达式 2语句序列 2 For I=初值 to 终值语句序列 3 Next I 语句序列 4 LoopLoop Do While 逻辑表达式 1 语句序列 1 Do While 逻辑表达式 2 语句序列 2 For I=初值 to 终值语句序列 3 Loop 语句序列 4 NextLoop图2、19 正确的嵌套( 左)与错误的嵌套 ( 右)3. 案例说明本例将演示计算1!+2!+3!+10!的结果 , 并输出结果。4. 编写代码计算结果的程序代码如下 :5. 运行结果运行程序代码 , 得到的结果如图2、20 所示。图2、20 计算阶乘的与Sub SumProduct() Dim sum As Double Dim i As Integer Dim DouProduct As Double Dim j As Integer sum = 0 For i = 1 To 10 DouProduct = 1 For j = 1 To i DouProduct = DouProduct * j Next sum = sum + DouProduct Next MsgBox 1! + 2! + 3! +、 + 10! = & sum, vbOKOnly, 求阶乘的与 End Sub 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 17 页,共 18 页 - - - - - - - - - - Excel VBA 语法基础6. 程序分析使用Excel VBA 的嵌套结构 , 用户可以处理许多复杂问题 , 只就是在使用嵌套结构时 , 用户需要特别注意匹配问题。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 18 页,共 18 页 - - - - - - - - - -