我可能无法理解"卸载"除了阅读有关卸载语句的帮助之外,它表示表单已从内存中删除。这告诉我下次使用"加载表单名"加载表单时声明,它应该通过" Userform_Initialize"事件再次。它不是。我错过了什么?感谢
答案 0 :(得分:4)
有趣 - 我能够重现你提到的行为,并且发现它有点令人惊讶。起初我认为这可能是一个错误,它与表单卸载和内存实际回收之间的潜在时间差距有关,但后来我咨询了" VB& VBA in Nutshell" (如果你是VBA程序员的话,这本书非常重要的金币)并查阅卸载声明并且发现:
从内存中卸载表单时,只卸载表单窗口和控件;附加到表单的代码和from模块中的控件保留在内存中
所有这些听起来都更接近Hide
,然后这个名字会暗示。显然有足够的遗骸在后台加载,当加载语句重新加载表单时,不会重新触发Initialize
。
简单的解决方法 - 不要加载用户表单。而不是使用看起来像这样的代码启动它们:
Private Sub CommandButton1_Click()
Load UserForm1
End Sub
使用:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
即使在卸载表单后,显示表单也会触发initialize事件。有趣的是,我之前引用的这本书是在1998年印刷的,在Load语句中的条目中提到.Show
是更现代的显示用户形式的方式。除非您有充分理由使用Load
,否则我建议您坚持使用Show
。