Открытые типы не могут быть объявлены в модулях класса - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу создать функцию в модуле класса VBA (доступ), который возвращает тип результата. Как это:

Public Type CheckResult
  isOk As Boolean
  errorText As String
End Type

Public Function Check() As CheckResult
    ...
end function

Эта функция используется во многих местах.

Но компилятор говорит мне, что не разрешается объявлять открытые типы в модулях классов? Почему это? Где поставить мой тип вместо этого? Должен ли я создать новый модуль только для этого типа? Или лучше создать модуль «AllTypes», в который будут помещены все объявления типов?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Что касается Почему вопрос:

Модули класса должны содержать блоки кода: они буквально ничего не делают, если класс не инициализирован.

Нормальных модулей не так много. Любая публично объявленная вещь в обычном модуле доступна всем.

Нет смысла иметь тип Public в модуле класса, поскольку, если внешний код использует этот тип, он не обращается к нему через модуль класса. И если его использует только модуль класса, он не должен быть публичным.

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

0 голосов
/ 06 сентября 2018

Компилятор прав.

Итак, как вы уже поняли, используйте стандартный модуль для этих объявлений. Я держу один модуль только для таких объявлений (и перечислений).

...