Myślałem, że to będzie proste, ale okazuje się dość trudne. Wszelkie rady lub pomysły byłyby aprobowane.VBA Jak zmusić funkcję do powrotu po naciśnięciu przycisku formularza
Mam formularz w programie Excel, że po naciśnięciu określonego przycisku potrzebuję użytkownika, aby wprowadzić hasło przed uruchomieniem kodu dla tego przycisku.
mogę po prostu użyć inputbox, ale to pozwoli ktoś zobaczyć hasło, gdy jest on wpisany w. Więc chcę użyć drugiego formularza z pola tekstowego i ustaw jego PasswordChar parametr *
Tutaj to jest problem. Chcę użyć kodu jak ten
if checkPassword("Please enter your password") = False then exit sub
checkPassword
to funkcja, która pobiera ciąg jako parametr. Ta funkcja otwiera formularz i umieszcza wiadomość w etykietce. Użytkownik powinien wprowadzić hasło i kliknąć OK.
sub btnOK_Click()
powinien sprawdzić, czy hasło jest poprawne, a następnie wymusić funkcję, która otworzyła formularz, aby powrócić True, jeśli hasło było w porządku lub False, jeśli hasło było nieprawidłowe.
Po prostu nie mogę wymyślić, jak wymusić powrót funkcji. Próbowałem ustawić zmienną globalną na wartość True lub False, gdy użytkownik kliknie przycisk OK, a następnie wyładuje formularz. Powoduje to, że funkcja zwraca, ale także resetuje wszystkie zmienne globalne ustawione przez formularz.
Oto moja funkcja, która zwraca postaci
Function checkPassword(message As String) As Boolean
frmPassword.Show
frmPassword.passwordMsg.Caption = message
'passwordStatus is a global variable
If passwordStatus = True Then checkPassword = True Else checkPassword = False
End Function
Oto sub umieszczonego przycisku OK formach:
Private Sub passwordok_Click()
If Me.passwordtext.Text = "password" Then
passwordStatus = True
Else
passwordStatus = False
End If
Unload Me
End Sub
Cześć Alex, dzięki za to rozwiązanie. Próbowałem rozwiązania od Siddhartha i działało dobrze (Wielkie dzięki dla Siddhartha ponownie), ale twoje rozwiązanie jest bliższe temu, co pierwotnie chciałem zrobić. Wypróbowałem to i działa świetnie, znacznie prostsze i mniej obciążające. Dzięki – PrestonDocks
użyłem tego, działa on niesamowicie, z wyjątkiem tego, że musiałem umieścić 'passwordStatus = Me.passwordtext.Text =" password "' po "wyładuj mnie", ponieważ rozładowanie resetuje tę zmienną, czy spowoduje to problemy? – user1759942