在VBA中使用标准.Net库

Evi*_*eon 7 .net vba

我已经成功地运行了我自己的.Net代码,遵循此处发布的步骤从Office 2003执行.NET 3.0代码

有没有办法使用标准的.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
Run Code Online (Sandbox Code Playgroud)

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

bob*_*yer 1

目前还不可能。VBA(VB for Applications)不是 VB,而是一个单独的协议,模仿旧版本 VB 的所有基本语法。这几乎就像使用常规的、较旧的 VB 的精简版一样。事实上,VBScript 是与 VBA 最接近的匹配。也许有一天,微软会构建直接与 GAC 合作的方法,但在那之前(我确信那一天可能意味着 COM 的消亡),您将不得不使用 COMCreateObject()方法,添加对注册的 COM 的引用库到您的 Office 项目,或直接引用 Office 项目中的 VBA/COM 兼容 DLL 或 TLB 文件。

默认 GAC 中有相当多支持 COM 的库,但对于大多数库来说,您必须首先在 VB.Net 或 C# 中创建 Com Callable Wrapper。

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

  • “VBScript 是与 VBA 最接近的匹配” - VBA 比 VBScript 更接近经典 VB6:https://msdn.microsoft.com/en-us/library/ms970436.aspx (5认同)
  • 通过添加对“mscorlib.dll”的引用,您可以创建标准 .net 库中具有无参数公共构造函数的任何类的对象。你会发现这非常有限。 (3认同)