I've upgraded a class from VB6 to VB.NET to be used in Excel via COM.
In VB6, I have a property defined in class MyScalars
as this:
Public Property Get Item(vntIndexKey As Variant) As MyScalar
Attribute Item.VB_UserMemId = 0
Set Item = mCol(vntIndexKey)
...
End Property
This seems to make it so that in Excel VBA, I can access this property without specifying it (so like a default property):
Dim oOut As Object
Set oOut = MyScalars(Range("E10").Value)
Is there an equivalent attribute in VB.NET that does this? I've tried the following but it gives an error in the VBA:
Default Public ReadOnly Property Item(ByVal vntIndexKey As String) As MyScalar
Get
If mCol.ContainsKey(vntIndexKey) Then
Item = mCol.Item(vntIndexKey)
End If
...
End Property
The reply of Govert is the right one.
All the members of a COM IDispatch
interface are automatically marked with a DISPID
value,
when converted from .NET to COM. The only exception for this automatic process is the value 0, which is reserved for the default member of the class. if you do not set the dispid
, the default member of .NET classes when is ported to COM is the ::ToString
method.
In your example:
< DispId(0) > _
Public ReadOnly Property Item(ByVal vntIndexKey As String) As MyScalar
End Property
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With