在Excel中从VBA调用VB.Net

我想获得一些Excel VBA和VB.Net之间的代码工作。 我在Visual Studio中的VB.Net中有以下代码..

Public Class ThisAddIn Private Sub ThisAddIn_Startup() Handles Me.Startup End Sub Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown End Sub Public Function Multiplication() Dim activeWorksheet As Excel.Worksheet = CType(Application.ActiveSheet, Excel.Worksheet) Dim Range1 As Excel.Range = activeWorksheet.Range("A1") Dim Range2 As Excel.Range = activeWorksheet.Range("A2") Dim x As Integer = Range1.Value Dim y As Integer = Range2.Value Return (x * y) End Function End Class 

我也有这个代码在VBA,我试图运行

 Sub Macro1() Dim x x = ThisAddIn.Multiplication MsgBox (x) End Sub 

从Visual Studio我点击开始,我把这个代码放到Excel VBApopup的新窗口。

我在VBA行“x = ThisAddIn.Multiplication”上得到错误“424 Object Required”。 我如何从VBA调用VB.Net函数?

编辑:我使用Excel 2013,VB.Net版本2013(VB12),我想我的目标。净版本4.5 +

编辑:我试着添加下面的代码:

 Imports System Imports System.Collections.Generic Imports System.Text 

 Private Sub Test() Dim testClass As New ThisAddIn MsgBox testClass.Multiplication() End Sub 

基于这个指南 ,但它仍然不工作。 我找不到将项目连接到步骤3中提到的Excel的选项,因为它是一个老的指南。 也许这是我的问题?

而不是使用VSTO制作Excel加载项,另一种方法是使用VB.NET代码制作Excel-DNA加载项。 这些都很方便,因为您不需要pipe理员访问来加载和注册,而且您可以在单个加载项中创build高性能的UDF和COM服务器。

这将允许您在您的VB.NET中创build一个用户定义的函数(UDF),它可以直接在工作表中使用。 你的UDF代码可能如下所示:

 Public Module MyFunctions <ExcelFunction(Description:="Useful custom multiplication function")> Function MultiplyThem(val1 As Double, val2 As Double) As Double Return val1 * val2 End Function End Module 

你可以从一个单元=MultiplyThem(A1, A2)这个=MultiplyThem(A1, A2)

或者当然,你也可以使macros自动化到Excel对象,自定义function区选项卡等。

作为与VBA集成的一个简单的开始,插件中的函数和macros可以使用Application.Run("MultiplyThem", 3, 5)从VBA项目中直接调用。

进一步,您可以将Excel-DNA加载项设置为COM服务器,该服务器允许您从VBA项目的工具 – >引用 .xll加载项,然后从VBA访问加载项的导出对象模型(即使有智能感知)。 两篇很好的文章,分别介绍了如何用Excel-DNA制作一个这样的COM服务器, MikaelKatajamäki写道 :

  • 使用Excel-DNA连接C#和VBA(不支持智能感知)
  • 使用Excel-DNA连接C#和VBA(支持智能感知)

如果你想先从vb.net调用一个函数,你必须引用你的DLL到vba ftom工具 – >引用。 参考之后,你必须将你的类中的对象定义到dll文件中。 如果你的dll文件名是mydll,那么下面的代码是用下面的vba写的:

 dim x as mydll.ThisAddIn set x =new mydll.ThisAddIn dim y y=x.Multiplication