Excel自动化插件 – function不起作用

编辑:我想要做的真正的解决scheme可以在这里find这个职位。 我只是想公开一些编译好的函数。 使用Excel DNA nuget软件包certificate这非常简单。 您只需添加一个类库,添加nuget包,并复制粘贴在自述文件中find的代码。 单击F5,它将启动加载项已加载的Excel。 如果你想让你的函数保持持久性,只需要通过“开发人员”function区部分手动将加载项添加到excel文件。

原文:我正在按照这篇微软文章的说明来介绍如何创build一个自动化加载项。 代码编译得很好,我可以从Excel中访问函数。 但是这些function不起作用。 当我尝试给一个单元格分配一个函数调用的结果时,我几乎总是得到#value或#ref错误。 更具体:

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

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 

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

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

下面我创build的函数(?!?):

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

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

编辑:我也复制粘贴在这里提出的function,我在Excel中得到相同的#值错误。 我从一开始就没有按照这个post的教程,但我会在白天。

编辑2:我想通过微软的代码不能工作出于某种原因,只要你在函数名称中添加一个数字。 如果我将上面的示例代码中的Add1更名为Addqweqew,它将起作用!

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

它与一个区域ID(LCID)问题有关。 在混合文化环境中开发Excel解决scheme时,这是一个已知问题。 有关更多信息,请参阅: http : //support.microsoft.com/kb/246501/ 。

VSTO通过其LCID代理解决了这个问题。 虽然你只能在VSTO解决scheme中使用它,但它值得阅读文档,以便你能够理解这个问题: http : //msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033proxy.aspx http://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 ?论坛= VSTO