写给VBA初学者的随笔: 相信, 实践, 理解(二)

接前文……

两条腿走两路的VBA

1:'命令式'

一条腿利用office'内置'对象方法(Find,Atuofilter等等),甚至是Wroksheetfunction来完成程序任务;

2:'语言式'

另一条腿读取单元格内容到内存数组,利用VBA的程序语言功能来执行业务逻辑,最后写回单元格。

'内置'的问题要稍微说下,VBA作为脚本寄生于Office,其存在的方式是内置,但与Excel数据并非直接无阻交互,仍然要通过COM接口提供的一套对象与Office进行交互,在这一点上并非VBA独享,任何其他基于ExcelCOM类插件都可以调用,
所以从交互角度来讲,VBA并非与Office无缝契合的内置存在。

显然论坛很多帖子的内容在第2条路上走的太远了,无所不用其极。计算机系的科目搬到VBA中来,VBA内置没有的数据结构再造一个轮子、多媒体应用,VBA实现不了的用API,其他语言擅长开发的内容扩展到VBA里来,林林总总诸如此类'屠龙术'打造的'牛'贴随处可见。甚至把第一条路视作'低级','初级'应用原因就是它容易,在初学者面前营造出这样一种氛围:

'哇,Excel,VBA还可以这样玩?太强大了!'

'哇,Excel,VBA真是博大精深,深不可测,无所不能!'

'牛,职业的吧?科班出身的吧?'

手段和目的,工具和应用,技能和学问,价值取向基本背离了Excel VBA的初衷。MS在VBA加几个内置的数据结构难吗?很轻松,但为什么不加呢?

人们潜意识把'难'的,'高深的',但不常用的东西划分为'高级','容易的'而常用的功能定位于'低级'。VBA设计的初衷就是“简单易学',结果'精英'们大有不把'容易'搞'复杂'誓不罢休的架势,背道而驰。

那么何谓'高',何为'低'呢?与其说深入学习,不如说是在挑战Excel VBA的极限,更不如说是在进行一场无意义的挑战自我极限的游戏,轮回的终点仍然是起点。

插播小故事:

有一位年轻人依靠着一棵大树晒着太阳,神态怡然。有一位过路人从此经过,好奇地问道:“年轻人,如此好的阳光,如此难得的季节,你不去做你该作的事,懒懒散散地晒太阳,岂不辜负了大好时光?”年轻人答:'干什么该做的事?'
过路人:'去努力工作呀'
年轻人:'工作为了什么呢?'
过路人:'工作可以挣很多钱呀'
年轻人:'挣了钱以后呢?'
过路人:'挣了钱你就可以买房买地'
年轻人:'那然后呢?'
过路人:'之后就可以娶妻生子了'
年轻人:'再然后呢?'
过路人:'你就可以在这晒太阳了'
年轻人:'我已经在这晒太阳了呀'

应用是目的,作为辅助性手段的工具本身直接演变成了研究目标。Excel,VBA作为技能它不是学问也永远成为不了学问,演变的结果:技能当成了学问来作。

函数版帖子表现的淋漓尽致,目的早已经实现,为节省几个字符消得人憔悴?灵活使用Excel函数,穷尽掌控VBA之极至,成为了终极目标,在沉迷中已经
分不清是'玩Excel'还是'被Excel玩'。

话从来不敢说得太重,就怕伤害热情坛友的感情。<我的团长我的团>中有这样一句台词:

'上天宠爱骄傲的人,给他们一颗永远孩童的心。我说的不是天真淳良,是他们永远只顾自己的喜好厌憎。

他们爱死了虞啸卿和那个能让他们全体丧命的作战计划,他们有多爱那个计划就有多恨我们。

验证勇气很难,表现勇气就只要对我们同仇敌忾。虞师绷得像弓,今天断了弓弦,没人想你也许救了他,人们只恨拿走了希望和信心的人。'

VBA的'优点'和'缺点'--弱化的可比性

对比是存在的根本。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不是这样的方式),独此一份没有可以比较的对象,所以优点就无从谈起。

本楼准备写点儿平实但或许对新手有用的东西,避免前面几楼'假,大,空'的问题。先从新手常见问答(FAQ)开始吧,这些问题都是论坛(不止是这里)常见学习过程中的疑问,仍然不涉及细节问题,只谈认识。在开始之前按照惯例还是稍作声明:

'适合'与'正确'

正如之前所讲,对于新手的疑问,稳妥的答案通常相对是'正确'的或者说是'标准'的,因为它是全面的。'包罗万象'的分情况讨论是得出所谓'正确'答案的唯一途径。

