在初始化时关闭表单抛出错误

时间:2014-12-02 21:50:12

标签: excel vba

我正在尝试制作更新特定工作表的标准化流程。除了我给他们的功能外,我不需要用户控制。为此,我已锁定工作表,然后加载某些宏的表单。一个表单旨在从工作表中删除数据。它编写和测试工作正常,但我试图更新它,以便如果您打开它没有任何相关数据要删除,它会吐出一个对话框,然后使用卸载我关闭表单。这会关闭表单但是excel会抛出错误:

  

运行时错误'91':对象变量或未设置块变量

表单是从只有一行的模块加载的:

MyForm.Show

这是excel抛出错误的地方。在对表单进行初始化时,组合框将根据工作表中的数据填充值。如果加载后组合框是空的,表单应该抛出对话框然后关闭。

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

如何在不从模块中抛出错误的情况下执行加载检查?

4 个答案:

答案 0 :(得分:3)

这实际上并没有回答你的问题。但我建议在实际加载表单之前检查模块代码。类似的东西:

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

答案 1 :(得分:2)

另一种方法是将Unload Me置于Activate事件中:

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

答案 2 :(得分:1)

当您尝试从其初始化事件中卸载用户窗体时,会出现问题。由于对象尚未完成初始化,因此无法卸载。解决此问题的最佳方法是在尝试初始化表单之前检查条件,或者将检查和后续卸载语句放入userform的activate事件中。每当表单从隐藏变为可见时调用Activate,这在表单完全初始化后发生。

答案 3 :(得分:0)

Sub RunForm()
On Error GoTo error
UserForm1.Show
error:
End Sub