我已经编写了一个 vba 模块,该模块将插件按钮安装到 excel 中。我想尽可能容易地将它部署在多台计算机上。目前,这些是我的步骤。
- 将 Excel 保存为 *.xlsm
- 在我要安装的计算机上打开文档
- 将文档另存为扩展名 (*.xlam),将其放置在插件文件夹中
- 转到选项>加载项>管理/Go>
- 单击我的插件的复选框
有没有办法自动化这个过程?用vb写东西?
您可以使用 Advanced Installer(免费版)等工具构建 exe 或 msi 安装程序。您可以做的一件事是将文件复制到特定位置,如果您将其放在 XLSTART 文件夹中,则该加载项将在启动 Excel 时自动为用户加载。Excel 程序文件目录中有一个免费的文件夹,通常是这样的
C:\Program Files (x86)\Microsoft Office\Office15\XLSTART
如果您将 xlam 文件放入该文件夹,它们也会默认加载。用户特定选项是
C:\Users[用户名]\AppData\Roaming\Microsoft\Excel\XLSTART
两种型号都有优点/缺点。一种是所有用户都可以访问,或者只有安装的用户。用户特定选项的好处是它需要有限的安装权限(没有管理员权限)
正如其他人所说,您可以轻松地将文件复制到每个用户应用程序目录中所需的文件夹中。然后,他们需要选中加载项菜单中的框,但至少文件会在那里。我通过将加载项和 .bat 文件放在每个人都可以访问的共享驱动器上,在工作中取得了一些成功。然后,您只需提供一个指向 .bat 文件的链接,该文件会将文件从共享驱动器复制到该人的应用程序目录中的计算机。这是我使用的示例 .bat:
xcopy "\\server\share\folder\Addins\CRWScleanup.xlam" "%APPDATA%\Microsoft\AddIns\" /y
最初我设置了 .bat 文件来检测和处理 Win7 和 WinXP,因为我们有混合工作,但后来我意识到 %APPDATA% 之后的文件夹位置(这导致 XP 与 Win7 的位置不同)是相同的对于每个版本的 Windows。即 \Microsoft\AddIns\ %APPDATA% 是一个全局 Windows 变量,它的值会因每个用户而异(这很好)。
一旦安装了加载项,它就可以很好地工作,因为要更新它,我所要做的就是将新版本放在共享驱动器上,并让用户在 Excel 关闭时单击指向 .bat 的链接。新版本被复制过来,用户不需要做任何事情。
使用 VBA,您必须依赖 Office 文件(在本例中为 Excel 文件),并且无法移动到可执行文件/安装包。您可以创建一个程序(或宏)以自动方式执行您想要的步骤。但是,如果您想要依赖于用户可能执行的标准安装包(像往常一样,在安装程序时),您将不得不迁移到 VB.NET。
VB.NET 和 VBA 并没有太大的不同(嗯......实际上,VB.NET 包含更多的东西,但“理解”大部分 VBA 代码)而且 VB.NET 对程序员非常友好;所以从 VBA 到 VB.NET 的转换不会花费你太长时间。在 VB.NET 中,您有不同的方式与 Excel 交互;根据您的问题,我知道您需要插件替代方案:它会生成一个自定义的“安装包”,一旦单击,它将在目标计算机中安装给定的 Excel 插件。依靠此选项很容易:在您的 Visual Studio(您需要一个 VS 才能使用 VB.NET)中,打开“新建项目”,然后在 Visual Basic 模板中,选择 Office(您的版本)和 Excel 插件。
注意:有用的链接提供了我的 Mehow:它指的是旧的 VS(2008),但从那时起事情并没有太大变化。
注 2:上述建议适用于自 2008 年以来的任何收费 VS 版本。不确定免费版本(Express 版本)的支持。
我研究了上述和其他网站上描述的很多方法,但设法使用 Excel 加载项 (*.xlam) 自己创建了自己的安装和卸载。我的加载项现在第一次安装自己,我也有一个卸载脚本。奇迹般有效。
我使用了我自己的 Ivan 解决方案的变体和推导:https ://grishagin.com/vba/2017/01/11/automatic-excel-addin-installation.html
最简单的方法是xlsm
在打开的文件中添加一些安装代码。
然后,此代码可以执行以下操作:
xlam
加载项文件夹;xlsm
文件。然后,您需要做的就是通过电子邮件将xlsm
文件发送出去并要求人们打开它。
代码很简单,但如果你需要,我可以展示。
Sub SaveAsAddIn()
'Alt+F8 SaveAsAddIn Run
Dim sName As String
Dim sFilename As String
Dim o As Object
On Error GoTo Finally
Try:
With Application.ThisWorkbook
sName = Split(.Name, ".")(0) 'name of ThisWorkbook without extension
sFilename = Application.UserLibraryPath & sName & ".xlam"
.Save
.Worksheets.Add After:=.Worksheets(.Worksheets.Count) 'add a blank sheet at the end
On Error Resume Next
Application.AddIns(sName).Installed = False 'uninstall the previous version of the AddIn
SetAttr sFilename, vbNormal
Kill sFilename
Application.DisplayAlerts = False
For Each o In .Sheets 'delete all sheets except the last one
o.Delete
Next
.SaveAs Filename:=sFilename, FileFormat:=xlOpenXMLAddIn 'save ThisWorkbook as AddIn
Application.AddIns(sName).Installed = True 'install ThisWorkbook as AddIn
.Close
Application.DisplayAlerts = True
End With
Finally:
End Sub