由于很多情况新手未曾遇到过,没有感性认识,难以理解,容易造成困惑和纠结。左右逢春可以变成模棱两可,唐僧式的阐述可以导致索然乏味。
'正确'的未必是'适合'的,'适合'的可以是'正确'的。(这里要展开的东西太多了,就不唐僧了)我希望简洁,明确,错误概率小的答案,个人认为这是'适合'新手入门的。

'Believeit,Doit,Knowit!'--'相信,实践,理解'

然后就会把握什么是'正确'的答案。ExcelHome论坛精神:Let'sDoItBetter!',我更想传递的思路是:'Let'sDoIt'RIGHT'!'。

插播调味小贴士:08奥运期间很多品牌征集英文翻译,最经典的莫过于:狗不理=GoBelieve。

新手FAQ

【Q】:'数学不好,能学习VBA(编程)吗?'
【A】:完全可以。
【注释】数学不好自然不会去写涉及与数学相关的应用程序,一般应用程序不需要有数学基础。
加减乘除都不会的话,那是不会算数,不能算成数学不好。

【Q】:'不会英语,能学习VBA(编程)吗?'
【A】:能,有障碍可以克服。
【注释】不会英语对于学习不同的程序语言造成的障碍稍有不同。主流语言多用操作符来搭建语法,而VB多采用'说话式'的语法显得有些啰嗦,不够简洁。
诸如:Then,Is,Not,Nothing等等这类的英文单词很多,就是为了一看就能理解关键词的含义并且组成句子。所以简单易学是针对英语用户的,会说英语就能上手是打造VB语法的初衷,结果对于非英语用户反而造成不小的麻烦,让老外学习易语言,估计要疯了。不会英语或者英语不好对于学习VBA并非不能克服,毕竟要用到的关键词,对象属性,方法只是英语单词中非常微小的一部分,用习惯了自然就不会成为障碍了。退一步讲,英语都可以学会,更何况编程中要用到的一些关键词呢。

【Q】:'文科出身,能学会VBA(编程)吗?'
【A】:当然可以。
【注释】科学一统天下的时代,文科和理工科在方法论上的区分越来越弱化和模糊。理工科同样不少学生不会编程,文科生照样很多人写出很好的程序,
这已经成为不争的事实。如果把逻辑思维也划分到理工科独有的范畴内,恐怕只有文学艺术类才能算真正的文科了。关键是不是用到编程,用到
自然可以学会,并且无障碍,所以文科出身成为不了学不会编程的借口。

【Q】:'VBA(编程)难学吗?'
【A】:容易学。
【注释】原因有二:(1)VB本身的特点(简单),知识点相对少;(2)网络大量文献以及交流平台起了主要作用,任何程序语言没有完备的文献,'容易'的也
也变成'难'的,反之,'难的'也比较容易学会。

【Q】:'学习VBA(编程)看什么书?'
【A】有书无书皆可。(所答非所问)
【注释】好的书籍是作者精心的总结,对于新手的意义不言而喻。但本人一本VBA书都没看过,所以没有发言权。我只能告诉你善于搜索不用书也可以学会,
只要输入的关键词合适想在第二页找到答案都难,一般前10个条目大多数问题都可以解决了。不得不说有大量的VBA用户群体是学习者的福音,溢出效应明显。

【Q】:'学习VBA(编程)过程中最重要的是什么?'
【A】:做中学。(learningbydoing)
【注释】编程是一项通过实践提高熟练度的技能。代码量肯定不是衡量编程好坏的充分条件,但绝对是必要条件之一。读书再多遍,不动手去写仍然会感到无从下手。
多实践包含:多动手写,多调试,多借鉴好代码,多总结。最初可能分不清什么是好代码,以后在实践中自然就知晓了。'做中学'永远是学习编程的不二法则。

【Q】:'学习VBA(编程)周期需要多久?'
【A】:因人而异,因程度而异。
【注释】这个问题只能这样回答了。不过还是给出大致的参考指标:没有任何程序语言基础,能保证持续学习时间和频次的情况下,半年或数月基本上可以达到
掌握VBA并解决实际问题的目标了。(参考指标比较保守,可能会更快的)

【Q】:'VBA的职业前景如何?'
【A】:目前VBA无法成为职业规划的目标。
【注释】零星的招聘或招募客观存在,但没有形成规模化,市场化的职位供需关系,所以既然不能成为职业也就没有前景可言。然而并不意味着完全不能利用VBA挣钱,
这还要取决于'挣钱'的标准,以及稳定性等等诸多主观及客观环境条件。

