求教有關UserForm使用完後不佔記憶體的清除方法
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
回復 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關閉視窗。
有錯請指正喔~ |
|
|
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。
|
|
|
|
|