我什么时候需要在VBA中处理对象

时间:2009-11-17 19:42:09

标签: vba dispose

在查看此代码时(其中大部分代码已被删除以简化此问题),我开始怀疑是否需要处理我使用的集合或类。

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

在处理VBA时,我应该何时处置一个对象(如果有的话)?

1 个答案:

答案 0 :(得分:3)

在我看来,好像你在错误的地方有终端收藏的范围。让LoadTerminals返回创建终端集合: -

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

只要你有变量,就没有必要特别“处理”它们(我猜你的意思是将Nothing分配给持有对它们的引用的变量。