2009-11-17 6 views
3

En regardant ce code (dont la plupart a été supprimée pour simplifier cette question), j'ai commencé à me demander si je devais me débarrasser de la collection ou de la classe que j'utilisais.Quand dois-je disposer des objets dans VBA?

Option Explicit  
Private terminals As Collection 

Sub BuildTerminalSummary() 
    Dim terminal As clsTerminal 
    Call LoadTerminals 
    For Each terminal in terminals 
    ...Do work here 
    Next terminal 

    Set terminals = Nothing 

End Sub 

Private Sub LoadTerminals() 
    Do 
    Set terminal = New clsTerminal 

    ...Do work here 

    'Add terminal to terminals collection 
    terminals.Add terminal, key 

    Loop Until endCondition 
End Sub 

Lorsque vous traitez avec VBA, quand dois-je disposer d'un objet (si jamais)?

Répondre

3

On dirait que vous avez la portée de la collection de terminaux au mauvais endroit. Ont LoadTerminals retourner la création collection terminaux: -

Option Explicit  

Sub BuildTerminalSummary() 

    Dim terminals As Collection 
    Dim terminal As clsTerminal 

    Set terminals = LoadTerminals 

    For Each terminal in terminals 
    ...Do work here 
    Next terminal 

End Sub 

Private Function LoadTerminals() As Collection 
    Dim terminals As Collection : Set terminals = New Collection 
    Do 
    Set terminal = New clsTerminal 

    '' # ...Do work here 

    terminals.Add terminal, key 

    Loop Until endCondition 

    Set LoadTerminals = terminals 

End Function 

Tant que vous avez des variables il n'y a pas besoin de particulier « disposer » d'entre eux (que je suppose que vous voulez dire attribuer Nothing à la variable qui représente une référence pour eux.

Questions connexes