Excel Add-in 指使用 VBA 编写并且保存在 xlam 文件中的加载项(也经常被称作加载宏)。将 VBA 代码分散在各个 Excel 文件中不利于代码的管理,微软新的加载项编写技术 Web Add-in 也希望代码的部署由分散到集中。用 VBA 编写的代码,如果存放在独立的 Excel Add-in 文件中,一定程度上也是集中管理的方法。
那么,放在 xlam 的代码,其他的工作薄在 VBA 中如何调用其中的代码呢?本文做一个简单的说明。
新建一个工作簿,另存为 xlam
(Excel 加载宏) 格式。Excel 对于加载宏,会默认一个存储位置,您可以手工改变存储的位置。保存在默认位置的加载宏,在 Excel Ribbon 菜单项的 开发者工具 -> 加载项 将自动出现;不在默认位置的加载宏,需要通过浏览按钮来选择。
打开 StoneUtils.xlam,在打开状态下,没有工作表,所以界面看起来是空的。通过快捷键 Alt + F11 进入 VBE 环境,插入一个模块,将模块命名为 TestModule
。在 TestModule
中编写如下代码:
Public Function About() As String
About = "Developed by Stone " & VBA.vbCrLf & " Version 1.0, 2018"
End Function
显示一条信息。
关闭加载项文件,另外打开一个 Excel 工作簿。通过 开发者工具 -> 加载项,选中 StoneUtils
加载宏:
进入 VBE 环境,我们可以看到,在左边的工程文件夹中,打开的工作表和 StoneUtils
的工程都叫 VBAProject
,这可不好区分,我们需要将 StoneUtils
的 VBA Project 改一个名字。
接下来在 VBE 中添加对 StoneUtils
的引用:
然后在工作簿1中编写测试子例程如下:
Public Sub test_about_info()
Dim info As String
info = StoneUtils.TestModule.About()
Debug.Print info
End Sub
运行,在立即窗口中打印出如下信息:
第二种方法,使用 Application.run()
:
Public Sub test_about_info_method2()
Dim info As String
Dim addinPath As String
addinPath = Application.UserLibraryPath
info = Application.Run("'" & addinPath & "StoneUtils.xlam'!About")
Debug.Print info
End Sub
注意,工作簿文件需要用单引号包围(定界符)。第二种方法不局限于 xlam
文件,普通的 xlsm
文件也可以。