在Excel VBA中卸载表单似乎不起作用
这可能是我不明白什么“卸载”,但阅读关于卸载声明的帮助,它说,表格是从内存中删除。 这告诉我下次使用“Load formname”语句加载表单时,应该再次通过“Userform_Initialize”事件。 它不是。 我错过了什么? 谢谢
有趣的 – 我能够重现你提到的行为,也发现它有些令人惊讶。 起初,我认为这可能是一个错误,它与表单卸载和内存实际回收之间的时间差距有关,但是后来我咨询了“VB和VBA in Nutshell”(一本值得它重量的书如果你是一名VBA程序员),并查阅卸载声明,并遇到:
从内存中卸载表单时,只卸载表单窗口和控件; 附加到来自模块的表单和控件的代码保留在内存中
所有这些听起来似乎更接近Hide
然后这个名字会显示。 显然在后台加载的时候,当表单被load语句重载时, Initialize
不会被重新触发。
简单的解决方法 – 不要加载用户表单。 而不是使用如下所示的代码启动它们:
Private Sub CommandButton1_Click() Load UserForm1 End Sub
使用:
Private Sub CommandButton1_Click() UserForm1.Show End Sub
即使在表单被卸载后,显示表单也会触发初始化事件。 有趣的是,我之前引用的这本书是在1998年印刷的,并且在Load语句中提到,显示是显示用户表单的更现代的方式。 除非你有很强的理由使用Load
,否则我会推荐使用Show
。