手把手教你做Excel VBA系统:VBA能否“脱离”Excel运行?
- 2026-11-02 05:37:32
手把手教你做Excel VBA系统:VBA能否“脱离”Excel运行?猜您喜欢 往期精选▼ 很多人问过这样一个问题:Excel VBA开发的东西总觉得有点low,但自己不是科班开发人员,不会用其它开发语言,所以就想还继续使用VBA,但是希望开发出来展示于人的是独立的应用程序,即不依赖于Excel,就自欺欺人地觉得自己开发 的东西高大上了起来
。 二、核心逻辑 很简单,核心逻辑就是隐藏宿主。 但宿主的隐藏需要一些技巧,因为Excel作为办公人员的高频应用,需要明确什么时候该隐藏什么时候该显示,且互不干扰。 这里就用到了一个Excel.application的概念,即Excel实例。 众所周知,当新建一个Excel文档时,文档名一般默认为工作薄1,再创建一个就是工作薄2、工作簿3,这在形式上是三个文档,实际上却是用同一个实例创建的,这通过任务管理器中的进程可以很明确地看出来如下图: 
其实VBA工程的宿主是Excel实例,而不是Excel文档,虽然大多数时候好像每编写一个VBA小工具都会伴随着Excel文档,这恰恰误导了开发者。 比较典型的例子是加载宏,可以在完全不用创建工作簿的情况下开发加载宏,这是vba的宿主为Excel实例的最好证明。 那么问题就来了,如果把VBA程序的宿主给隐藏,那么该实例下工作簿是否也不可见了呢?答案是肯定的。 所以,核心工作是将日常工作用的Excel实例与VBA工程需要隐藏的实例隔离,做到互不干扰。 当打开一个excel文档的时候,默认会通过已经运行的实例去打开,如果没有则会创建一个新实例,也就是说,无论是先打开的VBA工程,还是先打开的工作文档,双方都会位于同一实例下,这与实例隔离的目标相悖,这需要一个可运行宏的xlsm(假如命名为main.xlsm)文件做中转。 解决方案是通过已有实例打开main.xlsm,通过中转文件创建一个新的隐藏实例,通过该实例打开VBA主程序,同时关闭main.xlsm,这样就变相地将已经运行的实例和需要隐藏的宿主实例进行了隔离。 综上:已经运行的实例➡️打开main.xlsm➡️创建新实例➡️打开VBA主程序submain.xls,➡️关闭main.xlsm 通过上述过程,已经运行的实例1️⃣和VBA主程序的宿主实例2️⃣将各自互相独立的完成各自的工作。如下图, 
三、实现方法 main.xlsm: 

submaim.xlsm: 
四、效果演示 五、写在最后 留个作业:可以看到,例子中的程序虽然独立运行了,但是任务栏的图标还是和Excel共用,思考一下,能否自定义一下独立运行程序的图标? 还是那句老话:无论设计得多完美的系统、思考得多周到的设计,都会有不足之处。 当你通过这样一个简易的系统把前中后端打通,那么你就是一个真正的系统开发者而不是表格制作者了。 猜您喜欢 往期精选▼ 


立即添加星标

每天学好教程
前文以报税记账系统为例,详细介绍基于Excel + vba+mysql的系统搭建和开发方法以及权限控制的实现逻辑、新增模块的集成和实现方法以及将加载宏打包成exe安装包的方法,本文介绍是VBA程序“脱离”Excel运行的核心逻辑和方法
注意:“脱离”加引号其实已经给出了答案,准确的说是可以在形式上脱离,但不能做到真正脱离。
一、背景
。博主按:
其实,真正懂得VBA价值的开发者是不会徒劳地去做这些毫无意义的事情的,因为任何系统都有其局限性,正如网站必须用浏览器访问,关系型数据库支持不了非关系型数据一样,VBA的价值正是通过诸如Excel这样的宿主来体现出来的,那有何必掩耳盗铃呢!
不过,在形式上“脱离”是完全可以做到的,本文手把手来教你。





VBA工具合集,复杂工作一键搞定,让同事目瞪口呆的Excel自动化




长按
关注
立即添加星标

每天学好教程
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。