ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA代码管理、共用——VBAProject

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-14 09:42 | 显示全部楼层 |阅读模式
本帖最后由 648555205 于 2020-3-14 09:55 编辑

不知道大家一直是怎么管理自己的VBA代码的,个人一直基本上是导出、导入、复制的方式。最近发现VBAProject用来共用代码觉得比较方便,不知道大家是否有更好的方法。

随着VBA使用的增多,必然会积累一些常用的代码,甚至在网上也会找到一些功能强大的类。每次使用也都是复制到某个文件里使用,这些代码在自己电脑里就存在许多个副本。使用过程中难免会发现一些问题,对代码进行一些小的修改,一些类也可能增加一些实用的方法、函数。但是修改了其中一个副本,电脑里其他使用了的文件没法一同更改。久而久之,各个副本中就会存在不同时间里修改过的代码,想把他们放一起会发现变得非常困难。
自己有时候就希望如果VBA能像C语言那样有#include <xx>这种方式就好了,所有程序都引用的是同一个文件里的代码,只需修改一处即可。
后来发现其实利用工具-引用 VBAProject也能达到类似效果,缺点是想把做好的程序文件发给别人时不大方便。使用方法比较简单:
  • 创建1个加载宏,修改VBAProject属性里的工程名称,以保证是唯一的,如vbapTest。使用加载宏的目的只是为了不在前台显示出文件。
  • 将一些常用的代码保存在这个加载宏中,需要对外公开的用Public修饰,也可以省略修饰。
  • 在需要使用这些代码的文件里,添加工具-引用,浏览找到加载宏,注意选择文件类型(默认是olb,tlb,dll,这样看不到xla和xlam,选所有文件或者Mircosoft Excel Files)。
  • 这样只要在需要使用代码的地方,加上vbapTest.就可以调用函数或者方法了。
类的使用
用上述方法在碰到类的时候,会发现根本无法定义、创建类,类的使用方法需要再做1点工作,有3种方法:
1. 用自定义数据类型封装一下
在vbapTest里增加1个自定义的类型和一个函数:
  1. Type Test
  2.         c As CTest
  3.     End Type
  4.    
  5.     Function NewCTest() As CTest
  6.         Set NewCTest = New CTest
  7.     End Function</code></pre>
复制代码

在使用代码的文件声明变量a为vbapTest.Test,并创建类
   
  1. set a.c = vbapTest.NewCTest()
复制代码

然后就可以像使用同1个文件的类一样使用了。
2. 设置类属性Instancing
类模块有1个叫做Instancing的属性,默认是1-Private,还有1个是2-PublicNotCreatable(字面理解:公开但是不能被创建),设置为2后,在其他文件中可以声明,但不能创建,使用方法:
   
  1. dim a as vbapTest.CTest
  2. set a = vbapTest.NewCTest()
复制代码

3. 强制设置类属性Instancing为5-MultiUse:
  1. ThisWorkbook.VBProject.VBComponents("CTest").Properties("Instancing") = 5
复制代码

这种方法设置过后,其他文件就完全像是使用同1个文件的类了。
  1. Dim c As vbapSpace.CTest
  2. Set c = New vbapSpace.CTest
复制代码

这是在网上看到的,至于为什么故意不公开这个属性5,是不是会出现什么问题,目前不知道。

这样每次打开文件,被引用的加载宏也会随着一同打开,无论在哪个文件使用过程中,发现需要修改的地方就都是需改这个加载宏里的代码。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-4-6 20:27 | 显示全部楼层
VBA如何学习起来更快。求解。

TA的精华主题

TA的得分主题

发表于 2020-4-6 21:41 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-4-9 20:28 | 显示全部楼层
高度保密 发表于 2020-4-6 21:41
这样感觉好像有点类似于VB封装了代码一样?

VB封装一般是做成dll,这种只是把代码放在了一个加载宏中,利用工具-引用的方式应用加载宏文件,代码仍然是透明的,修改也方便

TA的精华主题

TA的得分主题

发表于 2020-4-9 21:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 09:31 , Processed in 0.029954 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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