Excel VBA程序开发自学宝典
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 插件特点及如何发挥插件的优势

在前一节中,通过一个身份证信息获取的插件认识了Excel插件,那么在工作中应如何发挥Excel插件的优势呢?

1.2.1 Excel插件的特点

Excel插件是利用VBA程序开发的外置工具,通常是xla、xlam格式或者DLL格式。其中xla和xlam插件直接用Excel就可以开发,而DLL插件通常采用VB或者C++来编写。

不管何种软件开发的插件,它都需要在外观和功能两方面具有某些特征,以方便用户调用。

1.外观特征

● 有若干个菜单或者工具按钮

在插件封装后,调用其代码有两种方式:代码调用,用菜单或者工具栏按钮。显然菜单更方便,用户通过菜单单击即可完成相对于常规方式较复杂的操作或者运算。

● 利用窗体实现与工作表数据交互

在弹出的窗体中可以调用工作表的数据,也可以将窗体中录入的数据导入到工作表。而在窗体中录入数据时,相对于在工作表中录入数据,可以更好地控制。例如某个文字框中可以指定只能录入数字,而另一个文字框可以指定只能录入日期,也可以设定录入某项目后自动跳转到指定目标位置,而不用手动去移动光标插入点,甚至可以在录入时核对与工作表中数据是否重复等。

● 有一个帮助界面

对于开发者来说,不管自己开发的工具如何简单,都有必要向用户说明其功能和操作方式。所以在工具中通常加入一个窗体,进行文字说明或者动画演示。特别是工具没有提供菜单,而是通过函数调用或者快捷键调用时,更需要一个说明窗体。

● 对函数做参数说明

对于函数类插件,必须对每个函数的参数进行详细说明,让用户插入函数时可以清晰地看到每个函数中每个参数的功能与使用方式。

2.功能特征

Excel插件中的代码和普通宏程序的代码在编写上有一些差异,这是由它们的设计目的不同而造成的。其中宏代码通常用于解决某个具体的问题,它可能限用一次,也可能需要反复调用。但都只为解决某个具体问题而录制。而开发Excel插件则通常是开发者开发后,给其他的终端用户使用。用户不确定,需要操作的区域对象不确定。所以插件有不同的需求,它需要具备以下特征。

● 没有具体的区域地址

由于开发插件通常是给其他的终端用户使用,所以不能指定数据区域地址,而是提供一个自由选择目标区域的选择对话框,或者利用代码计算目标工作表中的待计算区域。这是和录制宏最大的差异。

● 不使用具体的工作表名或者工作簿名

原理与前一条一致。

● 必须有通用菜单或者窗体供用户调用命令,而不是在工作表中建立按钮来调用命令。

DLL格式的插件不存在工作表,而xla和xlam格式的插件工作表是隐藏状态,工作表不可能在用户的界面呈现出来,所以必须建立一个通用的菜单栏,使其在打开任意工作簿时都会显示出来供用户操作。如果设置了快捷键,那么是可以不用菜单或工具栏的,界面将会更简洁。

● 尽可能提供自定义选项

插件的针对性不强,即它需要有广泛性。插件通常不是为某一个固定用户开发,其需要处理的数据并非永远一致,那么在不同用户使用同一功能时,需要有自定义其参数或者选项的空间,工具才能有更好的通用性。例如设计一个工资条制作插件,那么工资条的表头行数就有必要让用户选择,而非强制一行或者两行。这和编写一个解决临时性问题的编程思路不同。

● 具有多版本适应能力

目前办公用户使用的Excel版本差异很大,有Excel 2000、Excel XP、Excel 2003,也有Excel 2007。开发者不会假定用户都用某个版本的Excel,而是通过代码判断当前用户的版本号,然后调用不同的代码,以适应当前版本,否则某些功能可能无法使用。

● 防错机制

自用型宏程序通常不用防错,因为用户和开发者是同一人。而插件则必须有完善的防错机制,预先设置了遇到某种错误该如何反应的措施,避免破坏用户数据,或者进入死循环,耗尽计算机的内存资源。

1.2.2 Excel插件的优势与限制

在工作中使用插件,可以使工作更轻松,运算更快速、准确。当然前提是插件的代码编写足够优秀,不仅具有很强的通用性,还要有完善的防错机制,以及灵活的自定义选项。那么工作中使用优秀的插件进行工作具有哪些优势呢?

● 简化操作:类似于bat批处理文件,可以一键执行多个任务。

● 强化功能:对Excel内置功能无法完成的一些任务,借用VBA代码可以实现。

● 美化界面:VBA可以调用Flash动画,也可以播放Gif动画,还可以直接对单元格字符产生滚动效果。对于喜欢装点的用户,借用VBA可以对工作表进行很好的修饰。

● 固化格式:VBA可以对录入的数据进行检测,阻止输入不规范的数据;也可以禁止新增、删除工作表,或者禁止缩放窗口等,从而促使多用户文件能确保格式一致,便于汇总。

