有的时候,我们不希望别人看到我们的代码。
平时我都是放在"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分析等等)