Оцените, является ли пользовательская форма модальной или немодальной в VBA - PullRequest
0 голосов
/ 28 марта 2020

Есть ли способ в VBA (Excel) определить, является ли свойство пользовательской формы модальным или немодальным?

Я думал, что смогу просто оценить атрибут ShowModal, но, очевидно, bolFormState = UserForm1.ShowModal не работает (выдает сообщение об ошибке в UserForm1.ShowModal method or data member not found).

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Добавьте следующую функцию к вашей пользовательской форме

Private Function isFormModeless() As Boolean

    On Error GoTo EH

    Me.Show vbModeless
    isFormModeless = True

    Exit Function

EH:
    isFormModeless = False

End Function

Вы можете проверить ее с помощью

Private Sub CommandButton1_Click()
    MsgBox "This form is " & IIf(isFormModeless = True, "Modeless", "Modal")
End Sub
0 голосов
/ 28 марта 2020

Простой обходной путь

Если вы хотите запрашивать только во время отображения пользовательской формы (без изменения режима), вы можете получить выгоду от другого поведения свойства ShowModal, используя (publi c) переменная в вызывающем коде.

Объяснение:

Так как только немодальный вызов может выполнить последнее назначение bModal = False немедленно, переменная bModal может быть запрошена во время выполнения экземпляра UserForm. время

Пример кода вызова

Option Explicit
Public bModal

Sub zeigeUF()
Dim info As clsModal
bModal = True           ' provide for default (vbModal or 1)

With New UserForm1
    .Show vbModeless
End With

'if ShowModal property is set to vbModeless (equals False or 0)
'the following assignment gets executed immediately
'and the variable bModal can be asked for in UserForm
bModal = False             ' visible for Userform only in case of modeless display


End Sub

...