Кнопка Userform Next не работает, когда проверка проверки оператора if завершается неудачно и выдает сообщение msgbox - PullRequest
0 голосов
/ 19 октября 2019

У меня есть пользовательская форма с кнопкой Далее. В подпункте Next_Click у меня есть длинная инструкция if, которая проверяет каждое поле на полноту и достоверность данных.

Есть два поля даты, в которых по умолчанию указана сегодняшняя дата, чтобы показать пользователю необходимый формат даты. Но так как он предварительно заполнен, я подумал, что люди могут забыть ввести правильную дату, поэтому, если дата все еще является сегодняшней датой, когда нажимается кнопка «Далее», появляется всплывающее окно с вопросом, означает ли пользователь, чтобы дата была сегодняшней датой,

Идея в том, что если пользователь скажет «нет», он получит возможность вернуться и изменить дату, а затем, когда снова нажмет «Далее», будет выполнена та же проверка проверки, если-оператор, и затем он сможет перейти кследующая страницаЕсли они говорят «да», то следует просто продолжить проверку проверки и перейти к следующей странице.

НО это похоже на всплывающее окно msgbox, не позволяющее пользовательской форме переключаться на следующую страницу (на самом деле это отдельная пользовательская форма, потому что я не знал о многостраничной вещи, когда делал это). Я попытался поместить недопустимые данные в другое текстовое поле, и, когда мой msgbox всплыл и велел мне повторно ввести данные, я смог ввести данные и перейти на следующую страницу. Наверное, что-то не так с моими текстовыми полями для дат. Я вставил ниже все, что относится к текстовому полю даты в подпункте Next_Click.

Редактировать: я должен также упомянуть, что, если я введу дату, отличную от сегодняшней, кнопка Далее будет работать нормально.

1     Private Sub IB_Next_Click()
2     'Data validation
3                 
4             ElseIf Me.IB_LoanDate.Value = "" Then
5                 blahAnswer = MsgBox("Please enter a loan date.")
6                 Me.IB_LoanDate.SetFocus
7                 Exit Sub
8             ElseIf IsDate(Me.IB_LoanDate.Value) = False Then
9                 blahAnswer = MsgBox("Please enter a valid date.", , "Invalid Entry")
10                Me.IB_LoanDate.SetFocus
11                 Exit Sub
12            ElseIf CDate(Me.IB_LoanDate.Value) = VBA.Date Then
13                loanDateAnswer = MsgBox("The loan date is still set to the default of today's date. Was that intentional?", vbYesNo, "Validation Check")
14                    If loanDateAnswer = vbNo Then
15                        Me.IB_LoanDate.SetFocus
16                        Exit Sub
17                    End If
18            ...
19            Else
20            ...
21            LoanWiz_IB.Hide
22            LoanWiz_IntTerms.Show
23        End If
24    End Sub

Если я нажимаю «Нет», он выполняет «Выход из суб», как и положено, но затем кнопка «Далее» не работает после того, как я фиксирую дату. Если я нажимаю «Да», это похоже на то, что он перестает читать код после того, как он читает строку 17. Какие-либо предложения о том, чтобы заставить его читать остальную часть кода?

1 Ответ

0 голосов
/ 19 октября 2019

Эти блоки ElseIf и последний блок Else являются взаимоисключающими - последний блок Else не запускается, если выполняется любой из других блоков. Таким образом, вам не нужны эти последние Else, а строки Hide и Show должны быть снаружи, если If

 Private Sub IB_Next_Click()
 'Data validation

          ElseIf Me.IB_LoanDate.Value = "" Then
              blahAnswer = MsgBox("Please enter a loan date.")
              Me.IB_LoanDate.SetFocus
             Exit Sub
         ElseIf IsDate(Me.IB_LoanDate.Value) = False Then
             blahAnswer = MsgBox("Please enter a valid date.", , "Invalid Entry")
            Me.IB_LoanDate.SetFocus
             Exit Sub
        ElseIf CDate(Me.IB_LoanDate.Value) = VBA.Date Then
            loanDateAnswer = MsgBox( _
         "The loan date is still set to the default of today's date. Was that intentional?", _
          vbYesNo, "Validation Check")
            If loanDateAnswer = vbNo Then
                Me.IB_LoanDate.SetFocus
                Exit Sub
            End If
        ...
        End If
        ...
        LoanWiz_IB.Hide
        LoanWiz_IntTerms.Show

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