vba set语句_零基础学VBA编程06:什么是变量?
哈罗,大家好,我是星光,今天给大家聊一下编程中一个非常重要的概念——变量。变量这个词有些朋友可能感到陌生,但其实就概念来说,无论在生活中还是在学习上,变量都是无处不在的。
你的身高是变量,你小时候身高=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。盒子太小,它装不下,于是会弹出一个提示溢出的警告框,同时中断程序运行:
……
有个叫看见我蓝了吗?的网友发来提问:星光大熊迪,请问声明变量是必需的吗?
答:……这个问题,有两种情况。一种是声明了变量,但没有指定类型,示例代码如下。
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#,请问%&$#是什么鬼?
答:和尚莫慌,我有李云龙画像在此。它们不是鬼哩,是类型声明符,或者说变量类型缩写。不过不是所有的数据类型都支持声明符,常用的只有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,系统会发出如下所示的警告对话框,同时中断程序运行。小贴士:▎为对象类型的变量赋值时遗漏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?
代码之所以返回变量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
那谁,您先想着,我这有点事,就先走了。噢,对了,麻烦记得关注我一下,关注不迷路,见面不尴尬,你说是不是这理儿?握手,咱们下期再贱。
▎系统学习Excel
推荐加入我的Excel社群 ▎▼扩展阅读▼
vba set语句_零基础学VBA编程06:什么是变量?相关推荐
- keil debug如何在watch直接修改变量值_零基础学VBA:什么是VBA?如何编写和运行VBA代码?...
HI,大家好,我是星光,今天咱们来继续学习VBA.在上一章咱们讲了为什么要学习VBA~VBA还值不值得学~学了还有没有用~零基础学VBA编程01:VBA还能不能学?学了还有没有用? 这一章咱们再来简单 ...
- python语言程序设计难不难_零基础学Python编程开发难度大吗?从哪学起?
转行零基础学Python编程开发难度大吗?从哪学起? 近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大? 今天,小编就来为大家详细解读一下这个问题. ...
- 我的世界python入门教程_零基础学Minecraft编程(图文版)中文pdf_Python教程
资源名称:零基础学Minecraft编程(图文版) 中文pdf 概述 1 Minecraft 是什么 1 虚拟世界 2 Minecraft 是如何诞生的 2 Minecraft 编程是什么 2 这本书 ...
- response_json是什么类型数据_零基础学VBA编程第5课:什么是数据类型?
每天一篇Excel技术图文微信公众号:Excel星球NO.79-什么是数据类型?作者:看见星光微博:EXCELers / 知识星球:Excel 嗨,大家好,我是星光,今天咱们来继续学习VBA编程. 在 ...
- response_json是什么类型数据_零基础学VBA编程05:什么是数据类型?
每天一篇Excel技术图文微信公众号:Excel星球NO.79-什么是数据类型?作者:看见星光微博:EXCELers / 知识星球:Excel 嗨,大家好,我是星光,今天咱们来继续学习VBA编程. 在 ...
- python 少儿趣味编程下载_零基础学Python编程(少儿趣味版)
本书是一本少儿编程入门书,适合零基础的读者.本书以"派森号"飞船和西西船长等人的童话故事为载体,从头开始介绍了Python语言的基础语法.全书共有6个章节.每章都有约十个独立的内容 ...
- 视频教程-零基础学C#编程—C#从小白到大咖-C#
零基础学C#编程-C#从小白到大咖 专注编程领域,拥有多年开发经验 王小科 ¥99.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠,最少立减5 ...
- 视频教程-零基础学Java编程—Java从小白到大咖-Java
零基础学Java编程-Java从小白到大咖 专注编程领域,拥有多年开发经验 王小科 ¥168.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠, ...
- 【组队学习】【34期】零基础学python编程思维
零基础学python编程思维 航路开辟者:邓林权 领航员:沈一 航海士:覃嘉俊.马子阳.左凯文 基本信息 开源内容:https://linklearner.com/datawhale-homepage ...
- 0基础学python看什么书-零基础学python编程需要看什么书?
原标题:零基础学python编程需要看什么书? 随着互联网迅速发展,python也呈现出水涨船高的态势.近年来,python在编程语言中一直名列前茅.编程初学者纷纷选择Python作为第一语言.Pyt ...
最新文章
- easyui-combobox的取值问题
- vue 添加全局组件_自定义vue2.0全局组件(下篇)
- Java高级语法笔记-向上层抛出异常
- unix c线程同步的三种方法:互斥量、读写锁以及条件变-xhb8413-ChinaUnix博客
- 让你更中立!腾讯微信进行灰度测试 “好看”变为“在看”
- ORACLE中Like与Instr模糊查询性能大比拼
- Ninject学习(一) - Dependency Injection By Hand
- 面试:Synchronized知识点
- alidoing --使用JS实现多语言框架、喜欢的请进、、瓦特平台!
- 蚂蚁庄园 php源码,求一个基于Auto.js的蚂蚁庄园脚本
- linux u盘 引导修复工具下载,全能u盘恢复工具
- 【分子动力学模拟】centos7使用gmx_MMPBSA时使用gmx_MMPBSA_ana时无法调用pyqt5
- Mysql 分组查询取max 那条记录其他字段
- 图像和base64的转换 uniapp开发
- java8高级应用与开发课件和贯穿案例(全)分享
- Matlab--蒙特卡洛方法求pi值
- java中一个有意思的字符串intern问题
- 宽度优先搜索python_宽的解释|宽的意思|汉典“宽”字的基本解释
- 分区放映,实现互联网电影院新增量
- 【架构】电商微服务架构图 -来源网络(非原创)