打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel VBA:什么是过程?
userphoto

2020.04.08

关注
NO.161-什么是过程
作者:看见星光
 微博:EXCELers / 知识星球:Excel

HI,大家好,我是星光。上一篇咱们了解了学习VBA必要的基础知识:什么是VBA;什么是VBE;如何编写和运行VBA代码;如何保存包含宏的Excel文件——不知道你还记得多少?

如果你是新来的朋友,先微笑鼓掌欢迎,然后建议从上一章开始阅读喔:什么是VBA?如何编写和运行VBA代码?



什么是语法



在第一章的时候咱们讲过一句话,VBA是一门简单的不像编程语言的编程语言,但既然是编程语言,哪怕再简单,也必然有它自身的语法、规则和术语。你以前肯定接触过语法这个词吧?主谓宾还记得吗?——别紧张,所谓语法,只不过是指语句中字词的排列顺序和规则。相比于人类的语言,编程语言的语法要简单的多;而且棱角分明,不会出现模棱两可的情况。

我给你讲个坊间流传很广的段子。


这是一个段子

老婆给当程序员的老公打电话:亲爱的,下班顺路买十个包子回来,如果看到卖西瓜的,就买一个。

到了晚上,老公满脸微笑,双手捧着一个小不点的包子进了家门。老婆怒了:你怎么只买一个包子?老娘不是让你买十个?

老公内心甚是惶恐,但语调依然冷静,慢慢说道:你不是说如果看到卖西瓜的就买一个?我真的看到卖西瓜的了,你看,我还拍照留存了。


握手,都给我笑——两人之间产生的误解是因为语言思维习惯不一样;老婆是人类语言的思维,包含了认知、语境和语气等复杂的情况。老公是程序语言的思维,只有1和0,真和假,冰冰冷冷的逻辑。

买包子的个数=IF(看到卖西瓜的,1个,10个)

摊手耸肩,我看到卖西瓜的了,所以我买1个包子,有什么不对呢?

如果你认真学习VBA,在持续被八阿哥(bug大爷的尊称)折磨的死去活来之后,多少也会养成一些编程思维,然后……我这里有几个荣誉称号你要不要提前预选一下?杠精、辩手、沉默是金、自恋狂、物化者、逻辑达人、聪明的家伙、特立独行的猪……


什么是语句



……在编写VBA代码时,我们会用到语句,语句是代码中能够引发动作的最小单位。我举个例子,你今天心情不好,需要Excel弹窗发送一条彩虹屁。按照以下步骤,动动手,你就可以命令Excel完成你的愿望。

打开一个Excel工作簿,按<ALT F11>进入VBE窗口,在【菜单】中依次单击【插入】→【模块】,系统会自动生成一个模块和该模块对应的代码窗口。在【代码窗口】输入以下代码:

代码如看不全,可以左右拖动..▼
Sub 彩虹屁()    MsgBox '美好的事情你都用脸做到了,还有什么不满足的?' & vbCrLf & '我对你的爱,就像拖拉机上山轰轰烈烈,你不知道吗?!'End Sub

按<F5>键运行该代码。系统会自动弹出一个消息框,如下所示。
……

上述代码中的MsgBox就是一条语句,它的作用是在消息框中显示信息。作为语句,它有语法规则,如下:

MsgBox(Prompt[,Buttons][,Title][,Helpfile,Context])

第1个参数Prompt是必须的,是一个字符串,作为显示在消息框中的消息文本,比如本例中的彩虹X内容。其余参数都是可选的,咱们这里只是讲一下语法和语句的概念,可选参数的作用就以后再聊。


什么是Sub过程


如上所述,VBA是一门编程语言,拥有自身的语法规则;语句是VBA代码中能够引发动作的最小单位。而为了完成某个任务,我们需要将多条语句有序组合,这样就形成了VBA的过程(英文process的奇怪翻译名)——所以所谓过程,就是为了完成某一目标,将多条语句有序组合的代码结构。

