在查看此代码时(其中大部分代码已被删除以简化此问题),我开始怀疑是否需要处理我使用的集合或类。
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时,我应该何时处置一个对象(如果有的话)?
答案 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
分配给持有对它们的引用的变量。