在初始化时closures表单会抛出错误

我正试图做一个标准化的过程来更新一个特定的工作表。 除了我给他们的function,我不需要用户控制。 要做到这一点,我已经locking工作表,然后形成与某些macros加载。 一种表单旨在从表单中删除数据。 它可以正常工作,但是我试图更新它,所以如果你打开它没有任何相关的数据要删除,它吐出一个对话框,然后使用卸载我closures表单。 这closures窗体,但随后excel抛出一个错误:

运行时错误“91”:对象variables或块variables未设置

表单从仅包含一行的模块加载:

MyForm.Show 

这是Excel从哪里抛出错误的地方。 在初始化表单时,combobox将根据表单中的数据填充值。 如果加载后combobox为空,表单应该抛出对话框,然后closures。

 If ComboBox.ListCount = 0 Then MsgBox "No Data" Unload Me End If 

我怎样才能执行负载检查没有从模块抛出的错误?

这实际上并不能回答你的问题。 但是我build议在实际加载表单之前,先在模块代码中进行检查。 就像是:

 Sub LoadForm() If Sheets("Sheet1").Range("A1") = "" Then '<~~ your condition here MsgBox "No Data" Else MyForm.Show End If End Sub 

另一种方法是将Unload Me放入Activate事件中:

 Private Sub UserForm_Activate() ... If ComboBox.ListCount = 0 Then MsgBox "No Data" Unload Me End If End Sub 

当您尝试从其initialize事件中卸载userform时,会发生问题。 因为对象还没有完成初始化,所以不能被卸载。 解决此问题的最佳方法是在尝试初始化表单之前检查条件,或者将检查和随后的卸载语句放入用户窗体的激活事件中。 只要表单从隐藏状态变为可见状态,就会调用Activate,在表单完全初始化后发生。