在VBA中使用标准.Net库

时间:2010-11-17 03:10:06

标签: .net vba

我已按照此处发布的步骤成功运行了我自己的.Net代码Execute .NET 3.0 code from Office 2003

有没有办法使用标准的.Net库而无需编写包装器?这样我们就可以避免在客户端的计算机上注册并安装自定义DLL到GAC中。

我发现tlb文件已经存在于C:\ Windows \ Microsof.NET \ Framework文件夹中,并且能够添加对mscorlib.dll的引用。查看RijndaelManaged的文档,此类似乎是COM可见。

我可以创建一个实例,但是一旦我尝试使用它,我就会收到错误(例如“类型不匹配”)。

Sub Macro1()
   Dim aesImplementation As New RijndaelManaged

   Set key = aesImplementation.GenerateKey()
   Set iv = aesImplementation.GenerateIV()
End Sub

我愿意接受你提供的任何黑客行为!

2 个答案:

答案 0 :(得分:1)

还不可能。 VBA(VB for Applications)不是VB,而是一个独特的协议,模仿所有基本语法作为旧版本的VB。这几乎就像使用普通的旧版VB的精简版。事实上,VBScript是最接近VBA的。也许有一天,微软将建立直接与GAC合作的方法,但在那之前(那天可能意味着COM的死我确定),你使用COM CreateObject()方法,添加了将COM注册库引用到Office项目,或直接引用Office项目中的VBA / COM兼容DLL或TLB文件。

在默认的GAC中有很多支持COM的库,但对于大多数人来说,你很难在VB.Net或C#中首先创建一个Com Callable Wrapper。

相反,几乎所有MS Office应用程序都是COM可调用的,因此您可以通过VB.Net项目使用已安装的Office应用程序。

答案 1 :(得分:1)

您应该能够以这种方式使用ComVisible .NET类。但是,GenerateKeyGenerateIV方法没有返回值。尝试:

Sub Macro1()
   Dim aesImplementation As New RijndaelManaged

   aesImplementation.GenerateKey
   Key = aesImplementation.Key
   aesImplementation.GenerateIV
   IV = aesImplementation.IV
End Sub

或更好,尤其是因为在调试时您可以查看在构造期间或调用方法时是否发生错误:

Sub Macro1()
   Dim aesImplementation As RijndaelManaged
   Set aesImplementation = New RijndaelManaged

   aesImplementation.GenerateKey
   Key = aesImplementation.Key
   aesImplementation.GenerateIV
   IV = aesImplementation.IV
End Sub