На самом деле, я думал о свойствах по умолчанию впоследствии (так же, как указано Хел), и на самом деле возможно возможно, и я проверил это.
Вам просто нужно написатьфункция, которая принимает целочисленный аргумент для возврата желаемого значения из коллекции;и установите его в качестве члена по умолчанию, добавив строку Attribute Value.VB_UserMemId = 0
в текстовом редакторе после экспорта модуля класса. (После того, как вы импортируете его снова, строка не будет видна, но она все равно вступит в силу.)
Мой супер простой пример класса "Test":
Private arr(1 To 3) As String
Private Sub Class_Initialize()
arr(1) = "One"
arr(2) = "Two"
arr(3) = "Three"
End Sub
Public Function value(i As Integer) As String
Attribute Value.VB_UserMemId = 0
value = arr(i)
End Function
Затем его можно использоватьследующим образом:
Sub Testing()
Dim a As Test
Set a = New Test
Debug.Print a.value(2)
Debug.Print a(3)
End Sub
И он вернет «Два» для a.value (2) в соответствии с текущим подходом и «Три» для a (3) по желанию.
Для болееинформация о настройке члена класса по умолчанию, см. сайт Чипа Пирсона: http://www.cpearson.com/excel/DefaultMember.aspx
Введение
Если вы работаете с классами в VBA (см. Модули классовдля более подробной информации) часто полезно сделать одного члена класса членом по умолчанию. Например, в объекте диапазона Excel элементом по умолчанию является значение. Это позволяет опустить имя члена и использовать код, подобный следующему:
Range("A1") = 1234 ' is the same as
Range("A1").Value = 1234
Поскольку значение является элементом по умолчанию, оно может быть опущено в коде. Создание члена класса по умолчанию также очень полезно (действительно необходимо), когда вы работаете с настроенным классом Collection. (См. Создание пользовательского класса коллекции для получения дополнительной информации о пользовательских классах коллекции.) В этом случае вы, вероятно, указали бы метод Item в качестве элемента по умолчанию. Это позволяет использовать код, подобный следующему:
V = Coll(2)
' is the same as
V = Coll.Item(2)
Создание элемента по умолчанию в VBA
VBA напрямую не поддерживает создание элемента по умолчаниюкласс. То есть в IDE VBA нет ничего, что позволяло бы указывать члена по умолчанию. Тем не менее, VBA уважает метод по умолчанию, если он указан в классе. Чтобы указать метод в качестве члена по умолчанию, необходимо экспортировать модуль класса в текстовый файл, отредактировать этот текстовый файл в NotePad или в своем любимом текстовом редакторе, добавить директиву атрибута в метод, а затем импортировать текстовый файл обратно вПроект VBA.
Сначала экспортируйте модуль класса в текстовый файл. В VBA перейдите в меню «Файл» и выберите «Экспорт файла ...». В появившемся диалоговом окне «Сохранить» перейдите к какой-либо папке (неважно, какая папка) и сохраните файл класса в виде текста с расширением cls. Далее выберите «Удалить ...» в меню «Файл» и выберите «Нет» в «Вы хотите экспортировать? Диалог. Затем откройте Блокнот (C: \ Windows \ Notepad.exe) или другой текстовый редактор и откройте cls, сохраненные на шаге Export. В текстовом файле перейдите к методу, который вы хотите использовать по умолчанию, и добавьте следующую строку кода:
Значение атрибута. VB_UserMemId = 0
Директива Атрибут является инструкцией длякомпилятор, указывающий различные условия для компиляции. Директивы атрибутов не отображаются в редакторе VBA и не могут быть добавлены редактором VBA. Вы должны использовать текстовый редактор для добавления директив Attribute. Если вы делаете свойство Value членом по умолчанию для вашего класса, ваш код в Блокноте должен выглядеть примерно так:
Property Get Value() As Long
Attribute Value.VB_UserMemId = 0
Value = Whatever
End Property
Вы можете сделать Sub, Function или Property членом по умолчанию для класса, но только одна процедура в модуле может быть членом по умолчанию. Как только вы добавите директиву Attribute в текстовый файл, сохраните файл и выйдите из NotePad. Теперь в редакторе VBA перейдите в меню «Файл» и выберите «Импорт файла ...». В открывшемся диалоговом окне «Открыть» перейдите к папке, в которой вы сохранили файл cls, и импортируйте его в VBA. Поскольку директивы Attribute не видны в редакторе VBA, вы не увидите никаких изменений в своем коде.
После установки директивы Attribute вы можете использовать код, подобный следующему:
Dim CC As CMyClassName
Set CC = New CMyClassName
CC.Value = 123
' is the same as
CC = 123