TextBox SetFocus не работает после обработки ошибки и MsgBox VBA Excel - PullRequest
1 голос
/ 13 июля 2020

Я создаю пользовательскую форму с помощью VBA в Excel и обнаружил очень специфическую проблему c. txtPymt - это текстовое поле, которое никогда не должно быть пустым. Чтобы предотвратить это, я закодировал это:

Private Sub txtPymt_AfterUpdate()

  'Prevent empty textbox
  On Error Resume Next
  txtPymt = txtPymt.Value + 0
  If Err.Number = 13 Then
    MsgBox "Please enter a valid value"
    txtPymt = Format(0, "Standard")
    txtPymt.SetFocus
    Err.Clear
    
  Else
    'Format entry
    txtPymt = Format(txtPymt.Value, "Standard")
    
  End If

End Sub

Таким образом я могу быть уверен, что текстовое поле принимает только числовые c значения (в противном случае код перейдет к коду ошибки) и избежать IsEmpty уязвимость к пробелам. После недопустимой записи значение текстового поля успешно изменяется на 0. Но я также хотел бы SetFocus в это же текстовое поле после нажатия Ok в MsgBox. Несмотря на то, что я поместил это в свой код, я не могу SetFocus в то же текстовое поле. Фактически, эта функция не работает ни с одним другим текстовым полем.

Я также пробовал сначала установить фокус на другое текстовое поле, а затем на txtPymt и использовать событие Exit вместо AfterUpdate, но я не имел успеха. Окно сообщения появляется при нажатии клавиши TAB или щелчке в другом текстовом поле. Есть идеи, что мне не хватает?

1 Ответ

0 голосов
/ 13 июля 2020

Попробуйте это

Private Sub txtPymt_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    On Error Resume Next
    txtPymt = txtPymt.Value + 0
    If Err.Number = 13 Then
        MsgBox "Please enter a valid value"
        Cancel = True
        Err.Clear
    Else
        'Format entry
        txtPymt = Format(txtPymt.Value, "Standard")
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...