我在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
代码显示了相应的数据输入表单,但由于表单是Modal,它将保留在堆栈中。然后,下次显示注释表单时,堆栈将增加并增加,直到超出堆栈错误。
我正在努力想办法解决这个问题。由于控件数量庞大,我不希望每个控件都有事件代码。这就是事件代码在类中,并通过对象集合触发的原因。我有一个想法是隐藏表单,然后当代码完成使用表单中的事件触发器重新显示表单时 - 但我不认为这是可能的。
有什么想法吗?
答案 0 :(得分:0)
我最终将ShowDataEntry的调用移到了最初调用表单的位置。
我检查是否仍然加载任何表格并假设我想要显示它们。由于这是在加载表单的同一循环中,因此堆栈有效地重置为最初打开表单时的状态。