将宏作为加载项分发给其他用户

时间:2018-05-22 17:24:13

标签: vba excel-vba excel-addins excel

我正在寻找一些提示如何解决将宏分发给我公司其他用户的问题。

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

问题在于,将来我有可能对代码进行一些更改,例如使我的宏更有效或实现一些必要的更改。

我通过互联网搜索以找到最佳解决方案,我认为最好是创建一个Excel加载项。但我对此有一些疑问。

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

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

  3. 当有人打开特定工作簿(使用Workbook_Open)并在工作簿关闭时卸载(使用Workbook_BeforeClose)时,是否可以安装外接程序。我在网上寻找答案,但这个问题对我来说并不清楚。如果可以,它会影响关闭/打开工作簿的速度吗?

  4. 感谢您提供任何帮助/建议!

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

以下是我用来保存加载项的链接中的调整后代码。它进入加载项本身的正常模块。它会将加载项保存到文件夹并将其属性设置为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. 为加载项包含一个功能区,其中包含可见性回调。只要特定工作簿(模板)处于活动状态,就将其设置为可见。它仍将被加载到任何Excel实例的内存

    2.   
    3. 您可以按照建议以编程方式添加加载项并在关闭时删除,选中this question以查看一些选项。

    4.   
  • 在关闭或打开时添加/删除加载项肯定会影响速度,但我不能说它是否会引人注目。