Я пишу решение в 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. Коллекция пользовательских форм? Дело в том, что если пользователь движется вперед, а затем назад, две копии формы появляются в памяти, а excel исключает исключения из двух модальных форм.
Приветствия, Ник
Это не работает, но вы вдохновили мое решение. Проблема заключалась в том, что я передавал форму в sub как тип MSForms.UserForm. Это предоставляет только подмножество свойств формы, поэтому не передает действительный объект формы, а копирует его. Свойство .name не существует для MSForms.Userform, поэтому ваше решение не сработало, но, изменив тип переменной на Variant, я мог бы правильно выгрузить форму. Поэтому спасибо за то, что вы на правильном пути. –