Отображение и скрытие пользовательских форм - ошибка стека

У меня есть инструмент, управляемый данными в 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

Код показывает соответствующую форму ввода данных, но, поскольку форма является модальной, она останется в стеке. Затем в следующий раз, когда будет показана форма комментария, стек будет увеличиваться и увеличиваться до тех пор, пока не возникнет ошибка.

Я изо всех сил пытаюсь найти способ обойти это. Из-за большого количества элементов управления я не хочу иметь код события для каждого элемента управления. Вот почему код события находится в классе и запускается через коллекции объектов. Одна мысль, которая у меня была, это скрытие формы, а затем, когда код закончил использовать триггер события в форме, чтобы заново показать форму - но я не думаю, что это возможно.

Есть идеи?

1 ответ

В итоге я переместил вызов ShowDataEntry туда, где изначально вызывается форма.

Я проверяю, загружены ли еще какие-либо формы, и предполагаю, что хочу их показать. Так как он находится в том же цикле, который загружает форму, стек фактически возвращается в состояние, в котором форма была первоначально открыта.

Другие вопросы по тегам