在Excel中从VBA调用VB.Net

时间:2014-06-02 03:45:24

标签: vb.net excel vba excel-vba

我正在尝试在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的选项,因为它是一个旧指南。也许这是我的问题?

2 个答案:

答案 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