虽然插件在工作中有以上优势,但它在某些方面也具有一些限制。

● 通用性方面:开发插件通常是个人行为,而非像Office软件一样由一个大公司主持。所以其通用性可能不是很好,由于开发者测试的次数少以及测试条件不足等原因,导致工具具有某些隐含的缺陷。

● 防错方面:程序员不一定是终端用户,甚至可能从来没有成为办公用户,而是直接学习插件开发。那么在程序编写时就可能思维受限,无法对可能出现的所有错误进行防范。

● 移植方面:插件属于外置工具,它的所有功能都需要安装才能使用。所以利用插件设计的表格有可能在传给客户后无法正常开启,或者开启后无法正常显示。最好的解决方法是将插件让客户端也安装一次。

● 独立方面:Excel的VBA是依附于Excel主体程序的附属程序,它可以开发强化Excel功能的程序,但不能开发脱离Excel而单独存在的软件。如果需要开发全新而专业的应用程序,VBA并非理想的程序。

1.2.3 如何发挥插件的优势

可以确定的是,善用插件可以提升工作效率。但是插件也不可滥用,否则享用优势的同时,也会产生一些后患。

首先,需要明白插件相对于Excel的功能属于外置工具,它需要安装后才能使用。如果读者的文件非自用型,需要与他人共享、阅读,那么需要连插件一起共享。

其次,如果是简单的功能,尽量使用内置功能,少用插件。插件适用于处理复杂的或者Excel内置功能无法完成的工作。例如宏有一个通用BUG,即使用宏代码后,内置撤销功能将禁用。为了让用户减少损失,针对某些会更新数据、修改(破坏)原有格式的工具,一定要提供一个恢复原状的程序。例如有制作工资的工具,就搭配一个删除工资条的工具。

最后,尽量将插件在同部门共享,即以一个办公室为单位或者一个企业为单位,让整个单位都拥有相同的插件,才能更好地发挥插件优势。

1.2.4 开发Excel插件的条件

针对插件的开发者,他需要有什么条件呢?现列举如下。

● 熟练掌握VBA技术

这是首要条件。必须对大部分常用对象及其属性熟练地掌握。且需要了解数据处理的常用方式,并从多种处理方式中找出最高效且通用的方式。如果在某些特殊情况下,程序的通用性与执行效率只能选择其一时,通用性优先于执行效率。

● 具有一定的报表操作经验

仅学习VBA是可以熟练掌握VBA知识的,但是仅掌握VBA知识却不可能成为优秀的程序员。例如开发财务人员用的插件,那么需要懂得一些财务知识,不需要精通,但一定要对财务知识有所了解或者有财务报表的制作经验,才可能开发出适合于财务人员的插件。

● 美化常识

这里的美化并不一定是漂亮的外观,而是需要使自己开发的程序界面具有协调性、统一性,还需要了解普通用户的操作习惯,根据习惯设计人性化或者操作更便利的界面。当然,在不影响效率的前提下,将窗体设计得更美观,也是具有现实意义的。

● 熟悉不同版本的Excel间的差异

终端用户们有可能使用多个版本的Excel,那么开发者也需要了解不同版本间的差异。例如Excel 2003中Application有一个属性FileSearch,用于在磁盘中查找文件,而Excel 2007取消了该属性,那么开发插件时就应尽量避免使用该属性,借用其他方法来代替,否则将产生兼容性问题,以致程序产生BUG。

● 具有较强的耐心

编写程序是一个与字母相处的过程。对于大中型程序,可能要长时间对着一堆字母或者数字,这需要有一定的忍耐力。甚至在程序开发完成后,仍然需要耐心对程序进行多角度、多版本的测试,以提升程序的通用性和纠错性。

1.2.5 本书架构

本书除VBA基本理论外,偏重于讲解插件开发的原理、思路与方法以及如何提升程序执行速度。在以后的章节中,主要按以下方式进行编排。

(1)VBA历史与功能、安全性等周边知识简要介绍。

(2)认识VBE编辑器并对其进行优化设置。

(3)学习VBA中常用对象及属性、方法、事件。

(4)VBA代码如何提升执行速度。

(5)掌握VBA高级应用,包括窗体的认识,及磁盘、目录与文件操作等。

(6)开发VBE环境下的插件。

(7)学习利用VB开发专业性的COM加载宏插件。

(8)最后利用前面章节的知识开发一个大型Excel插件。从该插件的开发思路和过程让读者了解插件开发的常规流程及注意事项。

本书以插件开发为重心,但对于VBA中常用知识(不一定与插件开发相关,但工作中较常用的功能)也会进行详解,或者进行实例演示。

除插件开发外,程序的提升和防错是本书多次强调的重点。

从第二章开始,让读者学习、掌握VBA理论知识,为插件开发提供基础。