Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Leffurt от 19 августа 2020, 11:28

Название: VBA Макросы: Принудительное обновление значений объектов, в частности объекта TextBox.
Отправлено: Leffurt от 19 августа 2020, 11:28
На пользовательской форме есть два объекта класса TextBox.

Значение второго текстбокса жёстко зависит от значения первого, поэтому второй текстбокс сделан недоступным для изменения.

В первый текстбокс пользователь вводит некоторое число, затем нажимает клавишу Enter. После нажатия клавиши Enter должно произойти вычисление значения, которое должно записаться во второй текстбокс. Но значение почему-то не записывается во второй текстбокс. Значение во второй текстбокс записывается, если передать фокус в первый текстбокс.

Для отслеживания нажатия клавиши Enter я использую событие TextBox1_Enter.

Как отобразить на экране изменение второго текстбокса после нажатия клавиши Enter?
Название: Re: VBA Макросы: Принудительное обновление значений объектов, в частности объекта TextBox.
Отправлено: Администратор от 19 августа 2020, 11:41
Событие "Enter" не относится к нажатию клавиши "Enter". Событие "Enter" запускается, когда фокус переходит в контрол, например, когда пользователь щёлкает внутри контрола.

Если вам надо отследить именно нажатие клавиши "Enter", используйте событие "KeyUp":
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   
    ' Проверка, какая клавиша нажата.
        ' Если пользователь нажал не Enter, а другую клавишу.
    If KeyCode <> 13 Then Exit Sub
   
    ' Какие-либо действия.
   
End Sub
Название: Re: VBA Макросы: Принудительное обновление значений объектов, в частности объекта TextBox.
Отправлено: Leffurt от 19 августа 2020, 11:51
Спасибо за информацию.
Событие "KeyUp" не помогло, т.к. после нажатия клавиши Enter фокус выходит из первого текстбокса и событие "KeyUp" не срабатывает.
Правильное поведение получилось после использования события "AfterUpdate".