Проблема с отображением пользовательской формы после завершения - PullRequest
0 голосов
/ 31 марта 2020

1-й, что я хочу сделать:

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

2-й, что у меня есть (соответствующий код):

Основной код формы:

Private Sub createFastButton_Click()
    Me.Hide
    formSec.Show
End Sub

Дополнительный код формы:

Private Sub cancelButton_Click()
    Me.Hide
    formMain.Show
End Sub
Private Sub UserForm_Terminate()
    formMain.Show
End Sub

3-ий, проблема:

Если я используйте кнопки управления для перемещения между формами, все работает как задумано. Но если я использую кнопку закрытия окна «X» на вторичной форме и пытаюсь открыть ее снова из основной формы, она теряет все функциональные возможности (основная форма работает нормально). Он просто показывает вторичную форму, как я ее вижу, когда я использую «View Object» в редакторе VBA. Ни одна из кнопок не работает, и ни один из предполагаемых полей и меток не заполнен. Даже кнопка «X» не работает. Для меня кажется очевидным, что проблема в разгрузке вторичной формы. Я попытался заменить Me.Hide во вторичной форме на Unload Me, и точно так же происходит, как будто я нажимаю кнопку "X". Поэтому мне нужно что-то сделать с Sub UserForm_Terminate(), я попытался добавить туда Me.Hide и, как и ожидалось, ничего не сделал.

У меня есть решение моей проблемы?

Спасибо заранее .

Ответы [ 2 ]

1 голос
/ 31 марта 2020

основная процедура, вызывающая основную форму:

With New formMain
    .Show
End With

основная форма, вызывающая вторичную форму

Private Sub createFastButton_Click()
    Me.Hide
    With New formSec
        .Show
    End With
    Me.Show
End Sub

дополнительная форма

Private Sub cancelButton_Click()
    Me.Hide
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
   If CloseMode = VbQueryClose.vbFormControlMenu Then Cancel = True
End Sub

без необходимости UserForm_Terminate() во вторичной форме, если не указано иное

1 голос
/ 31 марта 2020

Нажатие на «X» вызывает событие QueryClose, которое вам нужно обработать, например:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = VbQueryClose.vbFormControlMenu Then
        Cancel = True
        Me.Hide
        ' Add more code here to respond to form close event
    End If
End Sub

См. здесь для очень полезного объяснения.

...