介紹:我知道-顯示UserForms-最佳做法是處理QueryClose用戶窗體代碼內(If CloseMode = vbFormControlMenu ...)在Unload Me其中不執行任何操作,僅執行膽小的Me.Hide指令(在通過防止[x]參與并最終自我毀滅之后Cancel = True)在[類別]代碼中設置相關的變量/ [屬性](例如.IsCancelled=True)為了能夠由調用代碼卸載UF 。有用的鏈接出色的概述“ UserForm1.Show?” 可以在https://rubberduckvba.wordpress.com/2017/10/25/userform1-show/上找到, 也可以在許多示例性SO答案中找到(Mathieu Guindon又名Mat's Mug和RubberDuck)。1)模態用戶窗體的工作示例據我了解-并且我確實嘗試學習-,以下代碼對于模態 UF 應該沒問題:情況1a) ..具有UF實例的局部變量,通??梢钥吹剑篜ublic Sub ShowFormA Dim ufA As UserForm1 Set ufA = New UserForm1' show userform ufA.Show ' equivalent to: ufA.Show vbModal' handle data after user okay If Not ufA.IsCancelled Then ' do something ... End If' >> object reference destroyed expressly (as seen in some examples) unload ufAEnd Sub情況1b) ..沒有局部變量,但使用了With New代碼塊:' ----------------------------------------------------------' >> no need to destruct object reference expressly,' as it will be destroyed whenever exiting the with block' ---------------------------------------------------------- With New UserForm1 .Show ' equivalent to: ufA.Show vbModal ' handle data after user okay If Not .IsCancelled Then ' do something ... End If End With2)問題使用MODELESS UserForm實例會出現問題。好的,with塊方法(參見1b)應該足以對其進行x-it處理后銷毀任何對象引用: With New UserForm1 .Show vbModeless ' << show modeless uf End With如果我嘗試,但是a)獲取有關可能的用戶取消的信息以及b)Unload如果在Show指令后使用局部變量(例如“ ufA”)進行了洗禮,則為表格,正是出于表單的原因,所有代碼行將立即執行:代碼顯示表單,下一刻..代碼沒有發現用戶取消,因為沒有時間進行任何用戶操作,下一刻..[如果用戶表單使用本地變量,代碼將卸載表單]3)問題我如何處理a)通過MODELESS表單的調用代碼正確報告的UserForm取消,以及b)如果使用局部變量,則進行(必要嗎?)卸載?
VBA-正確銷毀無模式UserForm實例
慕婉清6462132
2019-11-19 14:52:49