sync.waitgroup可以声明多个变量吗?_VBA编程必知:什么是变量?

a52a250bebbd7784ab7f502a8ed553bc.png 每天一篇Excel技术图文 微信公众号:Excel星球 NO.149-什么是变量? 作者:看见星光  微博:EXCELers / 知识星球:Excel

哈罗,大家好,我是星光,今天给大家聊一下编程中一个非常重要的概念——变量。变量这个词有些朋友可能感到陌生,但其实就概念来说,无论在生活中还是在学习上,变量都是无处不在的。
你的身高是变量,你小时候身高=1米2,后来你长大了,身高=1米8。你考试的成绩是变量,你小时候学渣,成绩=45,你长大了学霸,成绩=150。你玩王者荣耀时角色的生命值也是变量,满血时生命=3200,残血时生命=300;你一顿操作猛如虎,一看战绩……9-0,战绩=9-0还是变量——所以,什么是变量?变量在编程中的意义和作用是什么?

什么是变量


所谓变量,就是储存数据的容器,就好比贴着标签装着数据的盒子。标签是变量的名称,不占据盒子内的空间,比如身高 ;盒子里装着的数据是可以改变的,比如1米2,后来变成了1米8等。
……我们可以把计算机看成是一个人,它的脑袋十分巨大,里面整齐的摆放着成千上万个小盒子,也就是脑细胞;每一个小盒子都是一个空间,有 多种类型 ,可以装各种的数据;但一个盒子只能放一个数据。我们只有将数据装到计算机的脑袋里,才能让它帮助我们分析和处理数据——那我们如何将数据装到计算机的脑袋里去?
打个响指,很简单,代码如下。
身高=180

代码中的"="是赋值符号(不是判断符等于号,两者的区别我们以后会聊)。这句代码的意思是我们在计算机的大脑袋里申请了一个小盒子,贴上标签: 身高 ,盒子里装上数据: 180 。这样一来,计算机就知道名字为 身高 的小盒子里装着数据 180 了。
后来一段时间你吃了好多鱼……好吧,还吃了不少卫龙辣条,于是身高莫名其妙长高了,我们得把这事告诉计算机,把身高数据更新一下。
身高=190

于是计算机按照标签 "身高" ,取出小盒子。由于一个盒子只能放一个数据,要装新的数据,计算机就会用新数据覆盖掉旧数据,所以最后名为 "身高" 的小盒子里装着数据是190。
试试按分步运行以下Sub过程,在本地窗口观察 "身高" 的变化,以及最后返回的值是多少?
Sub 变量()    Dim 身高 As Byte    身高 = 120    身高 = 130    身高 = 140    身高 = 140    身高 = 180    MsgBox 身高End Sub

如你所想,这里名为"身高"的小盒子即是变量,很显然,它有两部分构成:名称和值, 值可以变,但名称不变 ,以不变应万变,即为变量 。
就这么回事。 什么是声明变量 我们上一节讲过,数据是有类型的,在VBA中数据的类型可以划分为……上一章的那么多种(摊手,没办法,我就是这么懒,别指望我重说一遍)。而变量是装数据的容器,也是有类型的。简而言之,数据有多少类型,变量就有多少类型。 声明变量,就是给数据指定不同类型的小盒子,并贴上标签名字。
在VBA中如何声明变量呢?最常见的是使用Dim语句。语法格式如下:
Dim 变量名 As 变量类型

我举个一个小栗子。
Sub 声明变量()    Dim 身高 As Byte    身高 = 180    身高 = 300End Sub
▎代码解析:
第2行代码, Dim 身高 As Byte 是声明变量,意思是向计算机申请一个专门用来装Byte数据类型的小盒子,1个字节大小,范围是0~255之间的整数,并贴上标签"身高"。
第3行代码,身高=180,想必你已经知道什么意思了,给变量身高赋值,也就是往名为"身高"的小盒子里装入一个数据180。
第4行代码,身高=300,想必你还是知道——但其实你不知道,微微笑。咱们在第2行代码声明了变量 身高 的类型是Byte,所以只能用来装0~255之间的整数,这里却要求计算机装300。 盒子太小,它装不下,于是会弹出一个提示溢出的警告框,同时中断程序运行:

5678f803e2575230400af3e965a1d0b3.png


……
有个叫 看见我蓝了吗? 的网友发来提问:星光大熊迪,请问声明变量是必需的吗?
答:……这个问题,有两种情况。一种是声明了变量,但没有指定类型,示例代码如下。
Sub 变体变量()    Dim 身高    身高 = 120    身高 = "我很高"    MsgBox 身高End Sub

第2行代码中声明了变量"身高",但没有指定类型,则系统默认为变体型。
什么是变体?咱们上节课讲过了。变体型变量就像一个万能的小盒子,啥都能往里装,它会自动调整数据类型。
第3行代码 身高=120 ,我们往名为"身高"的小盒子里装了个数值120;第4行代码 身高="我很高" ,我们往小盒子里又装了个字符串"我很高",同时覆盖掉了旧数据120,此时小盒子装的就是字符串"我很高"。
还有一种情况,变量声明都不声明,带头大哥附体挽起袖子直接干,示例代码如下:
Sub 变量不声明就用()    身高 = 120    身高 = "我真的很高"    MsgBox 身高End Sub