【Q】:'VBA是否会消亡,学了VBA白学?'
【A】:还将在相当长的一段时间内存在,长期不好定论。
【注释】VSTO的出台无疑加重了初学者的疑虑。可以肯定的是MS不在加大发展VBA的力度,但VSTO的出现到底是提供多样化的开发方式呢,还是用来替代VBA?

从以下几点来推测:

(1)由于VSTO不具备VBA的特点,(或者说它们的方式不同)所以不是'完美'的替代品;

(2)VSTO已经出现了若干年,MS仍然没有用它替换掉VBA;

(3).Net环境的推出,MS打造了VB.Net,充分说明MS还是会考虑到大量VB6用户的感受,做到一定程度上的向下兼容(虽然只有沿用了VB6的语法,真正意义上
和VB6是两个不同的产品)。同样的道理,MS仍然会顾及广大VBA用户的感受保留VBA的一席之地。基于以上3点有理由相信VBA还将会在一定时期内存在的,初学者不必过于担心。

…………

未完,待续。

(0)

相关推荐

  • 刘永富的Office/VBA/VSTO开发资源分享

    各种常用安装包下载:https://share.weiyun.com/ug3DEaaR 简称 文件名称 描述信息 视频课程 虚拟光驱软件Daemon DAEMON_Tools_Lite_V10.1.0 ...

  • 用集王《圣教序》写唐诗,初学者创作利器!

    书圣之书法,心摹手追,平和自然. 而当流畅舒朗.矫健豪迈的唐诗, 遇见王羲之笔势婉约.遒美健秀的晋韵墨迹, 会有什么惊喜呢? 刘禹锡<竹枝词> 杨柳青青江水平,闻郎江上踏歌声. 东边日出西 ...

  • 唯美情感:这是一篇,写在初春里的随笔

    看书之家 嫩叶初枝展,清香散入风 游山观绿水,闲望钓鱼翁 --题记 浅浅的暮云由天而落,映红堆叠错落的绿海山景. 黝黑的泥土在碎石间流淌,带着些许绿意,由山脚边一直延伸到江边. 翠青的江水,没有喧嚣, ...

  • 写出我心32:读书思考实践写作

    2020年第152期 作家周国平在阅读 周末逛书店,儿子看中了一本名为<读书是一辈子的事>的书,是由当下很红的樊登读书会的创始人樊登所写的,儿子很崇拜樊登,我看他那么喜欢,就果断买了,自己 ...

  • 随心而写,有感而发,提高随笔写作水平

    在微博和朋友圈,经常有人晒出自己的日常生活,不仅配有图片,还有一段段文字.比如,今天吃了什么东西,某种东西特别好吃,让人回味无穷:今天干了什么事,收获很大:今天去了什么地方,感觉那里好美:今天心情如何 ...

  • 接触非线性分析不收敛? 写给ABAQUS初学者的N个经验

    接触,在仿真分析中,绝对是个看似青铜实则王者级别的难题.一些通用的解决办法,在帮助文件的Interaction → Contact Difficulties and Diagnostics中找到,例如 ...

  • IFA芳疗师论文怎么写?看荟尚芳疗师实践分享

    IFA芳疗课程论文 中医芳香疗法在儿童腺样体肿大问题上的应用 指导老师:洪雅秋(Jojo Hung)学员:罗熹(Xi Luo)HS荟尚教育学院  2021年2月中医芳香疗法在儿童腺样体肿大问题上的应用 ...

  • 写给 Linux 初学者的一封信

    大家好,我是肖邦. 这篇文章是写给 Linux 初学者的,我会分享一些作为初学者应该知道的一些东西,这些内容都是本人从事 Linux 开发工作多年的心得体会,相信会对初学者有所帮助.如果你是 Linu ...

  • 写给太极拳初学者几点放松的方法

    推荐阅读 经典原创文章:用太极拳+八段锦+站桩打坐进行百日筑基,身体出现了惊人的逆转. . 教拳要因人而异,为什么呢?就拿放松来说吧,放松是既难又简单,有些人天生就很松,学起拳来甚至不用经历" ...

  • 干货!楷书写不好?从偏旁到部首教你写楷书,初学者收藏起来学习

    原创绘画视界2020-11-05 20:32:52 楷书很难写?初学者学习楷书,除了字帖就没有其他途径,字帖其实是学习楷书最好的方式之一,但是很多初学者总是找不到好的适合初学者学习的楷书字帖,下面通过 ...