【问题标题】:Distributing macro as an Add-In to other users将宏作为加载项分发给其他用户
【发布时间】:2018-05-22 17:24:12
【问题描述】:

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

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

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

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

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

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

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

感谢任何帮助/建议!

【问题讨论】:

  • 为什么不在共享驱动器或共享点(如果有)上托管包含所有这些逻辑和 VBA 的工作簿。然后您可以更新逻辑并将其保存回那里,并且打开它的人都有最新版本。您可以创建一个加载项,并且该加载项可以做您想做的事情……但这听起来像是一条痛苦的道路。你最终会在同一条船上......你如何更新别人电脑上的插件?
  • 将加载项放在网络驱动器上并将其标记为只读。使用本地副本进行更新。确保每次复制时都将其设置为只读,并确保人们正在使用网络驱动器。通常,当人们安装插件时,他们对将其复制到本地驱动器的问题回答“是”,这不是正确的答案。
  • @braX - 将此作为答案,这样我就可以投票了

标签: vba excel excel-addins


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    对于通过共享驱动器和您自己的开发副本分发加载项,我强烈建议阅读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. 您可以按照您的建议以编程方式在打开时添加加载项并在关闭时删除,检查this question 以查看一些选项。

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

    【讨论】:

    • 我有一个关于工作簿本地副本和共享驱动器上的副本的名称的问题。他们的名字不应该彼此不同吗?当我尝试打开本地副本时,我收到一条消息,指出同名文件已经打开 - 该文件是一个插件(它需要安装在我的驱动器上)。我在这里做错了吗?
    • @tomek198823 当然,如果您打算同时打开两个版本,您当然可以更改加载项的名称(f.esk .Name & " - production"。我通常切勿同时打开两者以避免混淆
    • @tomek198823 不要通过双击打开 XLAM。切勿打开网络驱动器上的副本。它仅供其他人使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2014-02-16
    • 2015-09-23
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多