Нелогично работает SetFocus для TextBox в приложенном примере - VBA
Формулировка задачи:
Всем доброго времени суток.
На форме есть три TextBox-а: в первых 2-х вводятся числа, а в 3-м (TabIndex=2) выводится их сумма.
Сложение происходит при событии TextBox2_Exit (TabIndex=1) с условием, что TextBox1 (TabIndex=0) не пустой (содержимое не важно).
Если TextBox1 пустой - событие в TextBox2_Exit должно прерваться, а фокус должен перейти на TextBox1.
При обработке возникли две неожиданные ситуации:
1. Условие на проверку TextBox1 выполняется 2 раза.
2. При выходе из TextBox2 фокус устанавливается на кнопке "Закрыть" (TabIndex=3)
Укажите, пожалуйста, где моя ошибка и исправьте ее.
Решение задачи: «Нелогично работает SetFocus для TextBox в приложенном примере»
textual
Листинг программы
Option Explicit 'Созданная в самом верху переменная будет 'доступна для всех процедур данного модуля. Dim myFlag As Boolean Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'Если выход происходит по нажатию клавиши "Tab" или "Enter", 'то нужные действия уже сделаны в процедуре "TextBox2_KeyPress". If myFlag = True Then 'Сбрасываем данные в переменной "myFlag". myFlag = False 'Выходим из процедуры. Exit Sub End If If TextBox1.Value = "" Then MsgBox "TextBox1 пустой !", vbCritical, "ERROR !" Me.TextBox1.SetFocus Exit Sub Else TextBox3.Value = Val(TextBox1.Value) + Val(TextBox2.Value) End If End Sub 'Событие "TextBox2_KeyDown" срабатывает, когда, 'курсор находится в "TextBox2" и нажимается клавиша на клавиатуре. Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Если нажаты клавиша "Enter" или клавиша "Tab". 'Порядковый номер в ANSI-таблице у клавиши "Enter" 13, 'у клавиши "Tab" 9. If KeyCode = 13 Or KeyCode = 9 Then 'Делаем пометку о том, что нажата клавиша "Enter" 'или клавиша "Tab". myFlag = True 'Делаем какие-то действия. If TextBox1.Value = "" Then MsgBox "TextBox1 пустой !", vbCritical, "ERROR !" 'Помещая в переменную "KeyCode" ноль, отменяем нажатие клавиши. KeyCode = 0 Me.TextBox1.SetFocus Exit Sub Else TextBox3.Value = Val(TextBox1.Value) + Val(TextBox2.Value) End If End If End Sub Private Sub CommandButton1_Click() Unload Me End Sub