Excel VBA教程(七):Excel VBA语言基础——语法
本文将着眼于 Excel VBA 语言基础中的语法(Syntax)。
这是上一篇文章的延续。
Excel VBA教程(六):Excel VBA语言基础-变量
3.2.语言语法
VBA 语言的语法与 Visual Basic 的语法相同。一开始你不需要知道所有的语法,这里总结的语法就足够了。有关完整语法,请参阅下面附加的 Visual Basic CHM 帮助文件。
VBA 语言的在线帮助(仅提供英文版)可从以下 URL 获得。
https://docs.microsoft.com/en-us/office/vba/api/overview/language-reference
3.2.1。有条件的 (IF)
根据表达式的值有条件地执行一组语句。
单行 IF 语法
If condition Then [statements] [Else elsestatements]
单行中频示例代码
If Digits = 1 Then MyString = "One" Else MyString = "More than one"
多行 IF 语法
If condition Then [statements] [ElseIf condition -n Then [elseif statements]...] [Else [else statements]] End If
Visual Basic 帮助
- (健康)状况
- 必不可少的元素。这两种形式中的一种或多种的表达:
- 真的我 错误的作为计算结果为的公式或文字表达式 (健康)状况这个 无效的背面 错误的被视为
- 类型 对象名 是 对象类型 它是一种形式的表达。 对象名是一个对象引用, 对象类型是有效的对象类型。 对象名这个 对象类型如果由 指定的对象类型,则表达式为 True;否则为 False。
- 陈述
- 在块形式中,它是一个可选元素, 别的这对于没有子句的单行表单是必不可少的。两个或多个语句用冒号分隔。 (健康)状况这个 真的如果是,它将被执行。
- 条件-n
- 可选元素。 (健康)状况如同
- elseif 语句
- 可选元素。有关的 条件-n这个 真的一个或多个要执行的语句 if 。
- 其他语句
- 可选元素。事先的 (健康)状况或者 条件-n饮食 真的如果不是,则执行一条或多条语句。
* 参考: 以上内容摘自chm help翻译成韩语。有关联机帮助,请参阅下面的 URL。
多行中频示例代码
Dim Number, Digits, MyString Number = 53 ' 변수를 초기화합니다. If Number < 10 Then Digits = 1 ElseIf Number < 100 Then '조건이 True로 평가되면 다음 문이 실행됩니다. Digits = 2 Else ' 조건이 False로 평가되면 다음 문이 실행됩니다. Digits = 3 End If
3.2.2.条件函数 (IIF)
根据计算表达式的结果返回两个值之一。
IIF 是一个函数,用于简要表达 If ~ Else ~ End If 语句。
IIF 语法
IIf(expr, true part, false part)
Visual Basic 帮助
零件 | 解释 |
表达式 | 必不可少的元素。您要评估的表达式 |
真实的部分 | 必不可少的元素。 表达式这个 真的if 返回的值或表达式。 |
虚假部分 | 必不可少的元素。 表达式这个 错误的if 返回的值或表达式。 |
* 参考: 以上内容摘自chm help翻译成韩语。有关联机帮助,请参阅下面的 URL。
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/iif-function
IIF 示例代码
Function CheckIt (TestMe As Integer) CheckIt = IIf(TestMe > 1000, "Large", "Small") End Function
3.2.3。有条件的(选择案例)
根据表达式的值执行几组语句之一。
选择案例条件语法
Select Case test expression [Case expressionlist-n [statements-n]] ... [Case Else [else statements]] End Select
Visual Basic 帮助
零件 | 解释 |
测试表达式 | 必不可少的元素。任何公式或字符表达式。 |
表达式列表-n | 案子 这在使用语句时是必不可少的。 表达, 表达 至 表达, 是 比较运算符表达式由以下一种或多种格式的分隔列表组成: 至 关键字指定值的范围。 至 如果使用关键字,则较小的值是 至你必须到门口。要指定值的范围,请使用比较运算符 (是 大量的美术作品 喜欢与门) 是 使用关键字。 是 如果您不输入关键字,它将自动插入。 |
语句-n | 可选元素。 测试表达式对应于 表达列表如果存在,则执行其一个或多个语句。 |
其他语句 | 可选元素。 测试表达式对应于 案子如果该子句不存在,则执行其一个或多个语句。 |
* 参考: 以上内容摘自chm help翻译成韩语。有关联机帮助,请参阅下面的 URL。
Select Case条件语句示例代码
Function Bonus(performance, salary) Select Case performance Case 1 Bonus = salary * 0.1 Case 2, 3 Bonus = salary * 0.09 Case 4 To 6 Bonus = salary * 0.07 Case Is > 8 Bonus = 100 Case Else Bonus = 0 End Select End Function
3.2.4。循环(对于)
重复一组语句指定的次数。
For Next 循环语法
For counter= start To end [Step step] [statements] [Exit For] [statements] Next [counter]
零件 | 解释 |
柜台 | 必不可少的元素。用作循环计数器的数值变量。此变量不能是布尔值或数组元素。 |
开始 | 必不可少的元素。 柜台的起始值 |
结尾 | 必不可少的元素。 柜台的最终值 |
步 | 可选元素。每次执行循环时, 柜台是数量如果未指定 步默认为 1。 |
陈述 | 可选元素。 为了哇 下一个 中间有一条或多条语句,并执行了指定的次数。 |
* 参考: 以上内容摘自chm help翻译成韩语。有关联机帮助,请参阅下面的 URL。
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/fornext-statement
For Next 循环示例代码
Dim Words, Chars, MyString For Words = 10 To 1 Step -1 ' 10번 반복을 설정합니다. For Chars = 0 To 9 ' 10번 반복을 설정합니다. MyString = MyString & Chars ' 숫자를 문자열에 추가합니다. Next Chars ' 카운터 증가 MyString = MyString & " " ' 빈 칸을 추가합니다. Next Words
3.2.5。对于每个
为数组或集合的每个元素迭代一组语句。
For Each 循环语法
For Each element In group [statements] [Exit For] [statements] Next [element]
零件 | 解释 |
元素 | 必不可少的元素。用于迭代集合或数组元素的变量。从收藏 元素只能是 Variant 变量、通用对象变量或特定对象变量。在一个数组中 元素只是 变体 它只能是一个变量。 |
团体 | 必不可少的元素。每个对象集合或数组的名称(用户定义的类型数组除外)。 |
陈述 | 可选元素。 团体对 中的每个项目执行一个或多个语句。 |
* 参考: 以上内容摘自chm help翻译成韩语。有关联机帮助,请参阅下面的 URL。
For Each 循环示例代码
Dim Found, MyObject, MyCollection Found = False ' 변수를 초기화합니다. For Each MyObject In MyCollection ' 각각의 요소에 대해 반복합니다. If MyObject.Text = "Hello" Then ' Text가 "Hello"라면. Found = True ' Found변수를 True로 설정합니다. Exit For ' 루프를 종료합니다. End If Next
3.2.6。循环(同时)
只要给定条件为真,语句序列就会继续执行。
While 循环语法
While condition [statements] Wend
零件 | 解释 |
(健康)状况 | 必不可少的元素。 真的我 错误的计算结果为 的公式或字符表达式。如果 (健康)状况如果这是 Null (健康)状况银 错误的被视为 |
陈述 | 可选元素。给定条件 真的执行一个或多个语句 while 。 |
* 参考: 以上内容摘自chm help翻译成韩语。有关联机帮助,请参阅下面的 URL。
While 循环示例代码
Dim Counter Counter = 0 ' 변수를 초기화합니다. While Counter < 20 ' 변수 Counter 값을 검사합니다. Counter = Counter + 1 ' 변수 Counter 값을 1씩 증가시킵니다. Wend ' 변수 Counter의 값이 19보다 크면 While 루프를 종료합니다. Debug.Print Counter ' 직접 실행
3.2.7。循环控制(退出,继续)
Exit For 可用于在循环执行过程中出现特定条件时停止重复的语句。但是,VBA 不支持用于跳过重复的 continue 语句。使用 IF 块或 Goto 语句进行控制。
如何使用 if 块
- 如何包装 If 块,以便仅在满足某些条件时执行语句
- 当根据代码开头确定的变量值执行继续处理时,可以使用它。
- 如果条件复杂或变量值未初步确定,则难以使用
For iSht = 1 To aBook.Worksheets.Count Set oSht = aBook.Sheets(iSht) If (IsColumnMappingSheet(oSht)) and (lRowOffset >= 0) ... ... End If Next iSht
如何使用转到
- 用于通过计算或代码中间的特定条件继续处理。
- 将要移动到循环底部的位置(就在 Next 上方)指定为标签,并在 If 条件语句中使用 Goto 语法。
- 可以在开头或中间的任何地方使用
For iSht = 1 To aBook.Worksheets.Count Set oSht = aBook.Sheets(iSht) If Not IsColumnMappingSheet(oSht) Then GoTo Continue_To_Next_Sheet ... If lRowOffset < 0 Then GoTo Continue_To_Next_Sheet ... Continue_To_Next_Sheet: Next iSht
3.2.8。程序
过程通常分为子和函数。
子过程语法
[Private | Public] [Static] Sub name [(arglist)] [statements] [Exit Sub] [statements] End Sub
零件 | 解释 |
上市 | 可选元素。模块中的所有程序 子 表示可以调用该过程。如果 选项私人 如果在声明的模块中使用,则不能从项目外部调用该过程。 |
私人的 | 可选元素。 子 表示一个过程只能从声明它的模块中的其他过程调用。 |
朋友 | 可选元素。仅在类模块中使用。 子 表示该过程在整个项目中被识别,但不在对象的实例控制器中。 |
静止的 | 可选元素。 子 指示过程的局部变量在函数调用之间保持不变。即使在程序中使用 子 外部声明的变量 静止的 它没有属性。 |
姓名 | 必不可少的元素。 子 名称,遵循标准变量命名约定。 |
参数列表 | 可选元素。被叫时 子 表示传递给过程的参数的变量列表。使用逗号 (,) 符号分隔多个变量。 |
陈述 | 可选元素。 子 在过程中执行的一组语句。 |
参数列表 参数具有以下组件:
[可选的] [ByVal | 参考文献] [参数数组] 变量名[( )] [作为 类型] [= 默认值]
零件 | 解释 |
可选的 | 可选元素。指示参数不是必需的关键字。 可选的如果你使用 参数列表使用的所有参数都是可选的。 可选的 您必须使用关键字声明它。每一个 可选的 论据是 变体应该 可选的银 参数数组它不能与 . |
ByVal | 可选元素。指示参数是按值传递的。 |
参考文献 | 可选元素。指示参数是按引用传递的。在 Visual Basic 中 参考文献是默认值。 |
参数数组 | 可选元素。 参数列表用作最后一个参数 变体 元素的 可选的 表示它是一个数组。 参数数组 可以使用关键字使用任意数量的参数, ByVal, 参考文献 或者 可选的它不能与 . |
变量名 | 必不可少的元素。表示参数的变量的名称,遵循标准变量命名约定。 |
类型 | 可选元素。传递给过程的参数的数据类型。 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前不支持)、Date、String(仅限可变长度字符串)、Object、Variant 参数 可选的或者,您可以指定用户定义的类型和对象类型。 |
默认值 | 可选元素。常量或常量表达式, 可选的 仅对参数有效。 目的 在类型的情况下,显式默认值是 没有什么只有可能。 |
* 参考: 以上内容摘自chm help翻译成韩语。有关联机帮助,请参阅下面的 URL。
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/sub-statement
子程序示例代码
' 하위 프로시저 정의입니다. ' 두개의 인수를 가진 하위 프로시저입니다. Sub SubComputeArea(Length, TheWidth) Dim Area As Double ' 지역 변수를 선언합니다. If Length = 0 Or TheWidth = 0 Then ' 만약 두 인수가 모두 0이면, Exit Sub ' Sub를 즉시 종료합니다. End If Area = Length * TheWidth ' 사각형의 면적을 계산합니다. Debug.Print Area ' 지역을 디버그 창에 인쇄합니다. End Sub
函数过程语法
[Public | Private | Friend] [Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function
零件 | 解释 |
上市 | 可选元素。 功能 过程表示可以访问任何模块中的所有过程。步骤 选项私人如果在具有 的模块中使用,则不能在项目之外使用。 |
私人的 | 可选元素。 功能 一个过程表明其他过程只能被声明它的模块访问。 |
朋友 | 可选元素。仅在类模块中使用。 功能 表示该过程在整个项目中被识别,但不在对象的实例控制器中。 |
静止的 | 可选元素。 功能 表示过程的局部变量保留在调用中。 静止的 财产是 功能 即使在过程中使用了在外部声明的变量,它也不会对其产生影响。 |
姓名 | 必不可少的元素。 功能, 并遵循标准变量命名约定。 |
参数列表 | 可选元素。你打电话时 功能 表示传递给过程的参数的变量列表。多个变量用逗号分隔。 |
类型 | 可选元素。 功能 过程返回值的数据类型为: Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前不支持)、Date、String、(可变长度除外)、Object、Variant、用户自定义类型 |
陈述 | 可选元素。 功能 要在过程中执行的一组语句。 |
表达 | 可选元素。 功能 返回一个值。 |
参数列表 参数具有以下语法和组件:
[可选的] [ByVal | 参考文献] [参数数组] 变量名[( )] [作为 类型] [= 默认值]
零件 | 解释 |
可选的 | 可选元素。表示不需要任何参数。对于要使用的参数 参数列表以下所有论点 可选的 您必须使用关键字声明它。如果 参数数组什么时候使用 可选的不能用于任何参数。 |
ByVal | 可选元素。指示参数是按值传递的。 |
参考文献 | 可选元素。指示参数是按引用传递的。在 Visual Basic 中 参考文献是默认值。 |
参数数组 | 可选元素。最后一个论点 变体 元素的 可选的 表示它是一个数组 参数列表它仅用作 中的最后一个参数。 参数数组 关键字可以采用任意数量的参数,其中 ByVal, 参考文献, 可选的它不能与 . |
变量名 | 必不可少的元素。表示参数的变量的名称,遵循标准变量命名约定。 |
类型 | 可选元素。传递给过程的参数的数据类型是 字节, 布尔值, 整数, 长, 货币, 单身的, 双倍的, 十进制(目前不支持) 日期, 细绳 (对于可变长度), 目的, 变体,特定的对象类型,等等。范围 可选的如果没有,您还可以指定自定义格式。 |
默认值 | 可选元素。 一个常数我是一个常数 可选的 仅对参数有效。格式 目的如果显式默认值为 没有什么成为唯一。 |
* 参考: 以上内容摘自chm help翻译成韩语。有关联机帮助,请参阅下面的 URL。
函数过程示例代码
' 다음의 사용자 정의 함수는 ' 전달된 인수의 제곱근을 반환합니다. Function CalculateSquareRoot(NumberArg As Double) As Double If NumberArg < 0 Then ' 인수를 계산합니다. Exit Function ' 프로시저 호출을 종료합니다. Else CalculateSquareRoot = Sqr(NumberArg) ' 제곱근을 반환합니다. End If End Function
3.2.9。错误处理
不支持 Java 和 C# 中的 Try、catch 和 finally 语句。使用 On Error Goto 语句处理错误。
建造 | 解释 |
在错误转到标签上 | 如果发生错误,将执行位置移动到指定的标签 |
出错时继续下一步 | 忽略遇到的任何错误并继续使用下一个命令运行 |
错误转到 0 | 初始化设置的错误处理方法(Goto、Resume) |
基本的错误处理代码如下。
Sub ErrorTest() On Error GoTo ErrHandler 'Error 처리 시작 (=try) Dim i As Integer i = 1 / 0 On Error GoTo 0 'Error 처리 종료 (=finally) Exit Sub ErrHandler: 'Error 처리 (=catch) MsgBox Err.Description End Sub
上述代码故意产生除以零错误,从而执行 ErrHandler 区域的语法。
3.2.10。 Visual Basic (VB) 文档帮助 (CHM)
我之前得到了用 CHM(Compiled HTML Help)文件编写的韩语 Visual Basic 手册,但来源未知。它似乎是 Visual Studio 6.0 中包含的帮助文件。
如果您担心病毒等,请不要下载此文件并使用在线帮助。
您必须在打开它之前取消阻止该文件才能正常使用它。选择一个文件,点击右键,在属性右下角勾选“解除阻止”,点击确定,然后打开该文件。 (见下图)
3.2.11。 Office 2013 VBA 文档(CHM,英语)
这是一本关于如何使用 VBA 处理 Office 2013 产品(Excel、Access、OneNote、Outlook、PowerPoint、Publisher、Visio、Word)的手册。
https://www.microsoft.com/en-us/download/details.aspx?id=40326
如果您展开上述 URL 底部的安装说明,它会解释当 CHM 文件的内容不可见时如何采取措施。如前所述,这与“解除阻塞”有关。
我找不到 Office 2013 或更高版本的任何脱机帮助 (CHM)。如果您有或知道 URL,请发表评论。
在本文中,我们研究了 VBA 语法。我只总结了最基本的内容,如果你清楚地理解了这个语法,你就可以读写大部分的VBA代码。接下来,我们将看看数据类型。
<<相关文章一览>>
- 开始 Excel VBA 课程。 (讲座预告,壮举。为什么我们推荐 Excel VBA)
- Excel VBA课程(一):Excel VBA概述
- Excel VBA教程(二):Excel VBA基础
- Excel VBA教程(三):Excel对象模型
- Excel VBA教程(四):使用Excel对象模型
- Excel VBA教程(五):Excel文件扩展名、VBE、字体设置
- Excel VBA教程(六):Excel VBA语言基础-变量
- Excel VBA教程(七):Excel VBA语言基础——语法
- Excel VBA教程(八):Excel VBA语言基础——数据类型、数据结构
- Excel VBA教程(九):Excel VBA How-To
- Excel VBA教程(十):与Excel VBA一起开发和使用的工具
- Excel VBA 课程的完整目录