Я пишу решение в Excel, которое использует несколько связанных форм ввода данных. Для перемещения между последовательностями форм пользователь может нажать кнопку «Предыдущая» или «Следующая». Текущая форма выгружается, а новая загружается и открывается.
Sub NextForm(curForm As MSForms.UserForm, strFormName As String)
Dim intCurPos As Integer
Dim strNewForm As String
Dim newForm As Object
intCurPos = WorksheetFunction.Match(strFormName, Range("SYS.formlist"), 0)
If intCurPos = WorksheetFunction.CountA(Range("SYS.formlist")) Then
Debug.Print "No"
Else
Unload curForm
strNewForm = WorksheetFunction.Index(Range("SYS.formlist"), intCurPos + 1)
Set newForm = VBA.UserForms.Add(strNewForm)
newForm.Show
End Sub
Код "как есть" позволяет в любой момент добавлять новые формы в последовательность путем редактирования диапазона "SYS.formlist".
Одна проблема, которую я заметил, заключается в том, что даже после выгрузки текущей формы она все равно остается в коллекции VBA.Userforms. Я предполагаю, что это потому, что этот код был вызван из этой пользовательской формы.
Есть ли способ принудительно удалить эту форму из коллекции VBA.Userforms? Происходит следующее: если пользователь перемещается вперед, а затем назад, в памяти появляются две копии формы, и Excel создает исключения, связанные с открытием двух модальных форм.
Ура,
Ник