Excel自动化插件 - 功能不工作

问题描述:

编辑:真正的解决方案,我想做什么可以在这篇文章here找到。我只是想公开一些编译好的函数。使用Excel DNA nuget包证明这非常简单。您只需添加一个类库,添加nuget包,然后复制自述文件中找到的代码。点击F5,它会在加载项已经加载的情况下启动excel。如果你想让你的函数持久化,只需要通过“开发人员”功能区部分手动将加载项添加到excel文件。Excel自动化插件 - 功能不工作

原始发布: 我按照this microsoft post的说明,如何创建一个自动加载项。代码编译得很好,我可以从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中得到相同的#值错误。我从一开始就没有遵循这篇文章的教程,但我会在白天进行。

编辑2:我发现,只要在函数名称中添加一个数字,由于某些原因,Microsoft的代码无法工作。如果我将上面的示例代码中的Add1重命名为Addqweqew,它将起作用!

+0

当你说“不工作“你为每个案件专门做了什么错误?你用什么数据来测试这些功能? – chancea 2015-02-06 22:55:24

+0

相应编辑帖子! – gerodim 2015-02-06 23:03:00

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