2014-06-12 1 views
7

COM을 통해 Excel에서 클래스를 VB6에서 VB.NET으로 업그레이드했습니다. VB6에서VB.NET에서 VB.NET에 상응하는 항목 Item.VB_UserMemId = 0

, 나는 속성은이 같은 클래스 MyScalars에서 정의한 :

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

이 엑셀 VBA에서, 내가 그렇게 기본 속성처럼 (을 지정하지 않고이 속성에 액세스 할 수 있습니다 그래서 그것을 만들 것) :

Dim oOut As Object 
Set oOut = MyScalars(Range("E10").Value) 

VB.NET에는 이와 동일한 속성이 있습니까? 다음을 시도했지만 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 
+0

VBA에서 어떤 오류가 발생합니까? '설정'이있는 속성을 사용해 볼 수도 있습니다.이 속성은 ReadOnly가 아닙니다. – Govert

+0

@Gault 오류 450 : 잘못된 인수 수 또는 잘못된 속성 할당. MyScalars.Item (Range ("E10"). Value)'이 제대로 작동하면 속성을 기본값으로 설정할 수 있는지 궁금합니다. – ryrich

+0

또한 'Set'을 지정하면 동일한 결과가 나타납니다. – ryrich

답변

2

Govert의 답이 맞습니다. COM IDispatch 인터페이스의 모든 구성원은 .NET에서 COM으로 변환 될 때 DISPID 값인 으로 자동으로 표시됩니다. 이 자동 프로세스의 유일한 예외는 클래스의 기본 구성원을 위해 예약 된 값 0입니다. dispid을 설정하지 않으면 COM으로 이식 될 때 .NET 클래스의 기본 멤버는 ::ToString 메서드입니다. 예 :

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

End Property