Открытие немодальной формы во время выполнения - VBA Excel

Попробую объяснить ситуацию:

У меня есть форма, которая создается и разрабатывается программно.

Итак, у меня есть экземпляр объекта с этой формой: объект "NewForm"

В какой-то момент мне нужно показать эту форму. Итак, я должен добавить объект NewForm в качестве формы:

VBA.UserForms.Add (NewForm.Name)

А потом показать форму,

UserForms(0).Hide
UserForms(0).Show

Проблема в том, что мне нужно показать немодальную форму, поэтому обычно простая

UserForms(0).Hide
UserForms(0).Show vbModeless

хватило бы. Однако, когда я использую эту последнюю строку кода, форма появляется и внезапно исчезает.

Я также пытался установить для свойства ShowModal значение False, но результат тот же.

Заранее спасибо,

С наилучшими пожеланиями

ПРИМЕЧАНИЕ. Я пытался использовать NewForm.Name.Show, и это не сработало, поэтому вместо этого я должен использовать коллекцию.


person MGum    schedule 25.06.2018    source источник
comment
2 вопроса: 1) Почему вы попробовали NewForm.Name.Show вместо NewForm.Show, и 2) Почему вы .Hide пишете форму еще до того, как .Show ее?   -  person Chronocidal    schedule 25.06.2018
comment
1) Я не упомянул, извините, но если я использую NewForm.Show, я получаю сообщение об ошибке (свойство или метод, не сгенерированный этим объектом) 2) Это правда, что мне не нужно его скрывать, поскольку его никогда не было показано раньше. Я удалил ".Hide", но проблема осталась   -  person MGum    schedule 25.06.2018


Ответы (1)


Это зависит от того, как вы выполняете код. Я попробовал очень простой тест, создав фиктивную форму NewForm, внутри которой ничего не было, и выполнил следующий код из окна Immediate редактора VB:

Sub test_NewFrom()
    Dim mForm As NewForm
    Set mForm = New NewForm
    mForm.Show (vbModeless)
End Sub

выполнение заканчивается, и форма автоматически закрывается, как вы описали. Теперь, если test_NewFrom представляет собой макрос, выполняемый из события Excel (например, фигура, расположенная на поверхности листа), он будет отображаться, как и ожидалось.

person pascal sautot    schedule 25.06.2018
comment
Я хотел бы поблагодарить вас за это! Я могу использовать макрос, вызываемый из фигуры на листе! Это решает мою проблему! - person MGum; 25.06.2018