Ошибка 91 «Переменная объекта или переменная блока не установлена» в пользовательской форме 01.Показать код - PullRequest
0 голосов
/ 11 марта 2020

У меня есть простой проект VBA, в котором я использую пользовательскую форму для записи данных на страницы рабочей книги, а некоторые результаты вычислений Excel отображаются на пользовательской форме. Имя пользовательской формы - UserForm01. Я вставил кнопку управления commandButton / ActiveX (я пробовал оба) на странице приветствия, которую я хочу открыть / вызвать мою форму пользователя и скрыть книгу. Я использовал этот простой код для выполнения этого действия в течение длительного времени. Но недавно я внес некоторые изменения в модуль Sub UserForm_Initialize и после этого продолжаю получать

Ошибка 91; Range Object не установлен

или другие признаки ошибки, связанные с неустановленным объектом.

Sub CommandButton1_Click()
UserForm01.Show
End Sub

, где кнопка команды вставлена ​​/ находится на странице приветствия Excel файла vba. Я назначил UserForm01 как Object и установил UserForm01 = UserForm et c ... В качестве альтернативы, я измерил UserForm01 как UserForm или Variant без какого-либо положительного результата ... Время от времени кажется, что код работает, но потом переходит к sub UserForm_Initialize, где он снова застрял, и я получаю одно из сообщений об ошибке, что объект диапазона не устанавливается et c .. ???? Я буду признателен за любую помощь в этом вопросе ... что действительно раздражает, что я застрял в этом простом коде ...

1 Ответ

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

Вот одна процедура для вызова пользовательской формы.

Sub RunUserForm01()

    Dim Frm As UserForm01

    Set Frm = New UserForm01
    With Frm
        .TextBox1.Value = "Good morning"
        .Show
    End With

    Unload Frm
    Set Frm = Nothing
End Sub

UserForm01 - это имя формы, которая появляется в списке пользовательских форм Project Explorer. Код создает новый экземпляр этой формы здесь: Set Frm = New UserForm01. Событие инициализации сработает в этот момент. Поместите точку останова в этой строке и выполните следующий код с помощью F8, чтобы локализовать любой отсутствующий объект в процедуре инициализации.

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

После FrmShow форма получает контроль над VBA. , Управление возвращается к этой точке, когда код встречает Me.Hide или нажата кнопка выхода. Затем мой код выгружает форму и удаляет всю память о ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...