簡體   English   中英

在Excel中從VBA調用VB.Net

[英]Calling VB.Net from VBA in Excel

我試圖在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中,彈出新窗口。

我在VBA行“x = ThisAddIn.Multiplication”上得到錯誤'424 Object Required'。 如何從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

根據本指南 ,但它仍然無法正常工作。 我找不到將項目連接到步驟3中提到的Excel的選項,因為它是一個舊指南。 也許這是我的問題?

而不是使用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

你可以從一個單元格中調用它=MultiplyThem(A1, A2)

或者你也可以制作自動化到Excel對象的宏( Sub s),制作自定義Ribbon標簽等。

作為與VBA集成的簡單開始,可以使用Application.Run("MultiplyThem", 3, 5)從VBA項目直接調用加載項中的函數和宏。

更進一步,您可以將Excel-DNA加載項設置為COM服務器,這允許您從VBA項目中工具 - >引用 .xll加載項,然后從VBA訪問加載項的導出對象模型(即使使用IntelliSense)。 MikaelKatajamäki撰寫了兩篇關於用Excel-DNA制作這樣一個COM服務器的逐步說明的好文章:

如果你想先從vb.net調用一個函數,你必須將你的dll引用到vba ftom tools-> reference。 在引用之后,您必須將類中的對象定義為dll文件。 如果你的dll文件名是mydll,下面的代碼是用vba寫的,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM