附一:两个贴子的一些想法和观点 ——————————————————————————————————————— 贴子一:“学VBA有一种感觉” —— 到这个论坛有半个月了,我有一种感觉,像是在啃鸡胁,食之无味,弃之可惜!本来原想VBA是在OFFICE 之上编程应来的快些,但在论坛中看到,又是禁用右键问题,又是安全问题,什么启用宏问题。我想用VBA写出的程序,要是OFFICE出了问题用不成,用户升级了OFFICE 我看也会出现问题,我想微软不会有免费的午餐吧!永远无偿的让VBA开发者在OFFICE上开发程序?! —— VBA 只是让我们可以补充 office 做不到/不好做的功能而已,除此,无它。 毕竟,office是当前最流行的办公、财务软件,几乎所有工作要使用计算机的人,都会用到它,所以,用VBA补充实现某些功能,其方便与犀利,其窗口、操作界面与 office 所保持的一致性,是其它语言、其它开发工具所做的不到的。 但是,VBA顾名思义,for application for office,只能为 office具体应用提供有限程度的便利,其先天的不足,比如,无法实现太大的代码量,不适合高速、大计算量、图形处理,无法提供复杂的数据结构类型及类型转换,所以,微软也始终没有推出脱离office的VBA(那样也不是VBA了)独立开发工具。所以,先天的约束决定了VBA只能做前台的、比较简单的工作,其后台必须依赖于其他开发工具生成的系统,比如 C++/PowerBuilder/Java/J++,甚至包括种种 DCOM/ActiveX。 至于不少开发者,将大量的注意力集中在如何加密、保护等等,我个人觉得他们是偏离了方向,虽然我很佩服他们的努力与取得的巨大成果,他们对技术的研究起到了很大的推动作用。 摆清楚VBA的位置,明白VBA只是界面以及部分前台工作的补充,软件产品的关键部分都在后台(加密与保护这在其他开发工具里实现十分简单,不费吹灰之力),那么,问题是不是就简单了呢? 不过,问题要辨证的看,用 VBA 开发界面与前台工作之便利,对于开发速度的加快,是其他开发工具所无法达到的。 一句话,我所提倡的就是 X + VBA,这个 X 可以其他任何强大也传统的开发工具。 ——虽然vba有先天性的缺陷(这只是ms的市场定位而已),但,理论上通过包括api在内的扩展,vb能干得事情vba都能干,只是我有时在纳闷:有这个必要吗?有必要将api/ado/rdo引入到vba中来吗?这样做以后的代码效率到底怎么样?如果我们将这些中间过程全部在vb之类的高级独立开发工具中实现,只将excel做用户界面,不是更好吗?----我想,持这样观点的人可能应划为实用派吧,对应的就有是纯技术派了,呵呵.也不能说谁好谁坏,可打个比方:纯技术派就如音响发烧友,他们追求纯金连接线,天天听的也是各种测试碟(尽管大多时候是些打破瓶子的高保真声音),而无暇顾及欣赏当前的各种通俗的流行音乐.所有这些才够成我们这个多彩的世界。 ——我觉得VBA最主要是为使用者提供一个扩大OFFICE功能的平台,而不是用来开发什么软件的。自己用起来感觉最爽,想改函数就改函数,想做什么就做什么,至于去设计什么应用软件,别人不会用还时不时来烦你,累不累? —— 让您产生这种鸡肋感觉的是我,实际上这种鸡肋感觉我早就有过,而且是非常痛心的!!!是论坛上的WSWX先生和ROWEN先生鼓励了我,继续作下去。才有了我公布的几个探索。其实,大家都知道,VBA+EXCEL 对于非软件专业的开发人员开发自己的工作所需,是最容易上手,最快见效,可以无师自通的一种大众化开发平台,微软的OFFICE开发的意义就在这里。如果您不是为了把您的作品作为商品,仅仅是为了自身工作的需要,这是一件可以让您很快就体会到成功快感的乐事。 但是,若想把您的作品转化为商品,却是非常困难的,难在他自身所能提供的对软件的安全保护实在是太脆弱了。很多情况下可用自己的矛来穿破自己的盾。 当所选的题目有很好的市场前景时,在现今的市场经济下,有谁不想把他转化为商品。而且,我相信,随着这种开发的普及提高,商品化的流行是必然趋势,作为个人的认识和参与是早和晚的区别。所以,我们还要继续探索下去。说这些,希望能使您的感觉好起来。 ——其实,不知大家注意了没有,VB不能脱离VBA的。 VBA是贯穿OFFICE的主线,尤其是采用MS的组件模型,它显得尤为重要。因此,原来各自为政的ACCESS BASIC、WORD BASIC均被GATES要求统一采用Visual Basic For Application上来,曾经通过许可证允许第三方开发商使用(如AUTODESK AUTOCAD、MS收购以前的VISIO)。从这一点看来,VBA的主要目的是用于二次开发,当然,它也就不能脱离应用程序的环境(APPLICATION)。 如果,产品要做成商业的,应该使用COM组件,如COM加载项,这样就使用其它第三方工具来进行开发,这样的产品有很多。不要局限于VBA。 ——请大家相信VBA有市场。我正开发商业软件,工具VB+VBA。VBA核心代码装在DLL中,注册等都在DLL中。这是很好的组合利器。没有啥不好的,快速高效开发,充分利用Excel的功能。是其他不能代替的。我用的目的是计算数据和作图。 ——几乎非大型的管理软件所能做的的东西,用VBA结合SQL都可以做到,而开发时间之短及效率及灵活性都很好,而且有些东东用正规的开发工具都很难做到。 ——看了楼上好多见解,深感差异之大。井地之蛙的看法充满大楼一层一层的。毛主席说,没有调查就没有发言权。在我了解很多信息情况的基础上,说说Excel下使用VBA的观点。 1、VBA的使用是帮助办公更高效的一种方法,有很强的实用性,用户和开发者也越来越多。大家用Google搜索一下,就明白VBA的使用是很广泛的,解决问题之高效。 2、开发VBA专业软件也有很多,升级等也很方便。代码是否公开或保密,完全可以作到,比如核心代码放在动态连接库里,注册加密用硬盘ID号加密,一机一号对应。 3、VBA是广大计算机用户能轻松学习和使用的一种开发工具。 4、VBA正在迅猛发展,越来越多的软件巨头都使用VBA作二次开发,比如Coreldraw,Autocad,Arcinfo等等,当然包括大家必用的Office。 5、选择VBA是正确的,计算机是工具,所以VBA也是工具,为解决我们实际的问题而显得重要;人千万不要变成计算机的工具..... 多说了几句,大家见谅!本来都不发言的,只是深深担忧无知无畏之言充塞论坛,所以也发言警醒一些人,没有调查就没有发言权,井底之蛙请跳出来,天高海阔任你闯,狭隘之言请少说,避免误导后起之士。 贴子二:“VBA的局限性” ——我要感谢论坛以及论坛各位朋友,因为我的确在这里学到了大量鲜活的知识,但是时间长了,发现VBA的局限性也越来越多,常常令人沮丧乃至觉得索然寡味。……(省略) ——拜托,请不要这样贬损VBA。其实使用VBA出现问题大多是对其了解不深所致,毕竟使用VBA为开发工具的多半是业余做开发。任何语言都有不足,但都可以找到技巧解决,请继续努力。 Excel连接数据库(不论是DAO还是SQL),都没有问题,我们公司以此为开发工具,连接金蝶K3(10.2)SQL SERVER,做成的《辅助管理系统》,规模不小,用户近百人,集团在全国有八个公司,数据库存放在上海、浙江两个地方,OFFICE的版本从2000、XP到2003都有,使用下来都不错,中间出现过一些问题,但都是可以解决的。 尤其不同意所谓的第5个缺陷。Excel是大家最为熟悉的,虽然大多数人没有开发能力,应用水平很低,但最为熟悉,操作还算熟练。以Excel作为界面,可以做出非常好的效果,符合用户习惯,用户几乎无需培训。这本是使用VBA的优势,怎么反倒成了缺陷?悲哀...... ——虽说Excel是大家最为熟悉的,未必熟悉Excel的用户,就能完全按照所谓的操作要求使用?总是会出现‘误操作’的现象。甚至是让你哭笑不得的常识性错误。不小心的单元格拖拽,单元格删除,误操作莫名其妙的数据丢失,数据类型错误录入.....未必熟悉Excel的用户,能够理解做这个程序的人。 ——其实,开发程序(尤其是做给别人用的),不论是专业或业余,功力的深浅不仅仅包括对开发工具的熟悉,写代码的技巧,还有个重要的方面即在于对用户的了解,以及对用户可能产生的错误操作的估计。这是开发者的经验积累与对用户的尊重问题。还有,使用VBA开发,用Excel做界面,是有很多优势的,但不赞成直接用Excel文件来保存数据,这是很不安全的(请不要把帐记到VBA头上)。……(省略)……放着Excel大量先进功能不用,不遗余力地狂写很多没必要的代码,开发慢、维护难、速度更是慢了很多!这实在不是VBA的错! ——对VBA是门外汉,连单元格怎么表示都不知道,昨天有个学生找我帮忙,要处理数万条的数据。幸好我知道有这个好地方,翻过来在置顶的帖子中狂翻了一通,一个晚上解决不了。今天早上起来,重新理清一下思路,居然几行代码就把问题解决了。发给学生,他说如果不是这几个代码的话,他至少要干一个月时间。有用就行,管它是否局限,那些VBA做不来的,我们就不强求它做呗。 ——低手不懂就怪工具不好,大可去看看高手开发的VBA程序,Excel2003宝典作者开发的东西卖几十美金,其实很简单的东西,大家就是没学透,让老外占先。 ——————————————————————————————————————— 附二:关于编程语言的一些观点 ——————————————————————————————————————— 下面摘录候捷先生关于对编程语言的一些观点,很精彩,希望能给您有益的启示。 —— 口舌之战有何益 最常在程序技术相关论坛上看到毫无价值而又总是人声鼎沸的口舌之战,就是诸如“VB和Delphi谁好”、“BCB和VC谁优”、“Linus和Windows谁棒”、“Java和C++谁强”这种题目。每次出场都一片洋洋洒洒,红红火火急速窜升为超酷话题。众人各拥所好,口沫飞扬,但是从来说服不了任何不同阵营的人,话都只说给自已人听,给自已人爽。 这样的论战有何意义?许多人在重组自已的偏见时,还以为自已在思考呢。战到最后,就只是争谁说最后一句话而已。而且,擦伤引起的争吵几乎总是以刺伤结束。 工具与技术的评比,是一场高水平的演出。真有能力做评比,候捷是很尊敬的。但是这些各拥所好,口沫飞扬的人,真的对评比两方都有深刻的了解吗?很多时候我们看到的只是无知,而无知是这么一种东西:当你拥有了它,你就拥有巨大的胆量。 很多人喜欢某种工具,只不过因为那是他的初体验。他玩它出了一点心得,可以说出它的某些好,就开始做“评比”了。你只看到牡丹的艳丽,又怎知寒梅的清香,幽兰的空灵? 绝大多数人使用某种工具,不是因为它最好,不是因为众里寻它千百度,仅仅只是因缘际会。虽然说不同的应用环境选择不同的工具,是最伶俐的作为,但我真的怀疑,在现今工具(以及工具背后反映的技术)如此繁杂的时空下,有多少人能够同时精通一个以上的同质工具?追二兔不得一兔,我还是认为你精专一样工具,把它发挥到最高效能,获得的利益多些。被大家拿来评比的,都是市场上的佼佼者,还能差到哪里去?能够两雄相争,必然是在技术面、非技术面(资源的普及、品牌的可靠度)各有一片天,你的评比意义大吗?全面吗? 大多数人没有能力同时精通两种同质工具,初学者听了网络上不知名大侠的高论,也不可能有所选择(如果有,怕也只是蒙着头瞎选)。这种没有提供数据,评论者也没有显示任何信誉的论战,没有任何意义,纯粹只为自已爽。浪费网络资源! C++之父Bjarne Stroustrup曾经在他自已的网页上的FAQ(以及其它许多场合)中回答如下问题。虽然其中谈的是语言,但是扩大到其它层面仍然合适,值得大家好好咀嚼: Q:你愿不愿意将C++与别的语言比较? A:抱歉,我不愿意。你可以在The Design and Evolution of C++的介绍性文字里找到原因。有不少人邀请我把C++与其它语言相比,我已经决定不做这类事情。在此我想重申一个很久以来我一直强调的观点:语言之间的比较没什么意义,更不公平。主流语言之间的合理比较要耗费很大的精力,多数人不会愿意付出这么大的代价。另外还需要在广泛的应用领域有充分经验,保持一种不偏不倚客观独立的立场,有公正无私的信念…… 人们试图把各种语言拿来比较长短,有些现象我已经一次又一次地注意到。坦率地说我感到担忧。作者们尽力表现出公正无私,但最终都是无可救药地偏向于某一种特定的应用程序,某一种特定的编程风格,或者某一种特定的程序员文化。更糟的是,当某一种语言明显地比另一种语言更出名时,一些不易察觉的偷梁换柱就开始了:比较有名的语言中的缺陷被有意淡化了,而有被拐弯抹角地加以掩饰;同样的缺陷在不那么出名的语言里就被描述为致命伤。同样的道理,较出名的语言的技术资料经常更新,而不太出名的语言的技术资料往往是陈年老酒,试问这种比较有何公正性和意义可言? Q:别人可是经常拿他们的语言与C++比来比去,这让你感到不自在吗? A:当然这些评比不够完整,或者出于商业目的时,我确实感觉不爽。那些散布最广的比较性评论大多是由某种语言,比方说Z语言的拥护者发表的,其目的是为了证明Z语言比其它语言好。由于C++被广泛运用,所以C++通常成了黑名单上的头一个名字。通常这类文章被夹在Z语言供货商提供的产品之中,成了其市场竞争的一个手段。令人震惊的是,相当多的此类评论竟然引用的是那些Z语言开发商员工的文章,而这些经不起考验的文章无非想证明Z是最好的。尤其当评论之中确实有一些零零散散的事实……,特意选择出来的事实虽然好象正确,有时却是完全误导。 以后再看到语言评比文章时,请留心是谁写的,他的表述是不是以事实为依据,以公正为准绳,特别是评判的标准是不是对于所引述的每一种语言来说都公平合理。这可不容易做到。 我说过了,真正精辟的技术评比,对于相当程度的研究者,是很有价值的,但我很少在论坛上看到精品——论坛还能有什么精品,99%是打屁闲谈没有营养的文字。我们每每在其中看到偏见、我执,以及最后免不了因擦伤而引起的刺伤。这真令人伤感。这些人把时间拿来学习,多好。奉劝各位少花时间瞎打屁,多花时间学习,看些真正的经典,别动不动就在论坛上提问,也别动不动就挂在论坛上看别人的瞎打屁。 不但评比性的话题,大家喜欢强出头,其它话题,情绪性的反应也很多…… ——轻浮躁进没信心 “C#推出,Java将死”;“Java演进,C++将亡”;“.Net推出,VB程序员死定了”;“Kylix推出,大伙儿快学”;“Delphi持续新版,哥儿们别怕”;“我刚学VC,怎么它就出场了”;“MFC——真的要过时了吗”……,诸如此类的问题,不知该归类为谣言还是童语? 但奇怪也很感叹,为什么在家对这类问题如此感兴趣。这透露出一种肤浅——没有深该了解技术本质,因而汲汲营营慌慌张张惶惶惑惑于新工具,新事务,并且认为新的大慨一定者是好的。对自已没有信心,对整个环境也没有信心。 有深度的程序员绝对不会在意这种事情。当然,并不是早晚三柱香就万事保平安,并不是告诉自已别在乎别在意,就真的能够不在乎不在意了。那必需是发自内心,胸中自有丘壑的一种笃定,有着好的本质学识做靠山。 台湾BBS前阵子也有许多热烈讨论Java、C#、C++、.NET的贴子。我把我最欣赏的一封引于下。其最后的结语,扩张到任何领域都是合适的。 [贴子]……以目前台湾业界的情形来看,C\C++应该是想成为一名软件工程师的基本技能;至于Java,如果熟悉C++,学Java应该花不了一个月的时间。 以我个人的观点,Jzva的OO程度是胜于C++的,而且慢太守个Internet 盛行的年代,效率的瓶颈在于网络本身的频宽而不在单机执行时的效率,Java所提供的Collection FrameWork是非常威力强大的程序设计工具,又内建了对Multi-thread程序的支持,丰富的class library让人在设计网络、数据库……的相关软件时无后顾之忧。 C++可能是过去十多年以来最重要的程序语言之一,它的效率显然较Java为佳,但在撰写需要安装在Internet上成千上万种不同品牌的机器上执行的程序时,相对于Java可能就不是最好的解决方案。 “目前”不需要以Java来开发DeskTop上的应用程序,因为“当下”而言Java撰写的程序相对于C++会占据更多的内存且执行效能不彰。 我们不能期待兔子游得比鱼快,也不能期待鱼飞得比鹰高。 工程上的需求使得各种场合有不同的适合的程序语言,不必费心去批评A、推崇B、打压C。基本的理论比这些事重要多了。 VB将死?Java将亡?C++将被Java取代……,这很重要吗?我用Java也用C++,即使明年它们全都被Java++、C++++、Lisp++、Forth++取代,何忧于我哉?FFT还是FFT、Dijkstra algorithm还是Dijkstra algorithm……还是别太担心这些事了…… [候捷的回贴]……同意你的看法。写得非常精彩。人到了一个层次,才会去思考事物的本质是什么,不被浮面的工具所羁绊。 熟练工具是必要的,但工具的演化太快,不是大家在这里关起门来喊爽就好。 Donald Knuth说:“语言持续演进,那是必要的。不论现在流行什么语言,你都可以肯定十年二十年之后它不再风光。我总是在自已的书中写些不时髦的东西,但这些东西却值得后代子孙记取。” ……凡走过必留下足迹。你现今的任何努力,只要它是扎扎实实的,就绝不至于落空。技术是有累积性的呀,技术总是触类旁通的呀。…… ……要精通一个语言,使自已能发挥其最大效能,不是件容易的事,需要不少精力的投入。99.99%的人都是凡人,身为凡人的我们,把时间用来精通一(或二)种适合自已工作性质的“语言”,比泛泛认识多种“语法”,要高明得多,回报也大得多。 ——正确的作学问态度 ……技术是会累积的,有了某种经验,学习新技术会快很多。经验愈多,学习愈快。所以我常喜欢说“触类旁通”。 ……优秀的技术者一定需要一个向下沉淀的历练,通过了这层历练,有了扎实的基础,就可以向上浮升,开始以抽象的思考、抽象的语言、快速开发工具来进行高层次的开发工作。 [注]虽然候捷先生谈的是语言之间的比较问题,但其中也谈了很多关于一门语言或工具的内容,值得参考。所以说,如果您想评判VBA的话,请您先把时间拿来学习她,先精通她。 附三:参考文献清单 ——————————————————————————————————————— 1、msdn文档资料库 2、Excel2003应用技巧宝典 3、跟我学用VBA开发Excel 2002应用 4、巧学巧用Excel 2003 VBA与宏(中文版) 5、VBA专业项目实例开发 6、VB与VBA技术手册 7、程序员杂志 8、网上一些文章和贴子 |