VBA глобальный фрейм-массив - PullRequest
0 голосов
/ 07 апреля 2020

К сожалению, я не смог ответить на мой вопрос с помощью Google.

Я создал пользовательскую форму с фреймом, который содержит различные элементы управления (Textbox, Combobox, Listbox, Label). Обычно входные данные сохраняются непосредственно в рабочую книгу после того, как пользователь нажимает кнопку ОК.

Но есть одна особая ситуация, когда я хочу, чтобы пользователь заполнил несколько из этих входных пользовательских форм одну за другой и сохранил все содержимое Userforms наконец. Поэтому я создал глобальный объектный массив, в котором я сохранил входные кадры каждой пользовательской формы, заполнил пользователь.

В конце я хотел go просмотреть все эти кадры и их элементы управления и сохранить содержимое. в один шаг. Моя уже существующая функция сохранения использует кадр в качестве входных данных, поэтому я хотел провести l oop через мой массив кадров.

Вот мой пример кода: (conArr - глобальная переменная Object Array)

Public Sub btnOK_Click()
    conArrRow = 0
    ReDim Preserve conArr(conArrRow)
    Set conArr(conArrRow) = frmData.frameDataInput
    Unload Me
End Sub

После выгрузки пользовательской формы я возвращаюсь к основному коду.

For Each ctl In conArr(0).Controls
     MsgBox ctl.Name
Next

Здесь я получаю сообщение об ошибке в строке: For Each ctl In conArr(0).Controls

Microsoft Visual Basic
Run time error -2147418113 (8000ffff)
Automation error 
Catastrophic failure.

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

Я ценю любую помощь. Заранее спасибо.

...