# 语法快速入门

  语法相关的详细说明请参考VBScript参考手册,本节内容只重点讲解一些重要的语法和区别。

# 变量声明

  金字塔环境下的VBA变量和VBScript完全相同,既支持隐式声明也支持显式声明;但是金字塔中显示声明是通过设置完成控制的,需要在 菜单栏【工具】--【选项】--【基本设置】--【其他】中勾选【VBA变量名必须显式声明所有变量】。显示声明

命名规则

  • 必须以字母开头
  • 不能包含点号(.)
  • 不能超过 255 个字符

示例:

隐式声明变量,其实就是直接复制操作。例如:

AA=10
1

使用 Dim 语句、Public 语句和Private语句在 Script 中显式声明变量,显式声明时,不支持直接赋初始值,赋值操作必须在显式声明语句之后进行。例如:

'显式声明变量DegreesFahrenheit
Dim DegreesFahrenheit
'赋初始值为10
DegreesFahrenheit=10
1
2
3
4

声明多个变量时,使用逗号分隔变量。例如:

Dim Top, Bottom, Left, Right
1

隐式声明变量虽然便捷,但是并不是一个好的使用习惯,当我们变量赋值时,容易因为拼写错误造成声明出一个新的变量出现,从而可能造成代码执行时出现非预期的结果。

  数组变量是通过一个变量存储多个值,在金字塔中,VBA数组变量的起始位置是从0开始的,初学者在操作数据时,小心造成数据越界。下面是两种数组变量的赋值操作方法。

方法1:普通数组赋值操作

Dim stuname(2)   '定义长度为3的数组
'对数组元素进行赋值
stuname(0)="sansa"
stuname(1)="susen"
stuname(2)="minmin"

Dim i  '在for中i变量使用要先定义
'使用for循环变量数组每个元素,并将数组元素弹出
For i=0 to 2
  Msgbox stuname(i)
Next
1
2
3
4
5
6
7
8
9
10
11

方法2:利用array函数简化数组元素赋值操作。

Dim i 
Dim stuname2
'第二种方式:Array函数的返回值是一个数组
stuname2=Array("sansa","susen","minmin")
'UBound函数返回数组长度,减1的原因是数组下标从0开始,否者会因为数组操作越界造成执行异常
For i=0 to UBound(stuname2)-1
     msgbox  stuname2(i)
Next
1
2
3
4
5
6
7
8

变量的作用域

  • 当变量在子程序(过程或者函数)中被声明时,该变量只能在这个子程序内部进行访问。所以可以在不同的子程序(过程或者函数)中使用名称相同的本地变量,因为每个变量只能在声明它的子程序内得到识别。
  • 当变量在子程序之外被声明时,那么它作用于整个VBA工程中,任意子程序都可以访问并使用此变量。

# 条件语句

在金字塔中条件语句可以根据不同的使用场景分为以下四种条件语句,IF语句支持嵌套使用,在VBS中条件语句以条件关键字(IF、Select)开头,以END 关键字(IF、Select)结束。

  1. IF 语句 -- 单一条件判断是否成立。语法如下:
  1. If...Then...Else 语句 -- 双分支选择语句,适合二选一应用场景。
  1. If...Then...ElseIf 语句 -- 多分支语句,适合多选一应用场景,其中ElseIf可以多次使用,从而实现更多的判断分支。
  • 结构:If...Then...ElseIf语句是一种基本的条件控制结构,用于根据条件执行不同的代码块。
  • 用法:适合用于逐一检查多个条件,并根据条件的真假执行不同的操作。
  • 特点:每个条件都会按顺序逐个检查,一旦满足条件就执行相应的代码块,并且只会执行一个代码块(符合第一个满足条件的分支)。
  1. Select Case 语句 - 假如您希望选择多套代码之一来执行,
  • 结构:Select Case语句允许根据一个表达式的值,从多个可能的选项中选择一个执行。
  • 用法:适合用于对一个变量或表达式的值进行多路分支判断。
  • 特点:根据表达式的值选择相应的分支进行执行,每个分支可以是一个具体的值,不像If...Then...ElseIf那样依赖于条件的布尔真假。

总结:

如果需要按顺序逐个检查多个条件并执行相应操作,可以使用If...Then...ElseIf语句。
如果根据一个表达式的值进行多路分支选择,则使用Select Case语句更为合适和清晰。

# 循环语句

在金字塔中循环操作的使用场景同样可以分为以下四种循环语句格式。

特点: For...Next 循环用于在已知迭代次数的情况下执行循环。通常用于迭代数值范围。 语法特点: 可以指定初始值、终止值和可选的步长。步长默认为1,可以是正数或负数。 适用场景: 当需要按照一定步长和次数迭代时,特别是针对数值范围的循环操作,如处理数组、执行固定次数的计算等。

  1. For...Next 语句 - 运行一段代码指定的次数。
  1. For Each...Next 语句 - 针对集合中的每个项目或者数组中的每个元素来运行某段代码

特点: For Each...Next 循环用于遍历集合或数组中的每个元素,而不是基于数值范围的迭代。 语法特点: 需要指定一个变量来表示集合中的每个元素,通常用于处理集合类数据结构。 适用场景: 当需要遍历数组、集合或字典等数据结构中的所有元素时,特别是处理不同类型元素的循环操作时,For Each 循环是首选。

  1. Do...Loop 语句 - 运行循环,当条件为 true 或者直到条件为 true 时

特点: Do...Loop 语句提供了一种无限循环的方式,通过条件控制循环的开始和结束。 语法特点: 可以使用 Do While 或 Do Until 条件来控制循环执行的条件,Do While是在条件为真时继续循环,Do Until在条件为假时继续循环。 适用场景: 当不确定循环次数,而是依赖于某个条件是否满足时,可以使用 Do...Loop 循环。特别适合需要反复执行,直到满足某个条件退出的情况。

  1. While...Wend 语句 - 不要使用这个语句 - 请使用 Do...Loop 语句代替它

特点: While...Wend 与 Do...Loop 类似,也是通过条件来控制循环的执行。 语法特点: 使用 While 关键字来指定循环的条件,使用 Wend 关键字表示循环体的结束。 适用场景: 和 Do...Loop 类似,适合在条件为真时继续执行循环,直到条件为假时退出循环。While...Wend 可能在某些情况下比 Do...Loop 更符合语义或代码结构。

总结:

迭代次数是否已知: 如果循环的次数是明确的,通常使用 For...Next 循环。
遍历集合或数组: 对于需要遍历集合或数组中的每个元素,使用 For Each...Next 循环。
条件控制: 当循环的次数或条件不确定时,可以使用 Do...Loop 或 While...Wend 循环。
代码结构和语义: 在选择 Do...Loop 和 While...Wend 时,可以根据个人或团队的偏好和代码结构,选择更合适的语法。

# 函数

VBS内建函数不在一一说明,可以根据使用需要查阅VBScript 函数手册