excel - 在 VBA 类模块中,可以将私有实例变量显式限定为来自同一类的公共 Enum 吗?
问题描述
在 VBA 自定义类模块(以及扩展 VB6?)中,如果有一个私有实例变量定义为同一类中的公共枚举,它是否应该被限定..?如果是这样,如何..?
我经常有相同类型的项目引用。例如,Excel 和 Word 都有一个Range
对象。因此,在声明变量时,我总是尽可能具体,例如Excel.Range
or 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
解决方案
它们只能在项目级别进行分类。
公共类型和枚举在项目级别声明。这意味着它们不能比项目进一步分类,并且在单个项目中不能有多个具有相同名称的类型或枚举。
Public Enum ImageAspect
ImageAspectHorizontal
ImageAspectVertical
End Enum
Private logoAspect4 As VBAProject.ImageAspect
VBAProject 是 Excel VBA 项目的默认名称。它可以在 VBE 中的Tools -> VBAProject Properties下重命名
这与它们是存储在类模块还是普通模块中无关。它们总是在项目级别声明。如果您想要跨项目重用代码,您可以将枚举和类型存储在具有不同项目名称的不同文件中,并引用该文件以导入类型和枚举。
推荐阅读
- python - 如何在 Flask 应用程序中显示从前端发送的 Flash 消息?
- android - 如何在 LinearLayout 中单击视图?
- android - 如何使用 API 增加 Android 应用程序中的访问者数量
- node.js - 登录中间件结合 Passport.js 抛出“变量未定义”错误
- python - Django 媒体 URL 在幕后通过
- unity3d - 试图在 Unity2 上的碰撞中获得反向运动
- python - 如何在 Python3 中的类构造函数方法参数上使用 sort()
- performance - 世界各地的快速网站,用于动态内容
- node.js - 无法确定 Firebase 数据库 URL(Firebase 实时数据库)
- java - 为什么我的休眠实体(消息)没有映射?