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

接下来是,两个声明变量的语句,nameage,并且语句中指定了他们的类型。

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 中利用表达式和语句,以多种形式组合使用,做到复杂的计算和操作。下一篇将介绍声明和赋值。

转载注明:文章转载自「懒人Excel - www.lanrenexcel.com
本文链接:VBA 表达式和语句
订阅评论
提醒
29 评论
最新
最旧 最多投票
内联反馈
查看所有评论
Eunni
11 月 前

写的很好,感谢UP主分享。

mf777
1 年 前

sss
1 年 前

666

我不在悲伤的坐在你身旁
1 年 前

是我的文化程度不够吗,自学感觉好难。怎么都没有明白。

zjysg
2 年 前

看起劲了,从未想过文字版能看这么久

起风了
2 年 前

宝藏网站,感谢作者

小忆v
2 年 前

通俗易懂,感谢小编老师!

孤独的coder
2 年 前

感谢伟大的作者

EXCELMAN
2 年 前

佩服作者的专业和敬业精神,臣服!只有认真学习,得君宝藏方为大义,谢谢!
阿弥佗佛,施主平安健康——

bug
2 年 前

cell的格式写法,后续不能加formulaR1C1=这种模式对么

川流不息
2 年 前

Dim name As String : Dim age
As Integer 这句话里冒号左右可以有空格吧,换行不需要写下划线吗?

xphaoxp
11 月 前
回复给  懒人Excel

可以用逗号么, Dim name As String, Dim age as Integer

亦秋*
30 天 前
回复给  懒人Excel

应该可以这样吧
Dim name As String,age as Integer

老LL
2 年 前

催更

十七*
2 年 前

下划线介绍部分,应该是“多行”,写成“多好”了

neueBiene
3 年 前

“Hello” & “World” ‘=> Hello World 应该是 ‘=> HelloWorld 吧

Big C
3 年 前

为什么表示结果 =>前面要有一个’ 啊,而且我这个 在Excel里打出来之后 提示编译错误 预期:=
求解

笑笑mm
3 年 前

Not (10 > 5) ‘=> False,本文中,很多处出现了=>,按照之前讲解的不应该是->吗?

曾经的程序员
3 年 前

加油,写的很好。经典

29
0
希望看到您的想法,请您发表评论x