Я видел, что вы можете создавать «скрытые» вещи в VBA, добавляя к их именам знак подчеркивания (или, возможно, какой-то другой недопустимый первый символ).Под скрытым я не подразумеваю частную, но я имею в виду публичную вещь, которая не будет появляться в автозаполнении VBE;вы должны знать о его существовании, если хотите его использовать.
Некоторые недавние примеры, которые я видел:
Функция _NewEnum
в классе Collection
(из )это вопрос), и я довольно часто создаю Enum
следующим образом:
Public Enum SomeEnumeration
[_First]
FirstCategory = [_First]
SecondCategory
ThirdCategory
[_Last] = ThirdCategory
[_Invalid] = [_Last] + 1
End Enum
Потому что это позволяет мне циклически проходить по моему перечислению без добавления дополнительных открытых категорий, что могло бы запутать вещи.
Мой вопрос таков: возможно ли использовать эту конструкцию для других целей, кроме перечислений?Я вижу, что Container
может это сделать, но могу ли я сделать это сам.Т.е. как бы написать модуль класса со скрытой функцией:
' Class module SomeClass
' Illustration of what I want, but this will not compile
Public Function _Hidden() As Variant
' Return something
End Function
, а затем получить доступ к этой функции через
Dim Obj As New SomeClass
Obj.[_Hidden] ' This option should not be visible in the VBE autocomplete
Я попытался определить функцию с окружением []
,но это также не работает.
Это было бы полезно, потому что я довольно часто использую экземпляры классов по умолчанию в качестве фабрики объектов в качестве обходного пути для факта, что конструктор класса VBA не принимает никаких аргументов.Тем не менее, когда вы делаете это, вы сталкиваетесь с проблемами, когда вам нужно раскрыть определенные части вашего класса, которые в действительности должны быть приватными и установлены в конструкторе.Если бы я мог назвать эти вещи как-то скрытыми, это сделало бы мои интерфейсы чище и предотвратило бы случайное использование.