我正在尝试在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我点击Start,然后将此代码放入Excel VBA中,弹出新窗口。
我收到错误' 424 Object Required'在VBA线上" x = ThisAddIn.Multiplication"。如何从VBA调用VB.Net函数?
编辑:我正在使用Excel 2013,VB.Net版本2013(VB12),我想我的目标是.Net版本4.5 +
编辑:我尝试添加以下代码:
Imports System
Imports System.Collections.Generic
Imports System.Text
和
Private Sub Test()
Dim testClass As New ThisAddIn
MsgBox testClass.Multiplication()
End Sub
基于此guide,但它仍无效。我找不到将项目连接到步骤3中提到的Excel的选项,因为它是一个旧指南。也许这是我的问题?
答案 0 :(得分:3)
不是使用VSTO制作Excel加载项,另一种方法是使用VB.NET代码创建Excel-DNA加载项。这些都很方便,因为您不需要管理员权限来加载和注册,并且您可以在单个加载项中创建高性能UDF和COM服务器。
这将允许您在VB.NET中创建用户定义的函数(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
你可以从{@ 1}}单元格中调用它。
当然,您也可以制作自动化到Excel对象的宏(=MultiplyThem(A1, A2)
s),制作自定义功能区选项卡等。
作为与VBA集成的简单开始,可以使用Sub
从VBA项目直接调用加载项中的函数和宏。
更进一步,您可以将Excel-DNA加载项设置为COM服务器,这样您就可以从VBA项目中工具 - >参考 .xll加载项,以及然后从VBA访问您的加载项的导出对象模型(即使使用IntelliSense)。有关使用Excel-DNA制作这样一个COM服务器的逐步说明的两篇好文章由Mikael Katajamäki编写:
答案 1 :(得分:0)
如果你想首先从vb.net调用一个函数,你必须将你的dll引用到vba ftom tools-&gt; reference。 在引用之后,您必须将类中的对象定义为dll文件。 如果你的dll文件名是mydll,下面的代码是用vba写的,如下所示:
dim x as mydll.ThisAddIn
set x =new mydll.ThisAddIn
dim y
y=x.Multiplication