В модуле класса VBA может ли частная переменная экземпляра быть явно квалифицирована как общедоступный Enum из того же класса? - PullRequest
0 голосов
/ 07 января 2019

В модуле пользовательского класса 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

1 Ответ

0 голосов
/ 01 февраля 2019

Они могут быть классифицированы только на уровне проекта.

Открытые типы и перечисления объявляются на уровне проекта. Это означает, что они не могут быть классифицированы дальше, чем проект, и вы не можете иметь несколько типов или перечислений с одним и тем же именем в одном проекте.

Public Enum ImageAspect
    ImageAspectHorizontal
    ImageAspectVertical
End Enum

Private logoAspect4 As VBAProject.ImageAspect

VBAProject - имя по умолчанию для проекта Excel VBA. Его можно переименовать в VBE в Инструменты -> Свойства VBAProject

Это не зависит от того, хранятся ли они в модуле класса или обычном модуле. Они всегда объявляются на уровне проекта. Если вы хотите повторно использовать код в разных проектах, вы можете хранить свои перечисления и типы в другом файле с отдельным именем проекта и ссылками на этот файл для импорта типов и перечислений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...