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

Language reference for Visual Basic for Applications (VBA)
Visual Basic for Applications (VBA) 的语言参考

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。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/ifthenelse-statement

多行中频示例代码
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。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/select-case-statement

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。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/for-eachnext-statement

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。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/whilewend-statement

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。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/function-statement

函数过程示例代码
' 다음의 사용자 정의 함수는
' 전달된 인수의 제곱근을 반환합니다.
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 中包含的帮助文件。

Visual Basic 설명서(CHM)
Visual Basic 文档 (CHM)

如果您担心病毒等,请不要下载此文件并使用在线帮助。

您必须在打开它之前取消阻止该文件才能正常使用它。选择一个文件,点击右键,在属性右下角勾选“解除阻止”,点击确定,然后打开该文件。 (见下图)

파일 속성, 차단 해제 체크
文件属性,解锁检查

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

Excel 2013 VBA documentation
Excel 2013 VBA 文档

如果您展开上述 URL 底部的安装说明,它会解释当 CHM 文件的内容不可见时如何采取措施。如前所述,这与“解除阻塞”有关。

Install Instructions
安装说明

我找不到 Office 2013 或更高版本的任何脱机帮助 (CHM)。如果您有或知道 URL,请发表评论。


在本文中,我们研究了 VBA 语法。我只总结了最基本的内容,如果你清楚地理解了这个语法,你就可以读写大部分的VBA代码。接下来,我们将看看数据类型。


<<相关文章一览>>

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CN简体中文