【问题标题】:Excel Automation Addin - functions not workingExcel 自动化插件 - 功能不起作用
【发布时间】:2015-02-09 19:09:54
【问题描述】:

编辑:我想做的真正解决方案可以在这篇帖子here 上找到。我只是想将一些已编译的函数公开给 Excel。事实证明,使用 Excel DNA nuget 包非常容易。您只需添加一个类库,添加 nuget 包,然后复制粘贴自述文件中的代码。单击 F5,它会启动已加载加载项的 excel。如果您希望您的功能被持久化,您只需通过“开发人员”功能区部分手动将加载项添加到 excel 文件中。

原帖: 我按照this microsoft 发布的关于如何创建自动化加载项的说明进行操作。代码编译得很好,我可以从 Excel 中访问这些函数。但是这些功能不起作用。当我尝试将函数调用的结果分配给单元格时,我几乎总是得到 #value 或 #ref 错误。具体来说:

Microsoft 提供的以下功能不起作用。它在我尝试使用它的单元格中显示#value 错误。我使用鼠标选择随机单元格范围作为函数的参数。

    Public Function NumberOfCells(ByVal range As Object) As Double
    Dim r As Excel.Range = TryCast(range, Excel.Range)
    Return CDbl(r.get_Cells.get_Count)
End Function

我创建的以下函数不起作用。我收到#ref 错误。我通过直接传递整数 ( Add1(1,2) ) 或包含数字的单元格来调用它。

    Public Function Add1(ByVal i1 As Integer, ByVal i2 As Integer) As Integer
    return i1+i2
End Function

我创建的以下函数有效(?!?):

    Public Function Add1(ByVal i1 As Integer, ByVal i2 As Integer) As Integer
    return 222
End Function

我在 c# 方面非常有经验,但在 vb.net 方面完全没有,但是对于这个插件,我需要使用 vb.net。我怀疑这里缺少一些简单的东西,但我不知道它是什么。微软提供的代码不起作用也很奇怪。

编辑:我还复制粘贴了 here 提供的函数,我在 excel 中得到了相同的 #Value 错误。我从一开始就没有按照这篇文章中的教程进行操作,但我会在白天进行。

编辑 2:我发现每当您在函数名称中添加数字时,Microsoft 的代码由于某种原因无法正常工作。如果我将上面示例代码中的 Add1 重命名为 Addqweqew,它将起作用!

【问题讨论】:

  • 当您说“不起作用”时,您针对每种情况具体遇到了什么错误?您使用什么数据来测试这些功能?
  • 相应地编辑了帖子!

标签: vb.net excel excel-addins office-automation


【解决方案1】:

MSDN 参考:http://blogs.msdn.com/b/andreww/archive/2008/01/23/managed-automation-add-ins.aspx

这与语言环境 ID (LCID) 问题有关。这是一个已知问题 在混合文化环境中开发 Excel 解决方案。更多 信息,请参见此处:http://support.microsoft.com/kb/246501/

VSTO 通过其 LCID 代理解决了这个问题。虽然你只能使用 这与 VSTO 解决方案,它值得阅读文档,所以你 可以理解问题: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033proxy.aspxhttp://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033attribute.aspx.

我遇到了同样的问题 #Value 结果,我搞砸了一点并得到了这个工作(显然它可以被清除 - 但这段代码绝对适用于我,同时将我的电脑设置为我的澳大利亚地区 ID。我不确定你住在世界的哪个地方,但我猜不是美国,因为那是它默认工作的地区)

Public Function AddNumbers1(ByVal num1 As Double, _
                            ByVal num2 As Double) As Double

    Dim oldCI As CultureInfo = Thread.CurrentThread.CurrentCulture
    Dim english As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("en-US")
    System.Threading.Thread.CurrentThread.CurrentCulture = english
    System.Threading.Thread.CurrentThread.CurrentUICulture = english

    Dim valresult As Double = num1 + num2

    Thread.CurrentThread.CurrentCulture = oldCI
    Return valresult
End Function

相关问题:https://social.msdn.microsoft.com/Forums/en-US/dafe71c5-d390-44bc-b4d3-b133444a02fe/excel-automation-addin-udf-returns-error-on-different-regional-settings?forum=vsto

【讨论】:

    猜你喜欢
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2020-11-14
    相关资源
    最近更新 更多