VBA для пароля не продолжается после ввода пароля в текстовое поле - PullRequest
0 голосов
/ 28 июня 2018

В моей таблице есть кнопка, которая связана со следующим VBA:

Sub Button_01()
If UserForm1.checkPassword() = True Then
Sheet1.Range("C3").Value = 1
Else
End If
End Sub

С помощью этой кнопки я запускаю пользовательскую форму со следующим VBA:

Private passwordStatus As Boolean

Private Sub CommandButton1_Click()
    Dim a As String
    Dim Password As String
    a = "123"
    Password = TextBox1.Text
    passwordStatus = False
    If Password = a Then
        MsgBox "Password Correct.", vbInformation
        passwordStatus = True
        Unload Me
    Else
        MsgBox "Password Incorrect. Please try again.", vbCritical
    End If
End Sub

Function checkPassword() As Boolean
  UserForm1.Show
  checkPassword = passwordStatus
End Function

UserForm1 открывается без каких-либо проблем, но когда я ввожу пароль в пользовательскую форму, процесс не продолжается. The UserForm1 просто остается там.

Я не могу найти ошибку в своем коде, которая блокирует продолжение макроса после ввода пароля. Вы можете мне помочь?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

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

Обычный модуль:

Public CorrectPassword As Boolean

Sub Button_01()
    CorrectPassword  = False
    UserForm1.Show
    If CorrectPassword = True Then
        Sheets(1).Range("C3").Value = 1
    Else
        Msgbox "Password Incorrect. Please try again.", vbCritical
    End If
End Sub

Модуль пользовательской формы:

Private Sub CommandButton1_Click()
    Dim a As String
    Dim Password As String
    a = "123"
    Password = TextBox1.Text
    If Password = a Then CorrectPassword = True
    Unload Me
End Sub
0 голосов
/ 28 июня 2018

Для меня ваш код работает отлично, кроме:

Sub Button_01()
If UserForm1.checkPassword() = True Then
Sheet1.Range("C3").Value = 1
Else
End If
End Sub

Этот фрагмент кода выдаст ошибку.

Изменение:

Sheet1.Range("C3").Value = 1

Кому:

Sheets(1).Range("C3").Value = 1
  • Нажатие на кнопку на листе с назначенной ей Button_01 откроет форму пользователя 1.
  • В открытой пользовательской форме я могу нажать OptionButton1, и она запустит свое клик_event
  • Если я набрал «123» в textbox1, он скрывает пользовательскую форму, неправильный пароль вызывает сообщение msgbox для повторной попытки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...