按照功能和类型划分,VBA的过程分为三种;子过程、函数过程和属性过程。

属性过程以Property作为标志开头,极少用,谈而无用,咱们就不谈。

函数过程以Function作为标志开头,可以返回值,常用于开发自定义函数,用到的次数也不太多,而且咱们现在也用不着,就以后再说。

子过程,也就是Sub过程,以Sub作为标志开头。不论咱们上一节讲的录制宏,还是这节你让Excel释放的彩虹屁,都是Sub过程。事实上在VBA编程中,96%的情况都是使用的Sub过程;毫无疑问这也是咱们今后最常使用的;所以,就多说几句,但入门阶段也不需要说太多。

……咱们不谈Sub过程详细的语法、调用方法、访问限制、参数和参数的赋值方式等,等你对VBA有一定的熟悉后,会有一个专门单章讲这些。现在,只需要讲一些必须知道的知识点。

Sub过程由程序外壳和代码两部分构成,简化版的Sub过程语法如下。

Sub 过程名 [代码]End Sub

看起来是不是很简单?

程序外壳包括开头的Sub 过程名和结尾的End Sub,这都是必须的。张明敏唱过,无论何时无论何地心中一样……都不能省略。此外,程序名不能胡乱起,系统有一些要求,总结起来有以下几点。

1>首字母不能是数字,比如521亲爱的是不允许的。
2>不能包含标点符号和空格。
3>不能使用系统内置的保留字,比如Sub Sub。
4>同一个模块中,不能有同名。
5>字符串长度不能超过255。

……

代码部分由零到多行语句组成。是的,你没看错,代码可以0行,也就是代码完全省略。不过代码省略后,过程也就没啥用了。这就好比,你张了张嘴,却一句话都没说——玩深沉呐大哥?这年代不兴了呀!

当代码由多行语句构成时,程序总是按照从上到下的顺序逐句执行。

我举个例子,以下代码可以在当前工作表的A1:A5区域输入内容:我有一个梦想。

Sub 梦想家() Cells(1, 1) = '我' Cells(2, 1) = '有' Cells(3, 1) = '一' Cells(4, 1) = '梦' Cells(5, 1) = '想'End Sub

代码运行后,结果如下。


代码先在A1单元格输入一个'我',再在A2单元格输入'有',其余以此类推……

任何程序都有三要素,顺序、选择和循环;代码又是按照由上到下的顺序逐句执行的;因此我们在编写代码前,请务必先梳理清楚任务执行的先后顺序。所谓顺序,可以先简单的理解成先做什么,再做什么,后做什么。

聊完了Sub过程的概念和结构,下面咱们看段广告提提神,然后再聊一下编写代码有哪些需要注意的事项和技巧。


编写代码注意事项



小贴士:由于诸位大哥大姐弟弟妹妹现在也没啥编程经验,以下内容有一部分可能很难理解,那就不必理解,只是务必得知道有那么回事。这就好比学生哥被要求尊师重教爱国守法,他也不懂为什么,他也不会问,但他必须得知道,不然就成某地废青了不是?


1>名称问题

名称包含了过程名称和后面咱们会讲到的变量名称。名称要符合规则,上面咱们也讲了过程名称的相关规则;此外,名称起的尽量有意义些,这样可以保证代码的可读性,便于自己和他人理解代码。

划重点:如果你是我知识星球的学员,这一点请务必遵守,不然批改您老人家的VBA作业实在是一件非常容易掉头发的事——觉悟吧,少年,事到如今,只要一扯到头发,你就应该明白问题的严重程度了!!

那么什么叫有意义的名称?

拿过程名称来说,指的是用一到多个词简化说明代码的功能;最好在过程前面,或过程名称后面增加详细的注释(什么是注释?我待会就给你讲)



至于变量名称……这个规则稍微多些,就放到变量章节再说吧。


2>代码的对齐与缩进

