Excel VBA/Access VBA如何创建自己的通用代码开发库(VBA开发高阶)
平时使用Access VBA开发比较多,今天来分享一个Excel VBA的开发技巧
使用Access数据库或VB 或c#开发的程序员都知道,可以将一些常用的通用代码库做成dll或mde(accde) 给其它程序调用
例如我们2014开发的Access通用开发平台,就是将一些通用功能封装在一个devlib.mde文件中给main.mdb中引用。这样做好的通用开发库可以给多个程序共用。统一又高效。
上面 http:// Devlib.net 实际上就是Access编译生成后的mde不带源码的文件,里面就是通用代码库
平时我们自己使用Excel VBA也会积累大量常用的代码,也会收集别人好的代码,并且开发过程中,还会形成自己的类库并不断迭代新的版本。但不同的xlsm有多个重复的版本,一是无法统一版本,二是重用非常不方便
那Excel VBA是否可以实现类似Access 或VB Dll 的引用方式来共用一个通用的代码库呢?答案是可以的
一、普通标准方式:
Excel VBA代码是保存在xls或xlsm文件中,随文件一起保存的,每个xlsm文件有自己独立的代码,无法共用。
二、引用共用方式:
1. 所有通用程序代码均引用共同一个文件中的通用代码库,代码重用,节约 高效。
2. 一处修改,引用全部同步
3. 代码库精简 版本统一
三、VBA通用代码库实现方法:
1. 创建一个唯一名称的加载宏来实现通用代码库,使用加载宏主要是为了不在前台显示。
2. 为避免与其它引用的文件工程名称重名,修改这个加载宏的VBAProject属性里的工程名称,确保唯一:如sysDevLib。甚至可加上更长一点的前缀,避免名称冲突
3. 然后在这个加载宏中添加自己常用的代码库,可以包括模块及为模块。模块中的过程及函数使用Public修饰,以便开放给引用的文件使用
4. 类模块注意默认可能在外面是看不到的。要使用以下方法解决:
将 类模块 如clsTest 属性Instancing 由默认值 1-Private 设置 为:2-PublicNotCreatable(公开但不能被创建)或 5-MultiUse
如果你的类模块比较多,则可以自己使用代码循环所有的类模块,自动设置(我用VB6做了一个批量设置工具)
ThisWorkbook.VBProject.VBComponents("cls类模块名").Properties("Instancing") = 5
以下工具是针对Access的,Excel设置方法也是类似的
四、调用方法:
dim cTest as sysDevLib.clsTest
set cTest = New sysDevLib.clsTest
如果类名与引用工程的类名不重名的话,可以省略前面的 sysDevLib显式引用
如果不想修改类模块的属性,也可在模块中 先创建一个类模块的实例,把这个实例公开出去给引用者也可以。但不如上述方法自然和方便
五、注意事项:
在工具-引用添加我们做好的加载宏时,因为默认是只显示 tlb dll ocx这些,是看不到xlam加载宏,要将文件类型修改为所有才能看到(这个与Access中引用mde accde原理是一样的)
六、共用VBA代码库的优点:
1. 建立自己统一的通用代码库
2. 方便统一版本
3. 一处修改,多处同步。
其它:
vb6 可以使用生成Dll给其它工程调用,也可直接在代码引用一个公共目录下的bas cls文件来实现共用
C#
vb.net
可生成Dll 给其它工程甚至第三方开发工具甚至给Excel Access 调用,更加方便
如果您觉得这个方法对您有用,请帮忙点赞 收藏及关注我们 @小辣椒高效Office