【发布时间】:2017-02-23 11:01:30
【问题描述】:
我正在构建一个用于 VBA 项目的 VB.NET 类库。在我的库中,我有一个名为“Globals”的模块,我希望将一些全局(库级别)属性和方法存储在:
Imports System.Runtime.InteropServices
<ComVisible(True)>
Public Module Globals
<ComVisible(True)>
Public Const TestGlobal As Integer = 0
End Module
但是,当我在 Excel VBE 中引用我的库时,我的模块显示为一个类,我在对象浏览器中看不到我的常量变量:
我遗漏了什么或做错了什么导致我的模块显示为一个类?
【问题讨论】:
-
A
Module只是一个静态类。它作为接口暴露给 COM,VBE OB 将其显示为Class,因为它可以通过IDispatch调用。有关更深入的解释,请参阅 this answer。 IIR 如果您将常量声明为与public static readonly int等效的任何 VB,则该常量将是 COM 可见的。 -
现在它显示为一个类是有道理的。您知道在 VB.NET 中等效的 VBA 模块是什么吗?
-
一个 VB.NET 模块。一个很好的例子是你可以给一个 VBA 模块属性。 VBA 模块只是静态类的 COM 等价物。
-
明白了。这是否意味着我无法在我的代码中做任何事情来让 VBE 将我的 Globals 模块视为一个模块而不是一个类?如果有办法做到这一点,我需要在我的代码中进行哪些更改?
-
如果它显示为
Class或Module,真的重要吗? FWIW,VBA.Global 也显示为Class。