Может быть, вам следует изменить свой подход.
Я бы предложил следующее:
В главном модуле используйте цикл для циклического открытия формы и цикл каждый раз, когда пользователь нажимает кнопку «Следующая форма».
'This sub in your main Module
sub ShowAndCyleForms
Dim FormName As String
Dim MyForm as Object
Dim CloseForm as Boolean
FormName = "frmMyForm"
do while CloseForm=False
set MyForm = VBA.UserForms.Add(FormName)
MyForm.Show
CloseForm=MyForm.CloseStatus
FormName=MyForm.strNewForm
Unload MyForm
Set MyForm = Nothing
loop
end sub
В каждой форме заявляйте:
Public CloseStatus as Boolean
Public strNewForm as String
В каждую кнопку «Следующая форма» вставьте что-то вроде:
Private Sub btnNextForm_Click()
CloseStatus=False
strNewForm= NextForm(Me.Name)
Me.Hide
End Sub
Измените вашу подпрограмму, чтобы она была функцией, которая доставляет следующее имя формы
Sub NextForm(strFormName As String)
Dim intCurPos As Integer
'Find out which form we are currently on from a list in a range
intCurPos = WorksheetFunction.Match(strFormName, Range("SYS.formlist"), 0)
If intCurPos = WorksheetFunction.CountA(Range("SYS.formlist")) Then
'We want to use the first one
intCurPos = 0
End If
'Get the name of the form to open
NewForm = WorksheetFunction.Index(Range("SYS.formlist"), intCurPos + 1)
'
End Sub
Вам также нужно будет изменить ваш O.K. просто скрыть форму вместо ее выгрузки и установить для параметра CloseStatus значение true.
Идея состоит в том, чтобы контролировать загрузку / выгрузку всех ваших форм извне и из одной процедуры.
Надеюсь, это достаточно ясно.