【问题标题】:XLAM / XLA Addins: is there a better way?XLAM / XLA Addins:有更好的方法吗?
【发布时间】: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 ?

【问题讨论】:

    标签: vba excel


    【解决方案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 加载项中然后在新工作簿上使用它来进行自己的测试。

      步骤:

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

      最好的,

      【讨论】:

        【解决方案4】:

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

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

        详细说明见我的回复here

        【讨论】:

          猜你喜欢
          • 2023-01-31
          • 2017-03-24
          • 1970-01-01
          • 2013-05-03
          • 2011-06-30
          • 1970-01-01
          • 2018-10-09
          • 1970-01-01
          相关资源
          最近更新 更多