ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 19559|回复: 30

[分享]认识VBA语言

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-8-16 08:30 | 显示全部楼层 |阅读模式

认识VBA语言
引子

前阶段,在论坛上有两个贴子“学VBA有一种感觉”、“VBA的局限性”,大家反映很热烈,也抒发了自已对VBA的认识。这也引起了我的思考,想更好的了解和认识VBA语言。毕竟,自已对Excel感兴趣,也正在学习ExcelVBA,因此,首先还是应该对她有一个全面的认识,消除一些偏见和疑虑,才能以正确的心态更全心的着手进行学习和研究。
后面附有这两个贴子的主要想法和观点,不一而足,但我们也可以从中获得不同的信息和感受。有些观点很精彩,作者真正在探索VBA的实质,也对VBA有着深入的理解;而有些则是体会到VBA的快速简便,或者利用VBA的优点,或者体会程序实现成功的感觉,或者是兴趣使然,或者是想学习一门工具,等等。总之,目的不同,水平不同,心态不同,想法和体会自然也不同。
其实,任何事物都是有利有弊的。您了解得越多,理解越透彻,实践和经验越丰富,就会更运用自如,就能尽量避免它的缺点,充分发挥它的长处。对于VBA语言也是,她之所以存在,必然有其道理和优越性。在国外,有许多经典书籍和资源,对VBA有很深入的介绍,尤其在Excel方面,已在许多领域广泛应用,这也能看出其好的方面。另外,VBA也是一种工具,您也可以配合其它工具来实现您的目的。
我想,既然您对Excel感兴趣,想学习VBA,那么先精通她再说。
下面是我近段时间对一些与VBA相关的文献资料(后面附有清单)进行学习后的一个归纳和小结,力图真正认识VBA语言并将其实质全面展现出来。不足之处,请批评指正。
一、VB与VBA的发展历史
在认识VBA之前,先简要回顾一下VB以及VBA的发展历史。
1、Microsoft于1991年5月20日在亚特兰大发表了Visual Basic 1.0 for Windows。
2、Microsoft于1992年9月1日发表了Visual Basic for MS-Dos标准版和专业版。如同Windows平台的Visual Basic,该版本提供了简易的图形设计特点,用于设计功能强大、多样的传统应用程序。运用该平台,开发人员只需简单的绘制用户界面,并附加相应的事件代码即可。
3、Microsoft于1992年11月2日发表了Visual Basic 2.0 for Windows标准版和专业版。在该版本中,Microsoft加入了300多项新特性以帮助开发人员创建更快速、更有效以及能利用各种Windows特性的应用软件。
4、Microsoft于1993年5月14日发表了Visual Basic 3.0 for Windows标准版和专业版。在该版本中提供了Microsoft Access Database Engine for Windows 1.1用以浏览大量的资料以及提供OLE(对象链接与嵌入自动识别)2.0的功能,开发各种商业应用软件。同时,还加入了许多新的工具和控件以及增强的自定义控件功能。
5、1993年6月29日Visual Basic被整合于Excel 5.0和Project 4.0中。Visual Basic将属于Windows和Macintosh平台统一的应用程序巨集语言。在当时,一个通用巨集语言和OLE 2.0是Microsoft的两大策略,通过这两个工具,用户可以跨越并整合不同的应用程序、使自动化运行并生成各种自定义解决方案。VBA的灵活性以及它强大的开发引擎使得Visual Basic成为流行的、并受到高度赞誉的程序开发技术。并且,数以十万计的软件增值零售商和第三方开发人员已经加入到了全球的Visual Basic开发团队中,这些开发人员能迅速利用他们现有的Visual Basic知识,开发属于Microsoft Office平台的各种解决方案。
同时,Excel也加入了对多工作表工作簿的支持。
6、1994年11月14日Microsoft在拉斯维加斯的COMDEX发表了Visual Basic 4.0 for Windows,并首次提出了属于32位Windows应用程序的OLE自定义控件(OCXs)——一种属于OLE标准定义的可重复使用的组件。
7、1995年12月12日Microsoft发表了基于Microsoft Windows NT和Windows 95版本的Visual Basic 4.0,在该版本中,不但增强了Visual Basic标准版和专业版的各种特性,而且也推出了一个全新的版本:Visual Basic 4.0企业版,以满足企业和团队的开发需求。Visual Basic 4.0的三个版本中都包含有增强的OLE技术支持、增强的资料浏览技术、开放的视觉化开发环境,以及与Windows 95和Windows NT的无缝整合。
8、1995年12月7日Microsoft发表了Visual Basic Scripting(VBScript),一种属于Visual Basic的Internet的描述语言。VBScript是用于设计Web内容的高性能描述语言,允许开发人员在Web页面链接和自动化各种对象参数,例如OLE对象。VBScript同时也成为整个Internet的免费开发语言规范。
9、1997年2月3日Microsoft发表了Visual Basic 5.0专业版——一个全球快速应用开发平台上最流行的开发工具。在Visual Basic 5.0中,Microsoft加入了许多新的特性以提高Visual Basic的整体性能和增强开发效率,并且能帮助开发人员高效、快速和灵活的解决方案。这些特性包括:Native语言编译、高速资料库浏览和改良的整合开发环境,这也使得Visual Basic 5.0成为当时Basic最为强大的版本。此外,开发人员可以在Visual Basic 5.0中创建ActiveX控件,这项功能使得全球300多万开发人员能快速开发各种元件、执行于Internet、Intranet和主纵架构的应用软件。
10、1997年3月10日Microsoft发表了Visual Basic 5.0控件开发版,通过这个版本,用户能快速方便地开发ActiveX控件,用于各种Internet、Intranet和主纵架构的应用软件。
在Microsoft发布的Excel 97中,开始支持条件格式和数据有效性,新加入了一些菜单和工具栏。在VBA方面,引入了全新的VBA编辑器、用户窗体(Userform)、类模块等。
11、1998年6月15日Microsoft发表了Visual Basic 6.0,一种流行的快速应用软件开发工具。Visual Basic 6.0作为Microsoft的Visual Studio 6.0工具套件之一,它提供了图形化、ODBC或OLE DB实现整合资料浏览工具平台,以及提供了与Oracle和SQL Server的资料库联结工具。Visual Basic 6.0的Web开发特性可以使得开发人员以更方便、组件式的方法,开发各种HTML和动态HTML的应用程序。这些新特性,同时结合性能最佳化、简化应用程序的部署和错误调试以及支持Microsoft服务器技术等特性,使得Visual Basic 6.0成为建立可扩展的企业应用开发平台的理想选择。
12、1998年4月28日Microsoft向第三方的软件供应商通过许可证的模式发表了VBA 6.0和VBA开发工具组件6.0。VBA 6.0作为Office2000的核心组件,已成为快速开发自定义应用程序的强大的开发工具平台。
13、1998年9月2日Microsoft发表了一套全面开发可扩展企业应用的工具套装软件:Visual Studio 6.0。Visual Studio 6.0 包含 Visual Basic 6.0,Microsoft Visual C++ 6.0,Microsoft Visual FoxPro 6.0,Microsoft Visual InterDev Web 6.0 和 Microsoft Visual J++ 6.0。Visual Studio 6.0在1998年的设计师日大会上正式发表,当时有115家全球顶级公司宣布全面支持Visual Studio 6.0。
在1999年发布的Excel 2000中,可使用HTML作为文件格式,开始支持COM加载宏,还具有自我修复的特性,加强了剪贴板和数据透视表方面的功能。VBA也开始使用无模态用户窗体,还加入了一些新的VBA函数。
14、2000年2月15日Microsoft宣布对全球Visual Basic开发人员更深入、紧密的交流和支持。
15、之后,Microsoft发表了支持XML网络服务的.Net平台开发工具技术……
16、随着在2001年3月VBA 6.3版的发布,Microsoft已经增强了VBA 6.0,并包含了新的功能,扩充了开发环境的能力、灵活性和安全性。这使得新的ISVs(独立软件供应商)使用这些新功能可开发出功能更强大的解决方案,诸如基于VBA的多线程工程、开发高效率的加载宏、以及支持数字签名。并且随着Microsoft新的整合技术的创建,ISVs能比以前更快速和容易地整合VBA到他们的应用程序中。
VBA 6.3是Office XP的一个核心组件(现在也包含在Microsoft Outlook、FrontPage、以及Microsoft Access、Excel、Word、PowePoint中)。通过VBA许可程序,Microsoft制造了同样的VBA版本在非Microsoft应用程序中,提供了同样易用且强大的VB到更广范围的新的应用程序领域中。
每个能使用VBA 6.3的产品都包含有支持无模式对话框、完全与VB6.0相同的核心语言、增强的工程口令保护、在IDE中支持加载宏使得程序更有效率等特性。一些宿主VBA 6.3的产品也利用了VBA工程数字签名优势(为防止“宏病毒”)、支持ActiveX控件设计(容易创建复杂的工程组件)、和多线程工程(为更好的执行基于服务器的应用程序)。
17、Office 2003提供了Visual Basic.NET Office系统工具,其几个主要的新功能只能从.NET中进行自动控制,这当然是Microsoft从解决VBA安全性方面的考虑,并且Microsoft的.NET研发队伍正在向替换Office.NET工具进行倾斜。但您不必担心,因为VBA已经有很深的根基且被广为接受,从VBA过渡到.NET将有一个相当长的过程,此外,我们从ExcelVBA中获得的知识也可以更好的帮助我们过渡到.NET框架中。
二、什么是VBA和宏
VBA是一种强大的开发技术,它能快速定制富客户端(即用XML替代传统的HTML作为服务器端返回给客户端的数据载体)桌面被包装的程序,以及将它们与已存在的数据和系统整合在一起。VBA提供了一组基于VB开发系统的高级编程工具,开发者能够使用它们来利用被包装的应用程序。VBA能够使用户购买直接使用(或买来后只须经过简单的培训或阅读说明书自我培训)的软件,并能定制它以满足用户特定的商业流程,而不是从零开始创建解决方案。这帮助他们节省了时间和费用、降低了风险、提升了他们的编程技术、以及精确地提供用户所需要的功能。
VBA提供了一个完整的开发环境(IDE),对于使用VB的开发者来说,它们有着相同的元素和功能,包括一个工程窗口、一个属性窗口和调试工具。VBA也支持窗体、创建自定义对话框和ActiveX、以及快速创建用户界面。通过直接整合到宿主应用程序中,VBA提供了一些优势:快速、在过程中执行、与宿主应用程序紧密整合(代码在文档、单元格等之后)、以及不需要运用其它工具创建解决方案的能力。
包含VBA的软件程序称作可定制的应用程序,即应用程序能被定制以满足特定的商业需要。这类应用程序能使开发者快速创建解决方案,并且只需对最终用户进行较少的培训。对于MIS和商业管理者来说,定制意味着能迅速地开发解决方案并容易推广应用,这与用大量的时间开发新的应用程序和高昂的最终用户培训费用相比,这些解决方案在投资回报和省时方面提供了非常大的商业利益。
而我们常说的宏是一个指令序列,可以自动执行和完成Excel的某些功能,或使Excel已存在的功能增强,从而提高用户的工作效率、减少差错。而创建宏所使用的脚本语言就是VBA,可以使用VBA创建宏代码,让Excel完成更多的任务。
三、VBA的优势
正在增加的能使用VBA应用程序的数量提供给开发者更多的应用程序定制和整合的机会,使他们能减少在培训方面的投资并提升VB方面的知识。最终,这些开发者有益于扩展到组织内部,并且选择能使用VBA的应用程序的用户超过从零开始创建解决方案的用户。更多的好处概述如下:
对ISVs(独立软件提供商)的好处
(1)完整且优秀的技术
许可VBA能使ISVs集中于他们的核心能力,而不是在语言开发。这能使他们提供给用户一个优秀的开发环境,也意味着ISVs不必用不同的工具和语言创建专有的技术。
(2)竞争优势
VBA为ISVs提供了竞争上的优势,他们为用户设法提供完全的定制和整合能力。能使用VBA的产品,ISVs可以创建扩充功能到他们的核心产品中,并且为用户提供了定制应用程序和添加功能和函数的技术以满足他们的需求。
(3)精简和扩充应用程序
VBA提供给ISVs一种直接创建基于VBA的向导到他们的产品中,以告诉用户是执行简单的或复杂的操作。在产品发布之后,VBA能使ISVs对他们的核心程序提供基于网络更新,在产品间传递新的功能和函数。
(4)宏记录
使用VBA和宏记录,ISVs能为最终用户自动完成重复性的工作任务提供一种简单的方式,并且也提供给开发者一种学习应用程序编程模型的简单的方法。
(5)一个极大的开发群体
通过许可VBA,ISVs能利用数百万已经熟悉VB编程技术的开发者优势,他们能使用ISV已包装的应用程序作为开发平台。ISVs也能利用已经在VB方面的巨大的基础优势:
①培训条件;②支持中心;③书籍和杂志;④会议(研讨会);⑤事件;⑥商业展示;⑦成千上万的ActiveX控件;⑧Web站点
ISVs投入VBA能扩展他们的应用程序和提供工具以满足用户特定的需要。能使用VBA的产品通过提供内置的定制技术,使用户购买一个“买和定制”的选择去建立应用程序。
对开发者的好处
(1)每个VBA宿主应用程序通过一个对象模型开发它的功能,扩展基于ActiveX组件为开发者利用以创建成批的用户解决方案。
(2)开发者能更适应市场,因为他们能在许多应用程序中运用他们的技术。有助于开发者在各种应用程序中只使用一种语言,只需了解该应用程序的对象模型。
(3)复用代码的能力是一个优势,因为相同的VB能在任何地方使用。
(4)VBA能够使得应用程序定制以提供满足用户需求的解决方案。
(5)随着正增长的可利用的能使用VBA的应用程序,开发者现在能整合这些应用程序,以更容易和紧密地共享数据和信息。
(6)可能最明显的是,VBA能使开发者创建以前被禁止的解决方案,因为现在通过整合不同的应用程序或不同的售买者,一些函数或功能是可共用的。
跨越一组更广范围的应用程序范围使用VBA,开发者能定制并整合商业应用程序,并提升他们已有的技术。
对MIS管理者的好处
(1)开发者能遍及大范围的应用程序以运用他们的知识。
(2)MIS管理者能选择买程序代替创建程序,并能使应用程序定制以满足特定的商业需求。
(3)MIS管理者能通过利用在VB方面巨大数量的熟练开发者适应变化资源需求。
(4)通过代码复用能缩减应用程序最终用户的工作积压,产生更快的反应。
(5)开发者容易在跨开发项目间转换。
VBA通过缩减所需要对开发者进行培训的开发环境或语言的数量,也能在帮助MIS管理者和他们的公司在降低培训费用方面起很大的作用。
对基于应用程序解决方案的最终用户的好处
(1)解决方案执行得更快速,这归功于在VBA和宿主应用程序间的紧密整合。
(2)解决方案看起来和工作时就像已经知道的应用程序一样,因此,很少需要再培训。
(3)用户能定制解决方案,例如,关于打印选项或者创建询问。
(4)在解决方案设计过程中,有更多的方式——用户能创建他们想自动生成的输出、报告和文档。
综上,用户将从所提供的解决方案质量和自定义函数中受益。现今,他们所使用的应用程序已包含了丰富的函数和紧密的整合,并能定制以使他们满足用户需求。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-16 08:32 | 显示全部楼层
四、VBA与其它的Microsoft开发工具
Microsoft针对不同的开发者提供了许多开发工具,包括Microsoft Visual C#、Microsoft Visual C++、Microsoft Visual J++、和Microsoft Visual FoxPro开发系统;Microsoft Office开发者;Visual Basic家族;Visual Basic .NET、Visual Basic for Applications(VBA)、Visual Basic Scripting Edition (VBScript)。诸如Visual C#、Visual C++、Visual J++、Visual FoxPro、Visual Basic编程系统等工具支持从零创建解决方案以满足高端特定的市场需求的开发者。Microsoft Office开发者和Visual Basic for Applications(VBA)支持选择购买并定制所包装的应用程序而不是从零开始创建的那些开发者,购买并定制直接使用的软件比从零开始创建解决方案缩短开发的费用和时间。Visual Basic家族被设计成能够提供强大的编程能力,且易于学习和使用的编程语言。
Visual Basic家族的每个成员都有特定的用途。VBScript被设计成为低内存环境提供轻便的脚本功能,诸如Web浏览器,最常用的是创建HTML网络页面,没有IDE。Visual Basic是创建独立软件组件的世界上最流行的快速应用程序开发工具,包括可执行程序、ActiveX控件和COM组件。最后,Visual Basic for Applications(VBA)是在一个已存在的应用程序中提供与Visual Basic编程系统相同功能的强大的开发工具,能够自动完成、定制和整合应用程序,它是某软件已满足大多数需要的功能后需要再定制该软件的最佳选择。
VB与VBA
VB与VBA的开发环境相似,都源于Basic,所包含的对象级相同,即VB所支持对象的多数属性和方法,VBA也支持,只是在事件或属性的特定名称方面稍有差异。VB与VBA的不同在于不能在一个环境中独立运行VBA,也不能使用它创建独立的应用程序,但VBA是一种完整的程序设计语言,可与那些和它集成的应用程序一起使用,它需要宿主应用程序支持,提供集成开发环境,并对宿主应用程序所包含的对象进行操作以定制应用程序。可以对宿主应用程序的界面进行改善,或者在启动宿主应用程序时隐藏宿主应用程序而显示用户窗体,好像是一个新的应用程序一样,这就是所谓的“封装”。
五、VBA编程语言
1、VBA可完成的主要任务
(1)创建代码中的OLE(ActiveX)对象的实例
(2)创建类
(3)链接到像Access和SQL Server这样的ODBC数据库
(4)与MAPI结合,创建强大的应用程序
(5)与Internet和Intranet结合创建解决方案
(6)创建自定义对话框和窗体
(7)从Windows注册表中存取数据
(8)检查和处理错误
(9)将ActiveX控件引入到应用程序接口中
(10)以最少的编程量和处理时间在启用VBA的应用程序间传递数据
(11)在启用VBA的应用程序中启动另一个启用VBA的应用程序
(12)接制Office应用程序
(13)使任何可以通过键盘、鼠标或者菜单完成的工作自动进行
2、对象模型
VBA是一种语言,但对于不同的应用程序用VBA所编写的程序代码可能截然不同,这是因为VBA是与应用程序的对象模型对接的,在多数情况下编写的代码所引用的对象会因为宿主应用程序的不同而不同。被引用的对象模型是创建基于VBA的程序的不可缺少的部分,对象模型指明了可以控制的应用程序和功能,这样就能利用VBA访问和改变对象模型的属性值、处理对象模型中的对象所触发的事件并调用对象的方法。
所有的VBA对象模型都有三类成员,即方法、属性和事件。在早期Excel版本中可用的事件有Click(单击)、Show(显示)和Change(变化)事件,现在的Excel版本中的事件已经被扩充,新的事件如Activate、BeforeDoubleClick、SheetChange、Open、WindowActivate、MouseUp、MouseDown和Calculate等。
3、程序结构
任何VBA的程序都包含有代码模块、用户界面和类。在此不再详述。
VBA语言也有自已支持的变量和数据类型,此外,所引入的类模块和自动化极大地扩展了其应用。
VBA是一种高级语言,最初由语句组成,不断更新的版本中又引入了函数,然后又引入了对象模型。
4、VBA语言元素
VBA语言元素可以划分为四个部分:语句、函数、运算符和对象模型。语句构成了语言的基础;函数一般具有返回值,与语句相比有很多优点;运算符用于连接一个或多个语言元素或者形成表达式完成一些运算;对象模型提供了附加的功能并扩展了语言。
六、ExcelVBA及其作用
Excel与VBA自动结合,成为了一种强大的可定制的应用软件。但VBA中没有加入任何的Excel组件,VBA通过操作Excel的对象模型来显示出它的强大功能。下面的ExcelVBA的一些主要的作用:
1、插入文本字符串或者公式。如果需要经常在工作表中输入一个很长的名称,可创建一个宏来自动完成。
2、自动执行需要经常使用的过程。如果用户经常要程序化的完成某项工作,不妨使用宏来自动完成。
3、自动完成重复的操作。
4、创建自定义的命令。可以将几个菜单命令组合在一起,这样只需一次就可执行这几个命令。
5、创建自定义工具栏按钮。可以自定义工具栏,在其中加上执行用户自已所编写的宏按钮。
6、为不够熟悉的Excel用户创建简化的程序。例如,可以建立一个十分简单的数据输入模板。
7、开发新的工作表函数。用户可以创建自定义函数来进一步简化公式。
8、自定义对话框以及添加新的菜单命令。
9、创建自定义加载宏。
11、可以与多个应用程序进行交互。例如可引用Access数据库中的数据创建Excel图表,然后将该图表引入到Word文档中。
12、可以导出通用的过程,以供其它用户使用。
一些有争议的问题(以ExcelVBA为例):
1、关于兼容性。这来自两方面,一方面是语言的问题,例如,在中英文版本中使用VBA对菜单栏和工具栏的操作会有所差异;另一方面是版本的兼容性问题,Microsoft的应用软件一般是向下兼容的,这就会使得有些VBA程序在不同的语言环境或不同的版本中会发生运行错误。当然,如果您对Excel了解得很清楚后,应该能避免这些问题。
2、代码的运行速度。相信这也能通过对Excel的熟悉程度,以及利用一些技术和技巧来得以很好的解决。
By fanjy in 2006-8-15

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-16 08:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

附一:两个贴子的一些想法和观点
———————————————————————————————————————
贴子一:“学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、网上一些文章和贴子

TA的精华主题

TA的得分主题

发表于 2006-9-23 16:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

这帖子专业了一点,看得有点吃力,先做个记号

TA的精华主题

TA的得分主题

发表于 2006-9-23 21:28 | 显示全部楼层
讲的不错,是个专业级的。值得学习,好好学习![em08]

TA的精华主题

TA的得分主题

发表于 2006-9-24 12:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-9-24 21:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢楼主分享!

TA的精华主题

TA的得分主题

发表于 2006-9-24 21:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-10-15 23:12 | 显示全部楼层

佩服佩服。

找不到合适的词语来顶了。

我得好好的看看....

TA的精华主题

TA的得分主题

发表于 2006-10-15 23:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不错不错,有知识有思想,值得好好读一下!谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 11:50 , Processed in 0.052098 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表