2011-02-23 18 views
12

Mam moduł klasy, o nazwie Normal, w VBA z następującego kodu:Ustaw właściwość klasy vba z odniesieniem obiektu

Private mLine As LineElement 

Public Property Get Line() As LineElement 
    Line = mLine 
End Property 

Public Property Set Line(ByRef vLine As LineElement) 
    mLine = vLine 
End Property 

Ta klasa jest używana przez następujący kod:

Sub Run 
    Dim Line As LineElement 
    Set Line = New LineElement 

    Dim Norm As Normal 
    Set Norm = New Normal 
    Set Norm.Line = Line 'FAILS here with "Object Variable or With Block Variable not set"' 
End Sub 

również, jeśli mogę zmienić kod w module Normal klasy do:

Private mLine As LineElement 

Public Property Get Line() As LineElement 
    Line = mLine 
End Property 

Public Sub SetLine(ByRef vLine As LineElement) 'changed from property to sub' 
    mLine = vLine 
End Property 

a failin linia g do

Norm.SetLine(Line) 

Otrzymuję komunikat "Obiekt nie obsługuje tej właściwości lub metody". Co dokładnie robię źle w obu tych przypadkach?

Odpowiedz

18

Spróbuj tego:

+4

d'oh tak proste! Dzięki za pomoc. (Nienawidzę edytora VBA, że nie zapewnia więcej pomocy dla prostych rzeczy takich jak ta) –

+0

double d'oh! Spędzonych godzin gonić nie można przypisać do ActiveX. Dzięki. –

3

Obie właściwości musi mieć „Set” słowo kluczowe

Private mLine As LineElement 

Public Property Get Line() As LineElement 
    Set Line = mLine 'Set keyword must be present 
End Property 

Public Property Set Line(vLine As LineElement) ' ByRef is the default in VBA 
    Set mLine = vLine 'Set keyword must be present 
End Property 
0

Set oświadczenie jest używany do odniesienia obiektu do zmiennej obiektu. Nie musisz używać słowa kluczowego Set, jeśli masz do czynienia z pierwotnymi i natywnymi wbudowanymi typami, takimi jak liczba całkowita, double, string i tak dalej. Tutaj mamy do czynienia z obiektem typu LineElement.

0

Spróbuj

Private mLine As new LineElement 

Public Property Get Line() As LineElement 
    Set Line = mLine 
End Property 

Public Property Set Line(ByRef vLine As LineElement) 
    Set mLine = vLine 
End Property 
Powiązane problemy