前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA中重要的强制申明,谁看谁明白

VBA中重要的强制申明,谁看谁明白

原创
作者头像
猴子数据分析
修改2020-09-28 09:49:07
1.5K0
修改2020-09-28 09:49:07
举报
文章被收录于专栏:猴子数据分析猴子数据分析

Hello,各位同学们大家好。

前几次的VBA分享,在留言区收到了很多同学的实际需求。大家的支持,是我们持续分享的动力。

这边会逐渐将大家的需求融进案例中,也希望大家继续在留言区和我们分享你们的VBA使用心得和工作需求。

还是老规矩,看看我们走到哪里了。

1.认识VBA:什么是VBA?

2.这些掌握了,你才敢说自己懂VBA

3.VBA变量5年踩坑吐血精华总结

好了,闲话不多说,直接上干货~

1.强制申明

行话说:强制申明用得好,VBA臭虫(bug)减不少

先看下W3Cschool上的解释:

VBA使用Option Explicit语句自动提醒你正式地声明你的变量,这个语句必须放在每个模块的最上面。如果你试图运行一个含有未定义的变量的过程时,Option Explicit语句会让VB产生一个错误信息。

这解释也太不友好了,用能听懂的话,怎么说?

用大白话说,强制申明就是:在一段程序中,我们明确告诉VBA将要使用哪些变量,如果遇到其他没有说的变量,VBA直接报错提醒。

上面的大白话仍然不是很好理解,我们看个例子。

案例:在「单元格B2」输入不同的行号,点击「显示答案」按钮,计算「F列」和「H列」的乘积,并将每个乘积结果加上公共值「单元格B4」的50,将最终结果显示在相应的单元格

自信的我们写完代码,点击「显示答案」按钮,以为答案是这样

但其实,结果是这样

看到结果的你,肯定心里一万匹马飘过,“VBA,你这是在侮辱我的智商吗?”

但是,作为行业老湿机的我们,深知——好的程序,都是调试出来的。

我们默默的打开VBA代码,猛地一看,这程序没问题,又是一万匹马飘过

那么,我们只能使出自己的杀手锏——一句句检查代码

(1)点击「显示答案」按钮,VBA自动找到关联的程序「四则运算」按钮

(2)读取第1句「x = Cells(2, 2)」

VBA说:

先看右边,「Cells(2, 2)」我认识,表示「单元格B2」,它的值是4。

再看中间,「=」我认识,表示赋值的意思。

再看左边,「x」我不认识,那它就是变量,我要新建一个名叫x的变量。

最终结果就是——新建了一个变量x,并且现在它的值是4。

[备注]

1.VBA遇到不认识的内容,就会新建一个变量;同时,如果该变量没有赋值,就默认为0;

2.VBA执行语句次序为:从上到下、从右向左;

(3)读取第2句「h = Cells(4, 2)」

VBA说:

先看右边,「Cells(4, 2)」我认识,表示「单元格B4」,它的值是50。

再看中间,「=」我认识,表示赋值的意思。

再看左边,「h」我不认识,那它就是变量,我要新建一个名叫h的变量。

最终结果就是——新建了一个变量h,并且现在它的值是50。

(3)读取第3句「Cells(x, 10) = Cells(x, 6) * Cells(x, 8) + h1」

VBA说:

先看右边,「Cells(x, 6)」我认识,x=4,所以它表示「单元格F4」,它的值是6;「*」我也认识,在VBA中表示「相乘」;「Cells(x,8)」表示「单元格H4」,它的值是5;「+」我认识,表示「相加」;「h1」我不认识,那它就是变量,我要新建一个名叫h1的变量,它没有被赋值,那么它的值就是0。

再看中间,「=」我认识,表示赋值的意思。

再看左边,「Cells(x, 10)」我认识,x=4,所以它表示「单元格J4」,它的值根据左边计算得出。

最终结果就是——「单元格J4」=「单元格F4」*「单元格H4」+ 0。

看到这里,大家可能说,不是说所有的乘积「加上50」吗?怎么这里都变为「加上0」了?

心细的同学已经发现了问题,我们误把变量「h」写为了「h1」,虽说二者仅多了个「1」,但是对于VBA这个严谨的家伙来说,就是2个不同的变量,而由于「h1」是一个没有被赋值的变量。

所以,其默认为0,也就最终酿成了一开始的大型事故翻车“命案”之VBA侮辱人类智商事件。

有同学可能就问了:猴哥,说了这么多,这和我们今天的「强制申明」,有什么关系?

