在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