返回列表 上一主題 發帖

求教有關UserForm使用完後不佔記憶體的清除方法

回復 1# clio
個人覺得 unload 是寫在 form events(如click) 內要關閉、釋放自己這個表單用的。
而不是像你寫在 show 下面,你這樣寫可能會有不良效果。

例如你的方法二,
如果在 UserForm_Initialize() 加一行 MsgBox "Hi",你猜它會被呼叫幾次?
答案是兩次!!
第一次是發生在 UserForm1.Show,因為前面沒明確寫出 Load (這是允許的),VBA自動幫你load建立Form。
然後因為你按表單的 x 關閉時,UserForm1已經釋放掉了,所以當你執行到 Unload UserForm1 ,VBA又自動幫你建立Form,再釋放掉。

而方法一,是把 UserForm1當物件類別用
我覺得吧, set ... = new ...,就是取代 Load 作用,Unload AForm我是不知道有沒有效果。
物件的記憶體不用太糾結,印象中 VBA 應該是採用 garbage collector 機制,計算引用次數 (reference count),當引用次數為零就會找時機回收記憶體了。
既然AForm是區域變數,離開那個Sub 就釋放了(也就是不引用了),這裡甚至加不加Set AForm = Nothing都無所謂。

我的話,要嘛按鈕內做完一些事直接 unload me關閉視窗,要嘛就都不加 unload,手動按X關閉視窗。
有錯請指正喔~
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

        靜思自在 : 布施如播種,以歡喜心滋潤種子,才會發芽。
返回列表 上一主題