又一个《肖申克救赎》的天台式微笑,悄悄上扬在我的嘴角

来,看代码,我们使用了「强制申明」,然后运行一下程序

有没有很神奇,由于加入了「强制申明」,程序直接报错,而且直接将出错的「h1」批色显示。

看到这里,同学们肯定赞叹:厉害了!「强制申明」

为了进一步理解「强制申明」,我们将添加前后的代码做个对比

在「添加-强制申明」的代码框里,我们发现多了2句话「Option Explicit」和「Dim x, h」。那么,它们是什么意思呢?

「Option Explicit」表示——告诉VBA接下来的程序我要使用强制申明。

「Dim x, h」表示——告诉VBA接下来的程序我只使用变量x和变量h,遇到没见过的,你就警告窗报错提醒我,并用蓝色批注显示它的位置,方便我修改。

因此,到这里,我们就明白了——所谓的「强制申明」就是提前告诉VBA自己接下来要使用哪些变量,如果没有告诉你,那该变量就不被支持,就要报错提醒。

这好比法律,规定了哪些事情可以做?哪些事情不能做?如果你做了违法的事情,你就要接受法律的制裁。

所以,结合这个特点,在VBA里使用「强制申明」,主要由以下3个主要优点(小本本记下来,我们下期考):

(1)正确使用「强制申明」能够帮助我们快速定位错误代码,发现错误;

(2)正确使用「强制申明」能够提升程序的运行效率;

(3)正确使用「强制申明」能够帮助我们养成良好的代码编写习惯,减少很多琐碎的、不必要的麻烦;同时,方便被人理解和查阅代码。

[备注]

1.「Option Explicit」一定要写在所有程序的最开头位置;

2.「Dim」是VBA系统的保留字,用来定义VBA中的变量;

3. 99.99%的大牛都使用「强制申明」,有点业界潜规则的赶脚。

2.常量使用

有些时候,我们写VBA代码难免会遇到一些固定的值,比如:前文例子的公共值50。

对于这种固定值,我们一般情况下都是提前定义一个变量,然后给其赋值,比如:k = 50,在后面我们多次引用这个变量k就行了。

但是,我们在日常工作中,经常出现修改这些固定变量的值,可是代码中多处引用的这个固定值,我要一个个去修改吗?

为了应对这个“多处修改难题”,有些时候我们就会做一些懒癌晚期的蜜汁操作操作:在需要修改的地方直接重新定义变量k,然后给它赋新值,而不是找到原来那个变量,去修改它的值。

然后,然后就酿成了一起起杯具的“惨案”。别问我为什么,我经常这样干,而且发生了很多“命案”。

原因是由于同名变量在VBA不同的地方被赋新值,从赋新值开始的地方,其后所有的代码都会引用这个新值。

这也就是为什么有些同学,代码经常跑出一些神奇的值,而像这种因为给同一个变量赋不同的值,这种小错误是很难检查出来。

同学们,肯定问:这种问题有没有解决方案?

还真有,猴哥今天给你们分享一个非常实用的技巧,让这种问题直接呆在它娘肚子里,永不出来,生活已经这么多欢乐了,请不要再给我增添更多寻找bug代码的快乐了。(手动狗头.jpg)

只需一句代码,就能让你解决上述问题

是的,我们在原来的代码中新增「Const k = 50」这句代码,就是告诉VBA要记住以下2点:

(1)该段代码我定义了1个常量k;

(2)常量k在定义后被赋值,下文如果重新赋值,请警告窗+批蓝色告诉我

[备注]

1.VBA中定义一个「常量」需要使用关键字「Const」;

2.「常量」一般放在开头位置,方便我们随时修改。

3.今日总结

好了,说一下今日的知识点

(1)学会使用「强制申明」,养成良好的代码编写习惯,从根源上减少bug

「强制申明」就是利用「Dim xxx」语句,提前定义VBA变量,目的是为了告诉VBA你接下来要使用哪些变量,未定义变量都是非法变量,需要警告窗报错+批蓝色告诉你

2)学会使用「常量 Const」,能规避很多不必要的错误和麻烦

「常量」就是利用「Const xxx = xxx」语句,提前定义固定不变或多次引用的常量,目的是为了告诉VBA你定义了哪些常量,这些常量的值是一开始就固定好的,如果中间发生人为修改或重新赋值,需要警告窗报错+批蓝色告诉你

好了,同学们今天的分享就结束了

关于「强制申明」和「常量 Const」你学会了吗?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档