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 子隐藏了主数据输入表单,因此只有评论表单可见。这是必需的,因为用户可以使用 printscreen 显示评论的打印版本 - 如果表单未隐藏,则用户无法关闭打印屏幕。

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

Sub ShowDataentry()
    Dim fForm as Variant

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

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

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

有任何想法吗?

4

1 回答 1

0

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

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

于 2013-03-08T04:48:04.600 回答