Свойство apos
1 получает Variant
по указанному index
;реализация предполагает, что инкапсулированный ap(index)
является Object
, поэтому тип возвращаемого значения, вероятно, должен быть Object
вместо Variant
:
Public Property Get apos(index As Long) As Variant
Set apos = ap(index)
End Property
Сеттер использует присваивание Let
, котороехак, но допустимо, учитывая значение Variant
- о, нет, это String
!
Public Property Let apos(index As Long, apVal As String)
ap(index) = apVal
End Property
Вы получаете эту ошибку, потому что, как говорится в ошибке, определение свойства не согласовано.Если ap(index)
- это String
, то геттер должен выглядеть следующим образом:
Public Property Get apos(index As Long) As String
apos = ap(index)
End Property
Если ap(index)
- это Object
, то установщик должен выглядеть следующим образом:
Public Property Set apos(index As Long, apVal As Object)
Set ap(index) = apVal
End Property
... и геттер вот так:
Public Property Get apos(index As Long) As Object
Set apos = ap(index)
End Property
Или вот так:
Public Property Get apos(index As Long) As Variant
Set apos = ap(index)
End Property
Public Property Set apos(index As Long, apVal As Variant)
Set ap(index) = apVal
End Property
Другими словами:
- Параметр RHS / value
Property Let
/ Property Set
должен быть того же типа, что и тип возврата элемента с тем же именем Property Get
. - Если тип является типом объектаиспользуйте
Property Set
для назначений. - Если тип является типом значения, используйте
Property Let
для назначений. - Избегайте
Variant
, если это возможно. - Неиспользуйте
Set
, чтобы назначить что-либо кроме ссылки на объект.
1 Все это также верно для свойства dataType
.