本帖最后由 DataBus 于 2013-4-2 08:16 编辑
本楼准备写点儿平实但或许对新手有用的东西, 避免前面几楼"假,大,空"的问题。先从新手常见问答(FAQ)开始吧, 这些问题都是论坛(不止是这里)
常见学习过程中的疑问, 仍然不涉及细节问题, 只谈认识。在开始之前按照惯例还是稍作声明:
"适合"与"正确"
正如4楼所讲, 对于新手的疑问, 稳妥的答案通常相对是"正确"的或者说是"标准"的, 因为它是全面的。"包罗万象"的分情况讨论是得出所谓"正确"答案的唯一途径。
由于很多情况新手未曾遇到过,没有感性认识,难以理解, 容易造成困惑和纠结。左右逢春可以变成模棱两可,唐僧式的阐述可以导致索然乏味。
"正确"的未必是"适合"的, "适合"的可以是"正确"的。(这里要展开的东西太多了, 就不唐僧了) 我希望简洁, 明确, 错误概率小的答案, 个人认为
这是"适合"新手入门的。从开贴以来此篇随笔一直都没有标题, 在6楼这里把它冠名为: (全部更新完毕后添上去)
"Believe it, Do it, Know it!" -- "相信, 实践, 理解"
然后就会把握什么是"正确"的答案。ExcelHome论坛精神:Let's Do It Better!", 我更想传递的思路是:"Let's Do It 'RIGHT'!"。
插播调味小贴士: 08奥运期间很多品牌征集英文翻译, 最经典的莫过于:狗不理 = Go Believe。
新手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】:做中学。(learning by doing)
【注释】编程是一项通过实践提高熟练度的技能。代码量肯定不是衡量编程好坏的充分条件, 但绝对是必要条件之一。读书再多遍, 不动手去写仍然会感到无从下手。
多实践包含: 多动手写, 多调试, 多借鉴好代码, 多总结。最初可能分不清什么是好代码, 以后在实践中自然就知晓了。"做中学"永远是学习编程的不二法则。
【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还将会在一定时期内存在的, 初学者
不必过于担心。
新手学习的几点建议
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是为了研究彩票, 还没学习一星期就开始写各种计算方法, 自然处处遇"难", 大挫学习兴趣, 随之放弃。抱着明确的目的学习是好事,
不管目的是否"明智"(这是另外一个话题), 但明确的目的不等于"急功近利"。学习的进程总是遵循渐进式的规律, 跳跃式的一夜暴富只能是空中楼阁,
所以耐心在学习过程中就显得尤为重要。
未完待续......
|