Как требовать пароль для завершения пользовательской формы в VBA - PullRequest
0 голосов
/ 10 июля 2019

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

Я попытался использовать оператор if, как описано ниже. Пользовательская форма остается открытой, но не инициализирована, поэтому пользователь не может ввести пароль или запустить пользовательскую форму вообще.

Private Sub UserForm_Terminate()

    Password = InputBox("Enter Password")
    If Password = "syntax" Then
        UserForm1.Hide
    ElseIf Password <> "syntax" Then
        UserForm1.Show
    End If
    End

End Sub

Нет сообщений об ошибках, но если окно редактора VBA не открыто, пользователь должен полностью закрыть Excel. Любой совет о том, что попробовать дальше приветствуется. Заранее спасибо

1 Ответ

1 голос
/ 10 июля 2019

Вы можете использовать UserForm_QueryClose для перехвата всех «закрытых» действий в пользовательской форме.Этот код будет добавлен в саму пользовательскую форму.

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim password As String

    password = InputBox("Enter Password")
    If password = "syntax" Then
        Cancel = False 'If password is correct, allow close event to proceed
    ElseIf password <> "syntax" Then
        Cancel = True 'If password is incorrect, cancel the close event
    End If
End Sub

Как указывал К.Д., это все равно не помешает никому приостановить выполнение кода и вручную закрыть форму (Excel просто не обеспечивает этогоуровень безопасности).

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