百倍年薪!从零开始学VBA
张大妈是一个很好的平台,从各路大佬分享的经验里面,我们可以汲取到非常多的营养,让自己少走弯路,比如学会了用CTRL+C代替右键、复制之后,提高了工作效率,我们就可以当上总裁,年薪百万。
确实,无论什么工作,想要更上一层楼,保证质量的前提下提高工作效率是基础。对于部分工种来说,使用简单的代码去处理一些繁杂却又不得不做的事情,可以节省出大量的时间。
有的朋友可能听到写代码就会望而却步,实际上VBA的语法算是比较友好的,用的时候结合现有资料已经足够。并且,任何语言实际运用的时候,更重要的是使用环境而非语法本身。
从零开始学VBA?人人都行。
一、VBA的特性
VBA的语法与VB6最接近,虽然后面还有VB.net等后继,但是参考性还是VB6大些。
VB6并不是面向对象的语言,但是这个毫无关系。很多人觉得面向对象是流行,不是就落后了,其实这只是一个误区。
不同语言适用的场景不同,VB6本来就是为了快速开发而诞生,VBA则是更加便捷的脚本语言,没有任何面向对象的意义。
VB也好,LUA也好,有人捣鼓出类似于面向对象语言的使用方法,但那只是在声明和写法上,做到类似面向对象的语法而已,并不能改变本质,也没有实际意义。
以前在CSDN讨论过VB的面向对象写法,也在网游公司做过几年的LUA脚本监制,当时组内也盛行过LUA的“面向对象”写法。
后来我自己总结了一下,不管哪种脚本的所谓“面向对象”的写法,不能提高代码的可读性、维护性,不能提高代码的执行效率,不能减少代码量,也不能改变语言和代码的本质,说白了属于茴香的四种写法,自己用着顺手就行,别跟着网上某些人钻牛角尖,搞得不这么写就落后还去四处胡乱鄙视。
二、VBA的基础语法
VBA的声明:
dim i as integer
把i声明成一个数值
dim s as string
把s声明成一个字符串
虽然也支持dim a这样不声明类型的写法,但个人并不推荐。这样的写法,变量a将为不确定类型,首次对其赋值的时候,系统才会根据赋值的类型进行初始化,可靠性极差。
连接字符串:
s1 = s2 & s3
推荐使用shift + 7打出来的这个符号。
在VB里,加号也可以连接字符串,如果两个变量都是字符串,则进行拼接操作。但是这样会导致代码的可读性下降,不推荐。
&符号的另一个好处是,如果有一个变量为数值,则会强制转换成字符串再拼接,而加号不行。
无赖语法:
on error resume next
正常的使用方法是on error goto,也即类似于C语言的try catch,用于出现错误时,捕获、跳转,以便处理。
而VB的这个resume next的写法,会忽略所有错误(除非严重到程序崩溃),继续往下执行。一般来说,只适用于无关紧要的、编写者已知并能掌控的小错误,否则当程序得不到正确结果的时候,你会发现无从调试。
写程序难免要查东西,或者看别人的代码。如果你看到有人用这个语句,建议先不要学,否则既无法得到正确的结果,也无法通过任何错误提示进行调试。
给大家讲个真实的笑话:
我第一份工作,那时还是实习。
公司里有一个“前辈”,是比我早进去的所谓“程序员”。
有一天,他代码不会调来问我,我一看他代码,不用循环的,而是复制几百遍……
当时有点惊,而他的回答是,给了我一个白眼,说:你不懂!Treeview这个控件,不能用循环的!
我当时一瞬间还真被他唬住了。一看他弃用的代码,瞬间石化:
on error resume next
dim i as string
i = i + 1
给没有基础的朋友解释一下:他定义了一个字符串,拿去当成数值运算,然后屏蔽了所有错误信息,无从下手,就认为“Treeview这个控件不能用循环”了。
经历了这件事后,我信心大增,走上了程序员的不归路……
三、在Office里启用VBA
出于安全考虑,在Office里VBA默认是不启用的。
我们需要在设置,信任中心里,把文件所在位置添加进信任位置。
或者干脆一劳永逸,直接启用所有宏。
另外,文件必须另存为xlsm格式。
四、浏览官方参考文档
理论上,我们可以安装MSDN进行本地查询。
但是这玩艺儿,动辄好几G大小,安装也很麻烦。
微软提供了完整的在线文档,可以访问以下链接:
虽然也曾有过带中文的旧版,不过版本较旧而且中文也不完整,建议直接在线看比较方便。
如果被英文文档吓到了,不要紧,因为大部分时候,我们需要哪个功能,才会去搜索该功能的实现方法,所以实际运用的时候,善用在线搜索,会比部署完整的文档更为有效。
或者,你也可以搜索“office编程手册”这个关键字,可以搜到2003版的官方手册,虽然旧了点,大部分内容是通用的。出于各种原因,这里不方便放链接,反正满地都是了。
不愧是微软官方的文档,不仅详细,而且归类都非常的整理和统一。
五、善用搜索解决问题
写代码的时候,无论再大的功能,都是由一个个小功能组成的。所以我们不需要把所有对象、函数、方法等都背得滚瓜烂熟,要用到什么,就去找什么。
比如我现在要用代码切换工作表,如果你稍微有点基础,知道工作表的英文是Sheet,那么直接打开官方的参考文档,找到对象,S开头:
我们可以看到:
Sheets("sheet1").Activate
示例代码里就已经有我们要的答案了。
那,如果我们连最基础的英文对象名都不知道呢?
VBA这么多年,网上也已经有很多的积累和沉淀了,其实稍微一搜索就有。
比如,我们想要用代码选中某些单元格,那么,以“vba 选中 单元格”为关键字搜索的话,就会出来很多答案:
当然,网上的代码不一定完全是对的,也不一定完全符合需求,我们可以把它实际运行一下试试看。
我们把代码丢进去,执行一下,果然代码执行过后,D5单元格就被选中了。
搞定!
再比如,咱连VB的for循环语句都不会写,怎么办?
以“VB for 语法”为关键词:
可以找到太多太多的资料了。
不怕不知道,只怕不会找。
六、研究别人的代码
对于新手来说,别人已经编写、调试成熟的代码具有比较高的参考价值,可以下载别人的小程序来参考。
VBA甚至能读写文件、连接数据库进行操作,但是比较复杂,这里不做陈述。
网上随便以“VBA”“范例”“代码”等关键字搜索,可以搜到非常多的资料,由于这里不方便放链接,大家可以自行搜索。
如上图,是高手做的小学数学练习程序,界面整齐,代码完整,直接可用。
脚本语言如果不特意去加密的话,所有代码都是明文可见可复制,即改即生效的。
这种环境对于初学来说已经是友好得不能再友好了,写不写得出来看造化了。
七、结语
先声明一下,上一篇这个标题并不是我起的。 其实之前写的是针对有一定基础,但是却不知道具体如何去提高效率的朋友。至于标题为什么会变……还是别问了。
VBA这个东西,比拼音打字难,但是比什么C++还是易学得多。
这么多年实战、沉淀下来的经验,真是用都用不完,只要会查资料,肯实践,从零自学妥妥的。
当然,学习是要思考和实践的,而不是找一份资料,上面有你想要的一切东西,只要复制过来就包治百病。
世界上没有这种资料,更不会有这种学习方法。
资料领进门,修行靠个人。人在工作中,也是不断学习的过程,不同行业和工种需求不一样,如果你有这方面的需求,不妨试试看,学VBA真的不难。至少,比考个什么证容易多了,这里又不用考试,又不用背东西,现成的代码一抓一大把,真不行还可以去论坛问。
而网上虽然有很多编程1000例,或者长篇大论的从入门到精通,甚至还有收钱的培训课程,但是我告诉你,这些都不需要。
你在工作中,有什么需求,想一想是否可以用代码自动化,然后把需求拆分成小点。
比如“筛选范围内特定数值并高亮”这个需求,就可以拆分成“指定/选中单元格范围”,“判断选中单元格数值”,“设置选中单元格颜色”,搜一搜实践一下就行了。VBA这东西不考试,看书背题都没大用,更不需要花钱培训。
至于实际的功效,还得看具体情况。
像上一篇评论的这位仁兄,遇到了不错的领导,就得到了不少晋升的机会。当然,像我这样干得越多、越好,却只有活更多,工资和职位不升的,那也只能说运气不好,那你就把节省起来的时间,用在别的方面的学习上。学无止境真的没说错。
升职加薪了之后记得来打个赏哦~
小编注:本文作者@波导终结者 是什么值得买生活家,他的个人自媒体信息为:
新浪微博:@波导终结者(https://weibo.com/u/1016801521)
扶持推广个人品牌是生活家新增福利,更多详细内容请看生活家公告(https://news.smzdm.com/p/26967/)。欢迎大家踊跃申请生活家,生活家中表现优异的用户还将有机会成为『首席生活家』,欢迎有着特别生活经验的值友们踊跃加入生活家大家庭!
海内外
excel重度用户 水平还停留在录制宏和vlookup 透视啥的 有时候累成狗 看看人家写好的vba一键输出的表 一劳永逸 心羡不已 但是一直也没行动
看大家讨论的热烈 我觉得数据处理和呈现趋势 状态
最后的路应该是一键分析 提需求和明确最终效果 至于怎么实现就交给AI
校验提示文案
笨笨尼
校验提示文案
cheney_js_cz
校验提示文案
fCkeCkdy
校验提示文案
vjsky
校验提示文案
长记性禁止口嗨
校验提示文案
vvincent
如果你说复杂的数据处理,有这个时间可以学python or R。
对了因为宏有安全问题,很多公司都是禁止用宏的。
校验提示文案
蹦蹬儿
校验提示文案
蓝淼焱
校验提示文案
Tony9999
校验提示文案
fCkeCkdy
校验提示文案
cheney_js_cz
校验提示文案
海内外
excel重度用户 水平还停留在录制宏和vlookup 透视啥的 有时候累成狗 看看人家写好的vba一键输出的表 一劳永逸 心羡不已 但是一直也没行动
看大家讨论的热烈 我觉得数据处理和呈现趋势 状态
最后的路应该是一键分析 提需求和明确最终效果 至于怎么实现就交给AI
校验提示文案
Tony9999
校验提示文案
蓝淼焱
校验提示文案
蹦蹬儿
校验提示文案
笨笨尼
校验提示文案
vvincent
如果你说复杂的数据处理,有这个时间可以学python or R。
对了因为宏有安全问题,很多公司都是禁止用宏的。
校验提示文案
长记性禁止口嗨
校验提示文案
vjsky
校验提示文案