如何实例化一个vba类并从vb.net调用一个方法?

时间:2015-08-21 17:00:52

标签: vb.net vba ms-access access-vba office-interop

正如我猜的那样,我正坐在一个带有表,VBA模块和VBA类混合的ms访问应用程序中。我打算将该应用程序迁移到VB.NET。

然而,这需要一些时间,我想利用自动化将代码慢慢移动到VB.NET

现在我可以从我的VB.NET应用程序中调用常规的SUB和函数,但想知道是否有办法调用用户定义对象的方法。

粗略的例子我想做什么

VBA

'Class1
Public Sub Test()
  Print "Hello world"
End Sub

'Module1
Public oClass1 as Class1
Public Sub Init()
  Set oClass1 = New Class1
End Sub

VB.Net

' Left out the opening of the access db
oAccess.Run("Init")
oAccess.Run("oClass1.Test())

甚至可能吗?

1 个答案:

答案 0 :(得分:3)

Application.Run方法需要一个字符串,其中包含“要运行的Function或Sub过程的名称”作为其第一个参数。但“oClass1.Test”既不是。

您可以通过创建另一个包装oClass1.Test方法的VBA过程来解决该问题,并运行包装程序......

oAccess.Run("Wrap_oClass1_Test") ' no parentheses after procedure name

Public Sub Wrap_oClass1_Test()
    oClass1.Test
End Sub

我确认当从VBScript调用时,该方法与其余示例代码一起工作,所以我相信它也可以在VB.Net中运行。

蒂姆的CallByName suggestion看起来很有希望,但我没有测试那个。