这段代码并没有声明变量身高,第2行代码直接就赋值了。系统同样默认身高为变量,类型为变体,作用类同上一段代码。
这时可能有朋友就想了,既然变体变量什么都能装,还会自动调整数据类型,连声明都可以省了(能偷懒?激动的搓搓手),那干嘛还声明变量呢?直接举国体制一刀切,全部用变体不就行了?
长者曰:小同志,你这个想法很大胆啊。变体变量确实省事又好用,但是,一来它占据的内存空间可能比较大——好吧,内存扩展的今天,咱是有别墅的人了,这点大部分情况下都不重要;但麻烦的是变体不够聪明,怎么不够聪明法?——咱们后面有个单章专门再聊。
……
有个叫 姐要三宫六院七十二男妃 的网友发来提问:星光哥哥,你举的例子都是声明一个变量,如果需要声明多个变量,代码应该怎么写?
答:可以一行代码声明一个变量,多个变量用多行声明。示例如下。
Sub 多行声明多个变量()    Dim s As String '声明变量s为字符串    Dim i As Long '声明变量i为long    Dim j As Long '声明变量j为longEnd Sub

另外,VBA是支持一行代码声明多个变量的,不过每个变量都需要指定数据类型, 如果没有指定数据类型,则默认为变体Variant 。
举两个例子,下面是一行代码声明了多个变量,每个变量都指定了类型,只在开头使用了一个DIM。代码如看不全,可以左右拖动..▼
Sub 一行代码声明多个变量()    Dim s As String, i As Long, j As LongEnd Sub

下面也是一行代码声明了多个变量,但只在最后一个变量指定了类型为字符串。在有的编程语言中,这意味着a/b/c三个变量都是字符串类型,但在VBA中不是,只有c是字符串类型,a/b没有指定类型,则默认为变体。
Sub 一行代码声明多个变量()    Dim a, b, c As StringEnd Sub

……
还有个叫 和尚洗头用飘柔 的网友发来提问:在泡论坛时,经常见到有人声明变量i%,j&,s$,d#,请问%&$#是什么鬼? 670dff0ba0500cb565af8c2a79bc4181.png
答:和尚莫慌,我有李云龙画像在此。它们不是鬼哩,是类型声明符,或者说变量类型缩写。不过不是所有的数据类型都支持声明符,常用的只有4个。其中%是整数型Integer(其实已经不常用了,但看古董级代码时会见到),&是长整形Long(最常用的一个),$是字符串string($看起来就像string的首字母s),#是双精度浮点Double(#可以理解为双精度的双)。
……聊完了如何声明对象,看个广告放松一下,接下去咱们再说下如何为变量赋值。
如何为变量赋值
所谓为变量赋值,是指把数据储存到变量中。常见的有两种情况;一种是非对象类型的变量赋值,比如数值、字符串、日期等;一种是为对象(Object)类型的变量赋值,比如工作表等。
先说一下非对象类型的变量赋值——其实你已经会了,也就是类似咱们前面小节所使用的语句 身高=120 。它的完整语法如下:
[Let] 变量名=值

其中关键字Let是可以省略的,正常情况下,也都是省略的。 所不同的是为对象类型的数据赋值 ,比如工作簿、工作表、单元格等对象。语法如下:
Set 变量名=值

语法中的关键字Set是不能省略的,不然你会找不到对象——看我眼神,骗你娶你,不论男女。
举个例子,将当前活动工作表赋值给变量sht,代码如下。
Sub 对象变量赋值()    Dim sht As Worksheet '定义变量类型为工作表。    Set sht = ActiveSheet '将当前工作表赋值给变量sht    MsgBox sht.Name '消息框显示当前工作表的名称End Sub

第3行代码是将当前工作表赋值给变量sht,这时关键字Set是不能省略的,如果省略Set,系统会发出如下所示的警告对话框,同时中断程序运行。 b11796588d30bec7aebcb87617b80015.png 贴士: ▎为对象类型的变量赋值时遗漏Set,是新人最常见的错误;如果你以后也经常犯这样的错误,麻烦告诉我一声你到底有没有对象,是不是从来没被掐破肉过?多么痛的领悟!!!……我朋友。
……
打个响指,再给大家看另一个很典型的变量赋值的小栗子。
Sub 累加变量()    Dim k As Long    k = 1    k = k + 1    MsgBox "变量k的值是:" & kEnd Sub

▎代码解析:
第2行代码是声明变量,其名为k,其类为long,k之大,你知我知庄子不知。

第3行代码为变量k赋值,其值为1。

第4行代码是k=k+1,想一想,这句代码是怎么运行的?

第5行代码使用消息框显示结果为2,猜一猜,为什么是2?

eb29fbab625c70f286dc0a00654c1de9.png

代码之所以返回变量k的值为2,是因为语句k=k+1的作用是将k在原值(本例为1)的基础上增加了1。

那么计算机是怎么运行k=k+1的?

这句代码包含了两个操作符,一个是"+",另一个是赋值号"="。"+"的运算优先级要高于"=",因此计算机先执行k+1,结果为2;然后再执行赋值,将2赋值给变量k。

这就是一个典型的变量=表达式的赋值语句。

那么,再思考一下,下面的语句会返回什么呢?为什么?

Sub 测试()    Dim k As Long    k = 1    MsgBox k + 1 = kEnd Sub

……

白鹤亮翅,打完收工

更多VBA编程教程▼
菜单->教程->零基础学VBA

老铁,江湖路远关注不迷路,咱们下期再贱。

▎全方位系统学习Excel
推荐加入我的
付费 Excel社群 ▎   点击图片可获取相关推文..▼7d99df3124d8e24ca9ec799fe83b9938.png de9c6f8acbec147891be6535186f3728.png 6a741aadea97663d875b00dbfe153224.png

1f07fad774d87d1c9e07859bb4f3c255.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值