XLAM / XLA Addins:有更好的方法吗?

Posted

技术标签:

【中文标题】XLAM / XLA Addins:有更好的方法吗?【英文标题】:XLAM / XLA Addins: is there a better way? 【发布时间】:2011-04-19 20:05:31 【问题描述】:

这篇文章是关于在不创建链接的情况下安装 XLAM。 (每个人都讨厌链接)。考虑微不足道的插件:

    Public Function UDF_HELLO(x)
        UDF_HELLO = "Hello " & x
    End Function

将此代码和其他任何内容都放入模块中并在桌面上保存为“Hello.xlam”(而不是在默认的 excel 插件文件夹中)。接下来,当 HELLO.XLAM 仍然打开时,使用公式创建一个新的 XLSX 工作簿

      =UDF_Hello("world")

在单元格 A1 中,它只是在该单元格中显示“Hello world”。保存工作簿并退出 Excel。现在,如果您在没有 XLAM 的情况下重新打开工作簿,Excel 将抱怨“指向其他来源的链接......”。无论您单击“更新”还是“不更新”,Excel 都会像这样破坏单元格 A1 中的公式:

    ='C:\Documents and Settings\tpascale\Desktop\Hello.xlam'!UDF_Hello("world")

这种“强制链接”通常是不可取的。在我的计算环境中,有很多临时分析,在我们为解决当前问题而组合在一起的每个 XLAM 上强加安装方案是没有意义的。我只想将 XLAM 文件分发给用户,让这些用户在需要时打开它们,而不必担心最轻微的错误步骤会导致他们的公式被破坏。

问题:

有没有办法指示 Excel 永远不要为 UDF 构建外部链接,如果 UDF 已加载,则只需使用它们,否则返回 #VALUEs ?

【问题讨论】:

【参考方案1】:

我不知道如何使用 .xla/.xlam 插件解决此问题。

但 .xll 插件不会出现此问题。 这些可以使用 Excel 2010 SDK 在 C 中创建,或者使用免费的 Excel-DNA 库在 VB.NET 或 C# 等托管语言中创建。

(免责声明:我是 Excel-DNA 的开发人员。这个问题是我使用 .xll 接口制作托管 UDF 加载项的原因之一。)

【讨论】:

我知道如何在 VB.Net 或 C# 中使 COM 可见函数。这些可以从 VBA 调用,但不能从公式栏中调用。从公式栏中获取它们的最简单方法是什么?是你的 Excel-DNA 还是别的什么? Visual Studio 在生成所有 COM 互操作的东西方面做得很好——但据我所知,它不会为你生成任何东西。 excel插件。 据说,使 .NET 函数可作为 Excel 的 UDF 使用的最简单(也是唯一受 MS 支持的)方法是创建一个自动化加载项:codeproject.com/KB/COM/excelnetauto.aspx。但是自动化插件很慢,需要在机器上注册,并且对添加功能描述、类别等的支持有限。Excel-DNA 解决了所有这些问题,只留下一个不需要安装的 .xll 用户可以只需点击打开。如果您已经安装了 Visual Studio 并且知道属性是什么,您会发现 Excel-DNA 易于使用并且可以正常工作。 好的,非常感谢 - 我将尝试 Excel DNA。我快速浏览了您的“Excel DNA Hello World Function”——非常好。理想情况下,我只需将 VBA 代码包装在您的 DNA XML 中,没有 IDE - 非常简单 - 除了我的 UDF 依赖于 VBA 类。那些也可以用这种非常轻量级的方式包裹起来吗?如果是,那太好了,如果不是,我可能会硬着头皮用 DNA 转换为 .NET。 您的 VBA 类必须移植到 VB.NET。它们可以在运行时从 .dna 文件编译或预编译成 .dll 并使用您的函数从 .dna 文件中引用。【参考方案2】:

您可以让他们打开 .xla 文件并让 Auto_Open 程序安装插件。

http://www.vbaexpress.com/kb/getarticle.php?kb_id=693

excel 关闭后,您可以自行卸载加载项。

oAddIn.Installed = False

您可以通过使用名为 something 的工作表然后将单元格 A1 设置为 true 或 false,为用户在每次使用后不卸载加载项设置。

我没有对此进行测试,但希望它对你有用。

【讨论】:

【参考方案3】:

这应该可以解决您的问题,尽管它不会指示 Excel 关于外部链接。我通过创建 XLAM、将其保存到我的桌面、将其安装到 Excel 加载项中然后在新工作簿上使用它来进行自己的测试。

步骤:

    保存加载项后,将其关闭。 转到 Excel 选项-->加载项 在“管理”下拉菜单中选择 Excel 加载项,然后按“开始” 在出现的“加载项”对话框中单击“浏览”并导航到 您刚刚创建的加载项。选择它并点击“确定” 如果提示将加载项保存在加载项文件夹中,请选择“否”。 如果加载项文件后缀不正确,则选择“是”可能会导致错误 与正在使用的 Excel 版本不匹配。 您的加载项应出现在“可用加载项”滚动框中, 选中它的框并点击“确定” 您的加载项现在应该在您打开 Excel 时处于活动状态。 通过打开一个新工作簿进行测试并尝试使用您的 UDF。

最好的,

【讨论】:

【参考方案4】:

我通常通过以下方式解决这个问题:

    保存 XLA/XLAM 文件(当然是在个人文件夹之外) 在工具 - 插件中连接到它 在您当前的 Excel 文件中编写伪宏,以链接到 XLA/XLAM 文件中的这些宏/函数。

详细说明见我的回复here。

【讨论】:

以上是关于XLAM / XLA Addins:有更好的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

重置 Excel VBA 密码 [重复]

VBA Excel UDF保留原始值

如何只安装 XLA?

如何使 XLAM UDF 调用可移植?

从 Personal.xlam 工作簿调用函数

尽管已安装证书,但签名的 Excel VBA 插件 (*.xlam) 无法正常运行