学习使用VBA来处理Excel的问题,自然是为了简化工作。但是随着自己VBA使用的增多,代码分散在各个Excel文件中,非常的散乱。管理好自己的代码是提高代码复用率的关键,也能提高开发的效率。
数据与代码分离
Excel本身就是数据和代码混在一起的,这确实提供了极大的便利,但是随着VBA使用的深入,会逐渐发现这种便利最终也会带来许多的麻烦:
- 同一种功能的程序在多个Excel VBA中存在
- 修改了一处,却不能修改电脑中所有的差不多代码的地方
久而久之会发现代码实在太多、太混乱了。
为了把数据与代码分离,我个人一般这样管理自己的代码:
编译型的语言,像C语言之类的,一般都有一个官方的库,以及个人编写、收集的库,这些库是一些常用的功能代码,在编写一个具体任务的时候,会去引用(注意这里是引用而不是复制,这个是代码管理的关键,电脑中正常仅有一份库文件)这些库文件,再通过编译生成exe可执行文件。
- 库
使用加载宏来作为库进行代码管理:
一些功能性的东西,比如一些常用的类、函数等,在编写VBA代码过程中会经常使用到,但是本身不是一个完整的可以完成某个具体任务的,我会放在一个加载宏中,固定保存在电脑的某个位置。
然后在具体实现某个任务的时候,如果需要用到,使用工具-引用的方式去调用,具体可以看利用VBAProject来共用VBA代码里介绍的方法。
这样不但能提高效率,而且在使用过程中发现了问题的话,只要修改了加载宏中的代码,所有引用了这个加载宏的具体任务代码都能够完善。
- 可执行文件
VBA自然没有可执行文件这个概念,代码本身也是保存在一个Excel文件里。
个人还是使用加载宏来作为这么一个管理手段,一些经常要使用的功能,会写在一个加载宏中,一般再制作Ribbon菜单,保存在电脑的某个位置。
然后编制一个设置自动加载的加载宏,制作Ribbon菜单:
代码语言:javascript复制 <menu id="menuOpenMacroFile" label="打开宏文件 " size="large" imageMso="FileSaveAsExcelXlsxMacro">
<button id="1" label="1" onAction="1" imageMso="WordArtEditTextClassic" />
<button id="2" label="2" onAction="2" imageMso="ViewSlideSorterView" />
</menu>
…………
<button id="btnClose" label="关闭 " size="large" onAction="rbVBEClose" imageMso="PrintPreviewClose" />
制作一个下拉式菜单,将常用的一些功能分类制作加载宏,添加到下拉菜单下面,在真正需要用到时候,通过下拉菜单打开对应的加载宏,运行程序,使用完成后再关闭。
个人使用的是这么一个效果:
将常用的功能分类制作加载宏的目的主要是考虑到随着代码功能的增加,如果放在一个加载宏中,太多了容易混乱,分类管理就比较清晰。
至于到底要细到什么程度,还是得看自己实际工作情况,而且也不可能一步到位,因为随着自己水平的不断提高,想法也是会不断改变的。
但是如果能提前规划好一个方法,个人认为还是很有好处的。