Ок, ходи на лошадях,
У меня есть решение, которое работает, но не так, как вам нравится, и я скажу вам, почему оно не должно работать, как вы хотите, чтобы оно работало.
Первое решение:
Поместите этот код в "ThisWorkbook" -Модуль:
Option Explicit
Public Endt
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Call Modul1.TimeBeforeReentry
End Sub
Примечание: здесь вы можете использовать другое событие, а не Workbook_SheetChange, но оно здесь для меня. Недостатком является то, что он также запускает все остальное, что изменяет лист.
Затем поместите этот код в модуль1:
Sub TimeBeforeReentry()
If ThisWorkbook.Endt > Timer Then
Else
UserForm1.Show
If UserForm1.Passwordfield.Value = "password" Then
UserForm1.Passwordfield.Value = ""
ThisWorkbook.Endt = Timer + 60
Else
MsgBox "Password is incorrect."
Worksheets(1).Range("K19") = ""
Application.Goto Worksheets(1).Range("K19")
End If
End If
End Sub
И, наконец, в пользовательской форме:
Private Sub CommandButton1_Click()
Me.Hide
End Sub
А теперь объяснение и почему вы не должны помещать все в форму пользователя.
Публичная переменная Endt находится в этой рабочей книге и будет сохранена там (если только не будет ошибки!). Как только событие запущено, в нашем случае workbook_SheetChange будет вызван модуль. Здесь вся логика и это хорошо. Поскольку вы не хотите создавать «smartUI», проблема с логикой в пользовательских формах заключается в том, что практически невозможно поддерживать и приспосабливаться к изменениям. Я научился этому нелегко, поверьте мне .. Я не эксперт по этой теме, но читаю эти ссылки
- Smart UI
- Model View Presenter в качестве альтернативы Smart UI
Sub TimeBeforeReentry затем проверяет время и соответственно отображает форму пользователя. Если пароль введен, то Endt установлен, и если следующее событие инициируется в Endt, тогда пароль вводить не нужно. В противном случае пароль понадобится для повторного входа.
Пользовательская форма - это просто устройство обмена данными, оно не имеет ничего общего с логикой, оно просто хранит данные и доставляет их. Вот для чего пользовательский интерфейс!
Надеюсь, это поможет удаче в проекте!