我正在寻找一些提示如何解决将宏分发给我公司其他用户的问题。
我创建了一个特定的工作簿,其中包含各种类型的数据,如日期,字符串和数字。每个用户都必须管理相同类型的数据,因此我们将此工作簿用作模板。数据存储在我已应用条件格式和数据验证的列中,以防止用户插入错误的值。此工作簿包含几个具有特定名称的工作表。此工作表的名称显示在代码中 - 为每个工作表进行一些特定的计算(基于工作表的名称)。
问题在于,将来我有可能对代码进行一些更改,例如使我的宏更有效或实现一些必要的更改。
我通过互联网搜索以找到最佳解决方案,我认为最好是创建一个Excel加载项。但我对此有一些疑问。
这真的是最好的解决方案吗?有人可以给我一个提示,以更好的方式使它?
如果加载项是最好的,有没有办法只将它添加到特定的工作簿(这是我的模板)?
当有人打开特定工作簿(使用Workbook_Open)并在工作簿关闭时卸载(使用Workbook_BeforeClose)时,是否可以安装外接程序。我在网上寻找答案,但这个问题对我来说并不清楚。如果可以,它会影响关闭/打开工作簿的速度吗?
感谢您提供任何帮助/建议!
答案 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
添加文件路径检查以及可能的错误处理是个好主意。 至于你提出的其他一些问题:
可以使加载项仅出现在特定的工作簿上,但需要付出一些努力:
为加载项包含一个功能区,其中包含可见性回调。只要特定工作簿(模板)处于活动状态,就将其设置为可见。它仍将被加载到任何Excel实例的内存
- 醇>
您可以按照建议以编程方式添加加载项并在关闭时删除,选中this question以查看一些选项。
在关闭或打开时添加/删除加载项肯定会影响速度,但我不能说它是否会引人注目。