[英]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.