gpt4 book ai didi

vb.net - Excel 自动化插件 - 功能不起作用

转载 作者:行者123 更新时间:2023-12-04 20:43:04 30 4
gpt4 key购买 nike

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

原帖:
我按照 this 的指示进行操作微软关于如何创建自动化加载项的帖子。代码编译得很好,我可以从 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,它将起作用!

最佳答案

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

It has to do with a locale ID (LCID) issue. This is a known issue when developing Excel solutions in a mixed culture environment. For more information, see here: http://support.microsoft.com/kb/246501/.

VSTO solves this problem via its LCID Proxy. Although you can only use this with VSTO solutions, its worth reading the documentation so you can understand the problem: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033proxy.aspx and 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?forum=vsto

关于vb.net - Excel 自动化插件 - 功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28376049/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com