VBA:将主代码和程序分离,xlam和xlsm的结合

有的时候,我们不希望别人看到我们的代码。

平时我都是放在"personal.xlsb",但是可能有的时候,我们希望是放在公司内部网络上。

首先 ,我们需要在打开xlsm的时候自动加载xlam到“开发工具”>"Excel加载项"这个选项卡。
Private Sub Workbook_Open()
Run_AddIns                '没有按模块.过程名,也运行了
End Sub
步骤二、创建一个xlam文件:

2.1,新建一个文档

2.2,在代码编辑器中写(这里只是简单测试一下xlsm如何调用xlam):

Sub auto_open()      '不要写auto_open,在xlam中写这个不是很好用,或者不要打勾
'Sub test1()
Debug.Print "Start"
'Workbooks("工作簿1").ActiveSheet.Cells(1, 1) = "AAA"      '此处必须指定workbooks,否则它自以为是test1.xlam的cells(1,1)
'Workbooks("xlam.xlsm").ActiveSheet.Cells(1, 1) = "CCC"
MsgBox "SSSS", vbOKCancel
End Sub

Sub test()
'Workbooks("xlam.xlsm").ActiveSheet.Cells(2, 1) = "CCC"
Debug.Print "BBB"
End Sub

2.3,选择文件,保存为“加载宏(*.xlam)

路径如下(OneDrive其实也可以,到时候我可以共享这个xlam文件给用户):C:\Users\ta61042\OneDrive - Welbilt\Test2.xlam

步骤三、加载我们之前写的xlam到“开发工具”>"Excel加载项"这个选项卡中。
Sub Run_addins()
Dim addr As String
Dim str
Dim add_in As AddIn
addr = "C:\Users\ta61042\OneDrive - Welbilt\Test2.xlam"
For Each add_in In Application.AddIns
    If add_in.Title = "Test2" Then
        MsgBox "Test2 is already existing!"
        AddIns("Test2").Installed = False
        'Exit Sub
        'GoTo Allen
    Else
        AddIns.Add Filename:=addr
        'AddIns("Test1").Installed = True
    End If
Next
'Allen:
'Application.Run "'" & addr & "'!模块1.test"         'Passed:把M1改为模块1,不要强制去改test1.xlam的模块名字,好像会自动还原!
End Sub
'测试一:如果存在就告知“test2 is already existing!",不存在就加载到addins中(但是还没有打勾)
'测试一结果:Passed,在加载项中已经安装了,而且没有打勾,勾选test2,并“确认”会弹出“SSSS”
'测试二:如果打勾状态下关闭xlsm文件,下次打开文件是不是会直接运行test2.
'测试二结果:没有再弹出“SSSS",意味着没有运行
'最终决定:还是将“打勾+确认”这个机会给到手工来控制,在If add_in.Title = "Test2" Then下写上AddIns("Test1").Installed = false吧
'而且在xlsm退出的时候,也需要设置Installed = false

步骤四:退出时,我需要将Test2这个加载项的“勾”去掉:

我们在workbook_beforeClose事件中写入以下代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each add_in In Application.AddIns
    If add_in.Title = "Test2" Then
        AddIns("Test2").Installed = False
    End If
Next
End Sub

步骤五:最后我们需要做的就是在xlam中写我们各种工作需要代码:

1,运行一个UserForm,放置一些按钮,每个按钮赋予不同的功能

2,运行一个Ctrl+M控制的菜单,放置一些菜单

3,直接启动加载项,和2差不多,整个MRP的内容都可以放置在xlam中(这个就很多了,我写了近一周的代码)

4,单个功能(处理Forecast,ABC分类,库存周转率分析,呆滞分析,XYZ分析,Stock,BOM分解,WhereUsed,ECO分析等等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值