VBA代码使用缩进的形式表示代码块之间的层次关系,同一层次的代码应该保持相同的左边距,不同层次的代码需要向右缩进指定距离,这个距离通常保持系统默认的4个空格的宽度就可以了。

依次单击【菜单】→【工具】→【选项】,打开选项对话框,切换到【编辑器】选项卡,选中【自动缩进】复选框,编辑代码时按一次Tab键,即可缩进指定的Tab宽度(默认为4个空格)。


你问我什么是层次?层次可以简单的理解为代码的上下级隶属关系。

我举一个例子(不要怀疑,我的梦想就是举例世界冠军)


在上图所示的代码中。Sub和End Sub属于第1层级,不必缩进;接下来声明变量语句和For循环语句隶属于Sub,属于不同层次,因此向右缩进一个Tab键。IF语句在For循环语句内部,隶属于For,因此需要再次向右缩进一个Tab键……

最后的MsgBox语句不在For循环语句内部,它和For是平级关系,只隶属于Sub语句,于是只需要按一次Tab键。

需要说明的是,从VBA语法来讲,缩进不是必须的,即便不缩进代码也可以正常运行,但这样的代码很难阅读和维护。不缩进的代码只好比下图所示神医的手迹——千里快哉风,他娘的这是什么鬼画符。



3>代码注释

为代码添加注释应该成为VBA初学者编写代码的好习惯。

这样做有两个好处,一个是方便自己和他人阅读代码,可以比较快速的明白代码的含义、编写思路和代码的功能。很多人写了一段代码,过几天再看,完全不知道自己当初写那代码是什么鬼;这多半是没有添加注释的缘故——不过相比于第二个好处,这个好处其实是次要的。

第二个好处是为代码添加准确而详细的注释能够帮助你梳理代码的逻辑关系,加深对相关代码功能的认知和记忆;这相当于你为自己的代码做了一次深刻的理解笔记;相信我,对于VBA初学者而言,没有什么比这更实惠的了。

……注释分为两种,一种是咱们前面讲过的为过程整体添加注释,说明过程的功能和编程思路,常写在过程的上部或过程名称的后面。一种是为个别语句添加注释,常写在相关语句的后面。如果语句偏长,也可以写在代码的上或下。


如何为代码添加注释?

在添加注释的位置,先输入一个半角撇号,再输入注释内容就可以了。注释内容不会被系统执行,同时会被默认标注为绿色字体,这样会方便用户把注释和代码区分开来。

除了手工输入半角撇号制作注释外,系统还在工具栏中为用户提供了【注释块】和【解除注释块】功能。

【注释块】可以将整段代码设置为注释,常用于代码调试,或将部分代码转为备用状态。

【解除注释块】顾名思义,可以将设置为注释的整段代码解除注释状态。



4>长代码的换行和短代码的并行

当一行代码过长时,比如上面那段你让Excel释放彩虹屁的代码,需要拖动滚动条才能够看完整,这很不方便代码的编辑和阅读。

此时我们就可以将代码强制换行。在需要换行的地方输入一个空格,再输入一个短下划线_,然后按回车键,将后面的代码移到下一行,最后再按一下Tab键,使换行的部分向右缩进,表示该行代码隶属于上一行。


有个姓罗的老师几百年前说过,天下大势合久必分,分久必合,既然有代码换行就有代码并行——也就是将多行代码合并为一行。

如果需要将多行语句写在同一行,不同语句中间用冒号分隔即可。如下图所示。


……

好像没啥要说的了……那就这样吧,反正下期咱就又见面了。关注我,下期更精彩喔~再见。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel VBA基础与应用Day6:VBA基本语句的构成与过程(下)
宏和VBA简易入门:05-流程控制入门-B
编写VBA代码有哪些注意事项?
VBA 程序结构入门
完全手册Excel VBA典型实例大全:通过368个例子掌握
excel vba停止执行代码(退出执行)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服