在VBA定制类模块(以及扩展名为VB6?)中,如果在同一个类中有一个私有实例变量定义为公共枚举,那么它应该合格吗?如果是这样,怎么..?
我经常有相同类型的项目引用。例如,Excel和Word都有一个Range
对象。因此,在声明变量(例如Excel.Range
或Word.Range
而不是Dim R As Range
时,我总是尽可能地具体。
但是枚举呢..?如何具体说明这些..?我试图将变量限定为枚举,但始终会出错。我尝试将枚举定义移动到另一个自定义类,但这没有帮助。我不经常为VBA创建类,因此我可能为此惹错了树。
如果我符合Me.
关键字的条件,则会收到错误消息:
"Compile error: Expected New or type name."
如果我符合自定义类名称的要求,则会收到错误消息:
"Compile error: User-defined type not defined"
这是一个完整的例子:
'Custom class module.
Option Explicit
Public Enum ImageAspect
ImageAspectHorizontal
ImageAspectVertical
End Enum
' Example 1:
' Qualified to use built-in Excel enumeration. This works.
Private logoAspect1 As Excel.XlOrientation
' Example 2:
' Uses the enum defined in this class. This works, but...
' Can this be qualified..? How..? Is it even necessary?
Private logoAspect2 As ImageAspect
' Example 3:
' This does not work.
Private logoAspect3 As Me.ImageAspect
' Example 4:
' This does not work.
Private logoAspect4 As ThisClass.ImageAspect
Public Property Let Aspect(ByVal pAspect As ImageAspect)
logoAspect2 = pAspect
End Property
Public Property Get Aspect() As ImageAspect
Set Aspect = logoAspect2
End Property
答案 0 :(得分:-1)
只能在项目级别进行分类。
公共类型和枚举在项目级别声明。这意味着它们不能比项目更进一步地分类,并且单个项目中不能有多个具有相同名称的类型或枚举。
Public Enum ImageAspect
ImageAspectHorizontal
ImageAspectVertical
End Enum
Private logoAspect4 As VBAProject.ImageAspect
VBAProject是Excel VBA项目的默认名称。可以在VBE中的工具-> VBAProject属性
下对其重命名。这取决于它们是否存储在类模块或普通模块中。它们总是在项目级别上声明。如果要跨项目重用代码,可以将枚举和类型存储在具有不同项目名称的其他文件中,并引用该文件以导入类型和枚举。