VBA太方便了!学会了之后,工作效率快好几倍_子程序

一年前我毕业工作,以为Excel只是复制粘贴,调整格式。

机缘巧合工作恰好是要用到VBA,仿照同事的代码只会写最基本的Function语句:IF...Else...

四个月前注册账号,那会几乎什么都不懂。虽然写了几个月的Function,但是Sub是毛都不知道,还有就是我也算是0基础。

四个月后(中间两个月去炒股了,想想都后悔。。。),学会的也只是用数组,字典的部分用法。还有部分杂七杂八的东西,有些囫囵吞枣了。

好歹自己整理了一个大大的文件夹,各种代码都有。脑子里有了一些底子了,算是迈出了第一步。


VBA太方便了!学会了之后,工作效率快好几倍_数组_02

VBA的很多部分,特别是数组和字典,还是很容易接受的。VBA数组,我是和函数数组相互印证学习的,感觉比函数数组简单。字典,对我来说,就是高级版的VLOOKUP,所以学习起来没有太多困难。而学会了字典,等于完全掌握了一个对象的学习过程,再学其它的,变得容易很多。。所以可能学习VBA就是要有一个敲门砖,这个砖找对了,门一下子敲开了,路就好走很多。希望你能找到自己的砖。

只会不是很难的函数。其他的都不懂。听说VBA是学不完的,所以想学到一般的程度。以下几点送给你初学的你

1:调试

经常看到新手学习了很长时间的VBA之后仍然不会使用调试功能, 一遇到问题马上就请教他人, 这样不利于自身的成长。调试非常重要, 是学习代码本身

不可或却的一部分。是诊断, 梳理代码逻辑的过程, 可以避免逻辑错误的重复性发生。善用调试新手很多的问题都可以得到解决, 即可摆脱对他人的依赖性,

自身又得到长足的进步, 一举两得。

三个窗口, 三个功能键:

地方窗口, 立即窗口, 观察窗口, F1(帮助), F2(属性方法), F8(分步执行)

途中诊断:

断点, stop 等等。

2: 分拆

(1)语句分拆

长而难懂的句子分拆成基本单元, 利用调试功能一个个解决, 很容易就理解了它的含义。

如: intRow = Range("A"& Rows.Count).end(xlup).row

立即窗口:?Rows.Count

Range("A" &Rows.Count).Select

Range("A"&Rows.Count).End(xlup).Select

?Range("A"& Rows.Count).End(xlup).row

用眼睛都可以看到每一步Excel选中的哪个单元格, 那么自然就不难理解了。这个小范例同时揭示了学习程序过程中一个非常重要的方面: 动手尝试。

(2)子程序分拆

把一个冗长的程序按照功能拆分成一个个相对独立的子程序来调用, 使得程序具有一定程度的组织性,结构性,规整性大大提高了代码的可维护性,扩展性,

重用性。这是贯穿程序语言发展的一条主线, 因为它直接指向了程序开发的终极目的之一:开发效率。

3: 耐心

学习目的明确 ≠ 急于求成。无论学习目的如何直接和明确, 学习的过程仍然不是一蹴而就的, "捷径"只能是建立在扎实的阶梯式基础上。

有些新手基本代码还没写利落就开始用界面写"系统", 甚至还没学会调试, 结果是步履维艰, 一步一问, 三步一错, 无以为继。还有的朋友

学习VBA是为了研究彩票, 还没学习一星期就开始写各种计算方法, 自然处处遇"难", 大挫学习兴趣, 随之放弃。抱着明确的目的学习是好事,

不管目的是否"明智"(这是另外一个话题), 但明确的目的不等于"急功近利"。学习的进程总是遵循渐进式的规律, 跳跃式的一夜暴富只能是空中楼阁,

VBA太方便了!学会了之后,工作效率快好几倍_子程序_03

VBA的优缺点是和其设计定位紧密联系的, 是相对于其它对比对象而存在的。抛开定位在其适用范围之外与其它开发语言比较来谈VBA的"缺点", 这种比较本身就是有失偏颇的, 因为它就不是为了开发而设计的,所以也就无所谓什么"缺点"了。

同样, 基于设计出发点的用途和功能也就不能称之为"优点"了,本身就是干这个用的,又何来优点?但这些的确可以作为VBA的特点。听起来比较混淆,就用2个单词作为标记更容易区分些: Advantage, Feature。其实称谓不重要,也没必要较真分的那么清。重要的是和定位联系起来看待VBA的存在及其特点。

1:作为程序语言和其他开发语言比较,VBA的特点:

(1)"天然"强大的输入输出平台

对着"大黑框框"学程序一学就是几年,太没成就感了,什么样的控件能有Excel强大呀。

(2)使用便捷

无需搭建任何环境, IDE,调试器(debugger)齐全;

Office装机量大,VBA到哪儿基本都可以拿出来用,就像哪部电脑都有浏览器一样,JavaScript随时可以用;

无需保存,编译,即可运行;代码数据一体化(同时也是"缺点"),发布简单,无需运行环境。

与其它自动化操纵Office的方式相比, 与COM交互更加容易便捷。

(3)简单易懂,门槛低,学习周期短

为了完整性,还是罗列出一些所谓的"缺点"

2:VBA的"缺点"

(1)不好封装

(2)需要宿主解释器的解析,所以速度慢

(3)安全性差

(4)无法提供面向对象的结构式编程方式

(5)单线程

(6)................................

概括起来基本上涉及底层,大型应用的方面根本做不到,较为复杂点的应用系统在与数据库结合后并非不能做到,但仍不适合。

上述"缺点"基本上是脚本语言具有普遍性的"通病", 显然VBA就不是针对完成上述功能而设计的。但相对于寄生于Office的脚本来言,

VBA是唯一的存在(VSTO不是这样的方式),独此一份没有可以比较的对象,所以优点就无从谈起。

VBA太方便了!学会了之后,工作效率快好几倍_子程序_04

希望你能找到自己的砖。我还是觉得,VBA和函数一样,多学多练才是王道,杀贴一万,做不了统帅,也能做大将军了。