1.
这两天后端收到的问题相比照较多的是……
SQL=SQL&"WHERE……" 为什么SQL能等于SQL?
和这个问题类似、更常见的语句是:
K=K+1
为什么K能等于K+1?
举个实例,比方以下VBA语句,计算A1:A10单元格范围的值等于“看见星光”的个数。
Sub MyCount()
Dim Rng As Range, K&
For Each Rng In [a1:a10]
If Rng.Value = "看见" Then K = K + 1
Next
MsgBox "禀告陛下,一共抓到:" & K & "个看见。"
End Sub
提问的朋友可可以不了解,为什么K=K+1的结果,不是逻辑值FALSE或者者其余,而是一个不断累加的值?这显著违反了咱们小学时就掌握了的数学常理嘛。
论证给您看……
假设K=1
那么K=K+1等于1=1+1
1=1+1计算结果一定是FALSE
因而K=K+1结果也应为FALSE……
但实际上K=K+1的结果并不是FALSE,而是在K原值的基础上,不断累加1的数值。
所以K=K+1究竟是怎样回事儿?
……
我们今天就来详细说下这事,或者者说VBA编程中的变量以及变量的赋值问题。
2.
首先,明确说明一点,K=K+1并不等同于1=1+1。
这是由于,K和1并不相等,他俩不是一类人;K是变量,1是常量。
什么是变量?什么是常量?
简而言之,变量是在代码运行过程中可可以改变值的量,也就是会变的量,而常量则不会发生改变。
K可可以是1,可可以是2,它会发生改变;但1,永远都是1,不会成为3,它不忘初心,永恒不变……。
……
重点说下变量。
变量拥有作使用域,需要公告和赋值。
作使用域我们先不谈,今天的问题使用不上这部分知识。
所谓公告变量,也就是公告变量的类型,比方dim k as long,则是公告k是长整型的数值,假如变量未公告,则默认公告为变体(Variant)型。
除了公告,变量需要赋值,只公告未赋值的变量通常没有意义,好比理藩院的声遣。
变量的赋值有固定的格式。
……
假如是对非对象(Object)型变量赋值,也就是数据型变量,语句为:
Let 变量名称=数据
用等号的方式,将等号右边的数据或者表达式的计算结果,储存到左边的变量名。
其中Let能省略,因而通常写成变量名称=数据,比方:
K=1
……
假如是对象型变量呢?语句为:
Set 变量名称=对象
比方:Set Rng=[A1:A10]
将单元格区域A1:A10储存到变量Rng中
其中关键字Set不能省略(PS:这是新手常犯错的小地方)。
……
……
3.
因而K=K+1是格虾米意思呢?
将等号右边的数据赋值给等号左边的变量名,也就是先计算等号右边的表达式,而后将表达式的计算结果赋值给等号左边的变量。
因而,K作为长整型数据,未赋值时默认为0,则……
K=K+1等于K=0+1
则K=1
……
而当K=1时……
K=K+1等于K=1+1
则K=2
……
当K=2时……
……
以此类推
……
4.
又及……
有朋友问:
为什么K=K+1不可以写成K+1=K?
凡事总要问个为什么,毕竟咱不是随意的人呐。
由于……
K=K+1是在给变量赋值,它是一个赋值语句。
K+1=K则是一个判断表达式,它在判断K+1和K能否相等,毕竟等号左边的K+1,包含变量,但整体已不是变量。
同理,1=1+1,因为1是常量,不是变量,因而它也是一个判断表达式,它在判断1和1+1能否相等。
……
再又及……
有朋友问:
为什么K=K+1,先计算等号右边的表达式K+1,而不是先计算K=K?
凡事总要问个为什么,毕竟咱真不是随意的人呐。
容老夫抹下眼泪先……
前面讲过,变量赋值的过程,是将等号右边的数据、对象或者表达式的计算结果,赋值给等号左边的变量名;因而自然要先算等号右边的表达式K+1啊。
即使是从数学的角度讲,+-*/&=这些运算符里,等号的优先权都是最末的,因而也要先算加法,对8?……
……
……
握爪,致安,记得关注俺们,下次再见。