프로 시저의 범위 내에서 선언 된 변수는 나중에 올바르게 삭제됩니다.
예에서 myRange
은 Main
의 범위 내에서 정의되었으므로 적절하게 파괴/정리됩니다. 이 코드 모듈이 있다면
그러나 :
Public testForStackOverflow As Range
Sub main()
Call mySubSub
MsgBox testForStackOverflow.Address
Call mySubDestroyer
If (testForStackOverflow Is Nothing) Then
MsgBox "destroyed"
End If
Call mySubSub
End Sub
Sub mySubSub()
Set testForStackOverflow = Range("A1")
End Sub
Sub mySubDestroyer()
Set testForStackOverflow = Nothing
End Sub
Sub callAfterRunningMain()
MsgBox testForStackOverflow.Address
End Sub
를 글로벌 자동 (예상한다로) mySubSub
후 정리되지 않습니다. 당신이 기대하지 수 무엇
당신이 main
방법을 실행 한 후 callAfterRunningMain
을 실행하면, 글로벌 여전히 값을 가지고 있다는 것입니다. 이 글로벌은 수동으로 수행하거나 Excel을 닫거나 코드 어딘가에 End
을 사용하지 않으면 정리되지 않습니다.
전역 변수를 많이 사용하고 어떻게 든 지우지 않은 경우 무기한으로 메모리에 유지합니다. 이것은 userforms의 경우이고 UserForm.hide
대 Unload Me
대 너무 사용합니다.
관련 질문은 실제로 내가 설명하는 것을 다루지 않으며 매우 혼란 스러울 수 있습니다. 특히 사용자 정의 폼을 "재설정"하려고 할 때.
가능한 복제본 [VBA 함수 내에서 개체를 Nothing으로 설정해야합니까?] (http://stackoverflow.com/questions/517006/is-there-a-need-to-set-objects-to-nothing -inside-vba-functions) –
여기를 참고하십시오 : http://stackoverflow.com/questions/4106153/vba-garbage-collector-details –
또한 http://stackoverflow.com/a/11396211/78522를 참조하십시오. –