- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名 C# 开发人员,正在将同事的 VBA Excel 加载项(.xlam 文件)与我的 msi 安装程序(如果重要的话,使用 VS 部署项目构建)捆绑在一起。 .xlam 放置在应用程序文件夹 (C:\Program Files (x86)\MyCompany\TheProduct) 目录中。用户被迫导航到 Excel 选项 > 加载项 > 管理 Excel 加载项转到... > 浏览,然后被迫导航到上面列出的安装目录。浏览屏幕默认目录是%APPDATA%\Microsoft\AddIns。
有没有办法让我无需点击即可自动启用此 VBA 插件?
提前致谢,
弗兰克
最佳答案
我创建了一个自动安装过程,将其添加到 XLAM 文件的“此工作簿”部分,以便在文件打开时自动运行。为了区分安装文件和已安装文件,安装版本命名为“.install.xlam”,安装版本命名为“.xlam”。 (否则Excel会出现“抱歉,Excel无法同时打开两个同名工作簿。”
程序:– 使用 .install.xlam 重命名您的 XLAM 文件– 打开它并在 Visual Basic 编辑器 (VBE) 中进行编辑– 将以下过程添加到 VBE 中的“此工作簿”部分– 保存您的文件
为了共享/安装您的 XLAM,您现在只需要求用户双击 XLAM 文件,根据需要启用宏并接受安装加载项。
如果您想稍后更新 XLAM,只需双击它,根据需要启用宏并拒绝安装即可。然后编辑并保存更改。
以下是添加到“ThisWorkbook”的代码:
Option Explicit
' (c) Willy Roche (willy.roche(at)centraliens.net)
' Install procedure of XLAM (library of functions)
' This procedure will install a file name .install.xlam in the proper excel directory
' The install package will be name
' During install you may be prompt to enable macros (accept it)
' You can accept to install or refuse (which let you modify the XLAM file macros or install procedure
' Set it to True to be able to Debug install mechanism
Const bVerboseMessages = False
' Will be use to verify if the procedure has already been run
Dim bAlreadyRun As Boolean
Private Sub Workbook_Open()
' This sub will automatically start when xlam file is opened (both install version and installed version)
Dim oAddIn As Object, oXLApp As Object, oWorkbook As Workbook
Dim i As Integer
Dim iAddIn As Integer
Dim bAlreadyInstalled As Boolean
Dim sAddInName As String, sAddInFileName As String, sCurrentPath As String, sStandardPath As String
sCurrentPath = Me.Path & "\"
sStandardPath = Application.UserLibraryPath ' Should be Environ("AppData") & "\Microsoft\AddIns"
DebugBox ("Called from:'" & sCurrentPath & "'")
If InStr(1, Me.Name, ".install.xlam", vbTextCompare) Then
' This is an install version, so let’s pick the proper AddIn name
sAddInName = Left(Me.Name, InStr(1, Me.Name, ".install.xlam", vbTextCompare) - 1)
sAddInFileName = sAddInName & ".xlam"
' Avoid the re-entry of script after activating the addin
If Not (bAlreadyRun) Then
DebugBox ("Called from:'" & sCurrentPath & "' bAlreadyRun = false")
bAlreadyRun = True ' Ensure we won’t install it multiple times (because Excel reopen files after an XLAM installation)
If MsgBox("Do you want to install/overwrite '" & sAddInName & "' AddIn ?", vbYesNo) = vbYes Then
' Create a workbook otherwise, we get into troubles as Application.AddIns may not exist
Set oXLApp = Application
Set oWorkbook = oXLApp.Workbooks.Add
' Test if AddIn already installed
For i = 1 To Me.Application.AddIns.Count
If Me.Application.AddIns.Item(i).FullName = sStandardPath & sAddInFileName Then
bAlreadyInstalled = True
iAddIn = i
End If
Next i
If bAlreadyInstalled Then
' Already installed
DebugBox ("Called from:'" & sCurrentPath & "' Already installed")
If Me.Application.AddIns.Item(iAddIn).Installed Then
' Deactivate the add-in to be able to overwrite the file
Me.Application.AddIns.Item(iAddIn).Installed = False
Me.SaveCopyAs sStandardPath & sAddInFileName
Me.Application.AddIns.Item(iAddIn).Installed = True
MsgBox ("'" & sAddInName & "' AddIn Overwritten")
Else
Me.SaveCopyAs sStandardPath & sAddInFileName
Me.Application.AddIns.Item(iAddIn).Installed = True
MsgBox ("'" & sAddInName & "' AddIn Overwritten & Reactivated")
End If
Else
' Not yet installed
DebugBox ("Called from:'" & sCurrentPath & "' Not installed")
Me.SaveCopyAs sStandardPath & sAddInFileName
Set oAddIn = oXLApp.AddIns.Add(sStandardPath & sAddInFileName, True)
oAddIn.Installed = True
MsgBox ("'" & sAddInName & "' AddIn Installed and Activated")
End If
oWorkbook.Close (False) ' Close the workbook opened by the install script
oXLApp.Quit ' Close the app opened by the install script
Set oWorkbook = Nothing ' Free memory
Set oXLApp = Nothing ' Free memory
Me.Close (False)
End If
Else
DebugBox ("Called from:'" & sCurrentPath & "' Already Run")
' Already run, so nothing to do
End If
Else
DebugBox ("Called from:'" & sCurrentPath & "' in place")
' Already in right place, so nothing to do
End If
End Sub
Sub DebugBox(sText As String)
If bVerboseMessages Then MsgBox (sText)
End Sub
关于excel - 如何使用 msi 安装程序部署 VBA Excel 加载项 (foo.xlam)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308744/
我需要某种方法来更新我的员工之间共享的 Excel 插件,这样每个人都不必手动下载和安装它。 我用谷歌搜索发现我们可以将文件写入操作系统文件系统,因此任务最终会写入新版本的插件(即 .xlam 文件)
我已经为用户需求创建了 XLAM 插件功能区。现在我需要为错误修复目的创建更新过程。 是否可以即时更改 XLAM 文件? 最佳答案 是的,这是非常可行的。两种演示方法: 手动方式 确保将生产中的加载项
我正在构建一个插件来处理一个非常烦人的外部提供的文件。打开该文件时,它会做很多烦人的事情,将功能区隐藏在其中。我想阻止这种行为。是的,可以通过其他方式做到这一点,但我希望将其集成到插件中 - 与工作表
目前我的办公室正在使用我的团队创建的 Excel 来管理某种订单。这个文件有很多由一些热键和几个用户表单控制的功能。每隔几个月,当我们想要添加一些新功能或修复一些错误时,每个用户都需要下载更新的文件。
我在 PC 上的 Excel 2010 中创建了一个程序,该程序依赖于 Excel 的内置求解器。我确保它适用于 PC 版 Excel 2010 和 Excel 2013。然后我尝试在 Excel 2
我正在尝试创建一个 XLAM,每次我进行修订时都可以分发它,这将打开一个 MsgBox在第一次运行时,但以后再也不会。我不希望最终用户必须保存或任何东西,因为我的最终用户倾向于打开 Excel 纯粹是
打开几个编写宏/代码的示例,我突然被一个似乎安全的代码卡住了。求解器 (SOLVER.XLAM) 这是值得注意的,我想从我的系统中删除它。我想这不是一个相关的代码。谁能告诉我我应该怎么做?我已经安装了
我在 XLAM 文件中有一些 UDF。当 XLAM 作为插件安装时,Intellisense 似乎不会获取这些 UDF。 UDF 本身在 Excel 中运行良好,只是它们没有出现在智能感知中。在这里,
Sub Install_Addin() Dim AI as excel.addin Set AI = Application.Addins.Add("C:\Add_In.xlam")
有人可以解释一下 xla Excel 插件格式和 xlam Excel 插件格式之间的区别吗?谷歌搜索没有提供任何有用的信息。 最佳答案 m 代表启用宏,这是新格式(从 Excel 2007 开始)。
这篇文章是关于在不创建链接的情况下安装 XLAM 的。 (每个人都讨厌链接)。考虑一下这个简单的插件: Public Function UDF_HELLO(x) UDF_HEL
我在 Excel 中创建了一个 VBA 项目,并且在所述项目中是一个将代码写入另一个模块的模块。我最终对项目进行了密码保护,以隐藏代码(没有立即意识到这会带来一些非常明显的问题)。 当用户与文件交互时
我已经制作了几个基于单元格值通过右键单击菜单按钮运行的宏。通常,如果我右键单击值为“XYZ”的单元格,菜单按钮将显示为“为 XYZ 运行宏”,然后执行一系列操作:显示几个用户表单、运行 SQL 查询、
重现: 启动 Excel 并打开 VBE ALT+F11。 找到工具并点击引用。 向下滚动直到找到Microsoft Scripting Runtime并勾选它。 将文件另存为 Addin.xlam
这是一个奇怪的挠头! 我有一个用 VBA 编写的跨 MSO 插件,它使用相同的 XML 定义、功能区控件和 VBA 回调过程。它适用于 PowerPoint 2007、2010 和 2013(x32
我创建了一个简单的 Excel 加载项来演示以下问题:当项目保存并自动加载为 .xlam 时,功能区 onLoad 事件不会触发,但在作为 .xlsm 打开时却可以工作。我已经检查过 Excel 20
我是一名 C# 开发人员,正在将同事的 VBA Excel 加载项(.xlam 文件)与我的 msi 安装程序(如果重要的话,使用 VS 部署项目构建)捆绑在一起。 .xlam 放置在应用程序文件夹
编写快速功能以帮助我的同事。使用工具->其他控件-> Microsoft Listview中的ListView对象。 当我将文件导出为加密的加载项即.Xlam文件时。我收到以下错误 Compile e
我们可以创建一个带有自定义函数 (UDF) 的 .XLAM 插件。一旦我们将 Excel 连接到插件,就可以从另一个工作簿调用这些 UDF,而不管插件保存在何处(甚至在 Personal Macros
我是一名优秀的程序员,十分优秀!