在Excel VBA中卸载表单似乎不起作用

时间:2015-07-12 02:38:38

标签: excel excel-vba vba

我可能无法理解"卸载"除了阅读有关卸载语句的帮助之外,它表示表单已从内存中删除。这告诉我下次使用"加载表单名"加载表单时声明,它应该通过" Userform_Initialize"事件再次。它不是。我错过了什么?感谢

1 个答案:

答案 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