Я создаю пользовательскую форму с помощью 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 или щелчке в другом текстовом поле. Есть идеи, что мне не хватает?