2014-06-12 26 views
7

Excel üzerinden COM aracılığıyla kullanılmak üzere bir sınıfı VB6'dan VB.NET'e yükselttim. VB6VB6 özniteliği VB6 Öznitelik Öğe.VB_UserMemId = 0

, bir özelliği bu şekilde sınıfta MyScalars tanımladığınız:

Public Property Get Item(vntIndexKey As Variant) As MyScalar 
Attribute Item.VB_UserMemId = 0 
    Set Item = mCol(vntIndexKey) 
    ... 
End Property 

Bu Excel VBA, çok varsayılan bir özellik gibi (o belirtmeden bu özelliği erişebilmeleri için bir şey yapmış gibi görünüyor): VB.NET'te bunu yapan bir eşdeğer özellik var mı? Aşağıdaki denedim ama VBA'DA bir hata veriyor:

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 
+0

VBA'da ne tür bir hata var? Bir özelliği 'Set' ile de deneyebilirsiniz, bu ReadOnly değil. – Govert

+0

@Govert 450 hatası: Yanlış sayıda bağımsız değişken veya geçersiz özellik ataması. Eğer MyScalars.Item (Range ("E10")) 'i kullanırsam,' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ile çalışıyorsanız, bu özellik gayri resmi olarak mümkündür. – ryrich

+0

Ayrıca bir 'Set' belirterek aynı sonucu verir. – ryrich

cevap

2

Govert ait cevap doğru olanıdır. COM IDispatch arabiriminin tüm üyeleri, .NET'ten COM'a dönüştürüldüğünde DISPID değeri, ile otomatik olarak işaretlenir. Bu otomatik işlem için tek istisna, sınıfın varsayılan üyesi için ayrılan 0 değeridir. dispid'u ayarlamazsanız, COM'a aktarıldığında .NET sınıflarının varsayılan üyesi ::ToString yöntemidir. Örneğinizdeki:

< DispId(0) > _ 
Public ReadOnly Property Item(ByVal vntIndexKey As String) As MyScalar 

End Property