VBA 表达式和语句
在昨天的教程中说到,一行代码就是一条语句。那么,VBA 中的语句具体是什么,语句还包括哪些基本的结构,语句和表达式有什么关系,今天的教程中,给大家详细介绍。
表达式
首先,相比语句更小的一种代码结构是,表达式。按照字面意思,可以分为两部分,表达和式。组合起来是,通过一种式子,表达相应的值。
VBA 中,返回一个值的代码片段,称之为表达式。
最简单的,最基本的数据写出来就是一个表达式,它返回的是自己本身(100、”Excel” 等)。
100 '=> 100
"Hello World" '=> Hello World
True '=> True
#2018-11-1# '=>2018-11-1
表达式也可以是,多个数据之间的运算表达式。例如,算数运算、逻辑运算、连接运算等。
1+2 '=> 3
10 > 5 '=> True
"Hello " & "World" '=> Hello World
进一步,表达式可以是多个表达式之间的运算。这种时候,往往会把多个表达式用()
括起来,保证运算顺序。
Not (10 > 5) '=> False
(1 + 2) - (10 - 5) '=> -2
使用 VBA 函数也可以是表达式,例如 Left
函数返回左侧指定长度文本。
Left("Hello World", 5) '=> Hello
Abs(-10) '=> 10
Year(#2018-11-1#) '=> 2018
当然,最重要的,表达式中能使用变量。
Dim place As String
place = "World"
"Hello" & place '=> Hello World
Left(place, 3) '=> Wor
语句
编程中光有表达式没有办法做成什么事,需要把表达式与其他元素组合成一个语句,才能发挥它的作用。
VBA 中,一条语句是一个完整指令的。它可以包含关键词、运算符、变量、常量以及表达式。
语句有三大类,分别是:
- 声明式语句,也就是声明变量、常量、过程或者函数。
- 执行式语句,执行指定动作。动作可以包括执行一个过程、开始一个循环、判断表达式等。
- 赋值语句,给变量赋值,是执行式语句的特殊形式。
接下来,分别介绍三类语句。
1.声明式语句
在之前的多篇文章,大家已经看到了很多声明式语句。声明式语句用来声明一个新的变量(包括类型),过程、函数、对象、数组等。
我们看以下代码。
Sub MyCode()
Dim name As String
Dim age As Integer
End Sub
这段代码中,第一个语句就是第一行,声明一个 VBA 过程。声明过程以 Sub
开头,后接过程名()
。对应的,最后一行是,过程的结束语句,即 End Sub
接下来是,两个声明变量的语句,name
和 age
,并且语句中指定了他们的类型。
2.执行式语句
执行式语句执行一个动作。这个动作可以是运行过程、开始循环、判断表达式等。
我们以一个判断语句为例,看一下代码。
Sub MyCode()
Dim name As String
Dim age As Integer
name = "Zhang San"
age = 28
If age > 25 then
MsgBox name & " 岁数超过25了。"
End If
End Sub
这段代码中,If
语句判断 age
变量是否大于 25,如果是,则运行与 End If
之间的代码,否则跳过不运行。这其中的If ... End If
就是一个执行式语句。
这种执行式语句是 VBA 语法中的最重要的部分,在接下来的学习中,将详细介绍。
3.赋值语句
赋值语句,顾名思义给变量赋值。它是执行式语句的一种特殊形式。
赋值语句的核心是 =
,左侧是变量,右侧是赋的值。
我还是看上述代码,这次我们加上赋值语句。
Sub MyCode()
Dim name As String
Dim age As Integer
name = "Zhang San"
age = 28
End Sub
显然,name = "Zhang San"
和age = 28
是赋值语句。
另外值得注意的是,VBA 中的变量可以重复赋值,其值等于最后一次赋的值。这在实际的 VBA 开发中十分有用。
书写语句的 2 个技巧
在运算符一文中,简单说了 2 个运算符,一个是英文冒号(:),一个是下划线(_)。
运算符 | 说明 |
---|---|
: ( 英文冒号) | 将两行代码放置在一行 |
_ (下划线) | 将一行代码分解成两行 |
: ( 英文冒号)
通常,VBA 中直接将多个语句放置在一行,VBA 会报错。如果想要放置在一行,需要用 : ( 英文冒号)
连接多个语句。
Sub MyCode()
Dim name As String : Dim age As Integer
End Sub
_ (下划线)
相反,当一条语句过长时,可能需要分成多行书写。如果把一条语句直接回车分成多行,VBA 也会报错。这时需要把空格 + _
放置在换行处。
Sub MyCode()
Dim name As String
name = "Hello" & _
"World"
End Sub
总结
表达式是返回一个值的式子,语句是一个完整的指令。语句包括以下三类:
- 声明式语句
- 执行式语句
- 赋值语句
VBA 中利用表达式和语句,以多种形式组合使用,做到复杂的计算和操作。下一篇将介绍声明和赋值。
写的很好,感谢UP主分享。
赞
666
是我的文化程度不够吗,自学感觉好难。怎么都没有明白。
基础部分确实比较枯燥,跟实际结合没有那么紧密。无论明不明白,可以先从头到尾过一遍,先有个印象,后面解决实际问题的时候,再回过头阅读,多循环几次,就明白了
看起劲了,从未想过文字版能看这么久
加油加油
宝藏网站,感谢作者
通俗易懂,感谢小编老师!
感谢伟大的作者
佩服作者的专业和敬业精神,臣服!只有认真学习,得君宝藏方为大义,谢谢!
阿弥佗佛,施主平安健康——
cell的格式写法,后续不能加formulaR1C1=这种模式对么
应该是可以加的,因为cells返回的是range对象,formula2R1C1是range对象属性
Dim name As String : Dim age
As Integer 这句话里冒号左右可以有空格吧,换行不需要写下划线吗?
1、可以有空格
2、完整语句自然结束,不需要下划线换行
可以用逗号么, Dim name As String, Dim age as Integer
不可以的
应该可以这样吧
Dim name As String,age as Integer
可以的,一行一次性声明多个变量。一个弊端是容易混淆
催更
下划线介绍部分,应该是“多行”,写成“多好”了
感谢反馈,已修改
“Hello” & “World” ‘=> Hello World 应该是 ‘=> HelloWorld 吧
谢谢反馈,已更正
为什么表示结果 =>前面要有一个’ 啊,而且我这个 在Excel里打出来之后 提示编译错误 预期:=
求解
这里单引号’是VBA注释语句的标识符,具体可以看这篇文章了解,https://www.lanrenexcel.com/vba-comment/
Not (10 > 5) ‘=> False,本文中,很多处出现了=>,按照之前讲解的不应该是->吗?
这是我的问题,前后代码风格不一致
加油,写的很好。经典