2011-02-23 21 views
12

ho un modulo di classe, denominata Normal, in VBA con il seguente codice:Impostare la proprietà di classe VBA con riferimento all'oggetto

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 

Questa classe viene utilizzata dal codice seguente:

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 

inoltre, se cambio il codice nel modulo di classe per Normal:

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 

e la failin g linea per

Norm.SetLine(Line) 

ottengo un "oggetto non supporta questa proprietà o metodo" errore. Che cosa sto facendo di sbagliato in entrambi questi casi?

risposta

18

Prova questo:

+4

d'oh così semplice! Grazie per l'aiuto. (Odio l'editor VBA che non fornisce più assistenza per cose semplici come questa) –

+0

double d'oh! Le ore trascorse a caccia non possono essere assegnate ad ActiveX. Grazie. –

3

Entrambe le proprietà devono avere "Set" parola chiave

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

l'istruzione SET è usato per fare un riferimento di un oggetto ad una variabile oggetto. Non è necessario utilizzare la parola chiave Set, se si ha a che fare con tipi predefiniti nativi e primitivi come intero, doppio, stringa e così via. Qui hai a che fare con un oggetto di tipo LineElement.

0

Prova questa

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 
Problemi correlati