2013-03-07 18 views
0

我有一个Excel中的数据驱动工具,它有5个多页面用户表单。每个表单都包含多个数据字段(所有表单中都有250多个数据字段)。 13个控制组成每个领域。所以它们很大。显示和隐藏用户表单 - 超出堆栈错误

系统允许用户通过单击“显示注释”按钮打开每个字段的注释表单。它是连接起来使用基于类的事件,使用下面的代码:

Private Sub mShowGroup_Click() 
    Dim fm As formCommentDisplay 'the form to be shown 

    'Snip not relevant code 

    HideDataEntry 
    fm.Show 
    ShowDataEntry 
End Sub 

的HideDataEntry子隐藏在主数据输入,从而使惟有评论表单是可见的。这是必需的,因为用户可以使用打印屏幕显示评论的打印版本 - 如果表单未隐藏,则用户不能关闭打印屏幕。

问题是如果用户打开多个评论表单,则堆栈溢出。原因是ShowDataEntry子。

Sub ShowDataentry() 
    Dim fForm as Variant 

    For each fForm in UserForms 
     fForm.Show 
    Next fForm 
End Sub 

该代码显示了适当的数据输入表单,但是由于表单是Modal,它将保留在堆栈中。然后下一次显示注释表单时,堆栈将会增加并增加,直到出现堆栈错误。

我正在努力想办法解决这个问题。由于控件数量众多,我不希望每个控件都有事件代码。这就是事件代码在类中并通过对象集合触发的原因。有一个想法是隐藏了表单,然后当代码完成时使用表单中的事件触发器来重新显示表单 - 但我认为这不可能。

任何想法?

+0

你如何尝试运行设置'ShowModal = False' – 2013-03-08 00:09:11

+0

我需要的形式是模态 – 2013-03-08 04:46:41

回答

0

我最终将ShowDataEntry的调用移动到表单最初调用的位置。

我检查是否有任何表单仍然加载并假设我想要显示它们。由于这是在加载表单的相同循环中,堆栈有效地重置为表单最初打开时的状态。