将宏作为插件分发给其他用户

Distributing macro as an Add-In to other users

我正在寻找一些技巧来解决向我公司的其他用户分发宏的问题。

我创建了一个特定的工作簿,其中包含一堆各种类型的数据,例如日期、字符串和数字。每个用户都必须管理相同类型的数据,因此我们使用此工作簿作为模板。数据存储在我应用了条件格式和数据验证的列中,以防止用户插入错误的值。本工作簿包含几个具有特定名称的工作表。此工作表的名称出现在代码中 - 为每个工作表进行一些特定的计算(基于工作表的名称)。

问题是将来我可能想对代码进行一些更改,例如使我的宏更高效或实施一些必要的更改。

我在互联网上搜索了最佳解决方案,我认为最好的办法是为 Excel 创建一个加载项。但我对此有一些疑问。

  1. 这真的是最好的解决方案吗?有人可以给我一个提示,让我以更好的方式制作它吗?

  2. 如果插件是最好的,有没有办法只将它添加到特定的工作簿(这是我的模板)?

  3. 是否可以在有人打开特定工作簿时安装插件(使用 Workbook_Open)并在工作簿关闭时卸载它(使用 Workbook_BeforeClose)。我在网上找了答案,但是这件事我不是很清楚。如果这是可能的,它会影响 closing/opening 工作簿的速度吗?

感谢任何help/advice!

将加载项放入网络驱动器并将其标记为只读。使用本地副本进行更新。确保每次复制它时将其设置为只读,并确保人们 运行 离开网络驱动器。

通常,当人们安装插件时,他们对有关将其复制到本地驱动器的问题的回答是“是”,但这不是正确的答案。如果他们不小心点击了“是”,您将需要编辑他们的注册表以删除本地引用。

要通过共享驱动器和您自己的开发副本分发加载项,我强烈建议您阅读 following link。 它有安装过程的描述,包括 braX 在他的回答中提出的一个非常重要的观点 - 当被问及复制到个人加载项文件夹时回答 No

下面是我用来保存加载项的 link 中经过调整的代码。它进入加载项本身的普通模块。它将加载项保存在一个文件夹中,并将其属性设置为Read only,这样无论何时有人使用它都不会被锁定。此设置允许您随时通过 运行 此宏更新文件,而无需追踪用户并让他们关闭 Excel。

Private Sub Deploy()
Dim FolderOnSharedDrive as String
FolderOnSharedDrive = "Folder path to store add-in in here"
With ThisWorkbook
    On Error Resume Next
    SetAttr FolderOnSharedDrive  & .Name, vbNormal
    On Error GoTo 0
    .SaveCopyAs FolderOnSharedDrive  & .Name
    SetAttr FolderOnSharedDrive  & .Name, vbReadOnly
    MsgBox "Deploy Completed to " & FolderOnSharedDrive  & .Name
End With
End Sub

最好添加文件路径检查和一些错误处理。 关于您提出的其他一些问题:

  • 加载项可以包括不可见的工作表,您可以使用它们来存储设置、路径等。
  • 可以使加载项只出现在特定的工作簿上,但这需要一些努力:

    1. Include a ribbon for an add-in that includes callback for visibility. Set it to visible whenever specific workbook(template) is active. It will still be loaded to memory in any Excel instance

    2. You can programatically add add-ins on open and remove on close as you suggested, check this question to see some options.

  • Adding/removing 加载项关闭或打开肯定会影响速度,但我不能说是否会引起注意。