相关文章推荐
个性的小马驹  ·  Java ...·  6 月前    · 
道上混的上铺  ·  DataReader 类 ...·  7 月前    · 
阳刚的硬盘  ·  SMTP Send Adapter: ...·  1 年前    · 
慷慨大方的跑步鞋  ·  寻求 ...·  1 年前    · 
首发于 VBA

Excel VBA/Access VBA如何创建自己的通用代码开发库(VBA开发高阶)

平时使用Access VBA开发比较多,今天来分享一个Excel VBA的开发技巧

使用Access数据库或VB 或c#开发的程序员都知道,可以将一些常用的通用代码库做成dll或mde(accde) 给其它程序调用

例如我们2014开发的Access通用开发平台,就是将一些通用功能封装在一个devlib.mde文件中给main.mdb中引用。这样做好的通用开发库可以给多个程序共用。统一又高效。

上面 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

编辑于 2022-05-22 08:41

文章被以下专栏收录

    VBA

    Excel VBA ,Access VBA, Word PPT等Office VBA技巧