Как удержать курсор в текстовом поле в пользовательской форме?

Вопрос или проблема

Я использую приведенный ниже код в пользовательской форме для сканирования штрих-кодов SKU и сохранения записей в определенном столбце, но после сканирования штрих-кода курсор не остается на месте в текстовом поле. Я хочу, чтобы курсор всегда находился в текстовом поле.

Private Sub TextBox2_AfterUpdate()

Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Value = TextBox2.Value
TextBox2.Value = ""

userform1.TextBox2.SetFocus

End Sub

введите описание изображения здесь

В этом примере следующий элемент управления в порядке TAB CommandButton1

Поскольку после нажатия ENTER и обработки всех событий Excel автоматически перемещает точку вставки на следующий элемент управления. Событие Enter восстанавливает фокус.

Private Sub CommandButton1_Enter()
UserForm1.TextBox1.SetFocus

End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Value = TextBox1.Value
TextBox1.Value = ""



End Sub

Ответ или решение

Для решения проблемы, связанной с удержанием курсора в текстовом поле (TextBox) пользовательской формы Excel после сканирования штрих-кода, вам необходимо учесть, что Excel автоматически перемещает фокус на следующий элемент управления, когда вы нажимаете клавишу «Enter». Ваша задача состоит в том, чтобы контролировать поведение формы и вернуть фокус обратно в текстовое поле сразу после завершения ввода.

Решение проблемы с фокусом в TextBox

Ниже представлен модифицированный код, который позволяет решить вашу задачу, поддерживая курсор в TextBox2 после сканирования:

Private Sub TextBox2_AfterUpdate()
    ' Записываем значение из TextBox2 в следующую пустую строку в столбце "A"
    Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Value = TextBox2.Value

    ' Очищаем текстовое поле для нового ввода
    TextBox2.Value = ""

    ' Устанавливаем фокус обратно на TextBox2
    TextBox2.SetFocus
End Sub

Private Sub CommandButton1_Click()
    ' Этот код выполняется при нажатии кнопки
    Call TextBox1_Exit(False) ' Проверяем текстовое поле перед переходом
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    ' Записываем значение из TextBox1 в следующую строку в столбце "A"
    Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Value = TextBox1.Value

    ' Очищаем TextBox1
    TextBox1.Value = ""

    ' Возвращаем фокус обратно на TextBox2
    TextBox2.SetFocus
End Sub

Private Sub TextBox1_Enter()
    ' Установка фокуса на TextBox1, если он активен
    TextBox1.SetFocus
End Sub

Объяснение кода

  1. Обработчик событий AfterUpdate:

    • Код в этом блоке выполняется каждый раз, когда текст в TextBox2 изменяется и пользователь уходит от него (включая нажатие клавиши «Enter»).
    • Значение из TextBox2 записывается в следующую пустую строку в столбце «A», и поле очищается для следующего ввода.
    • С помощью TextBox2.SetFocus фокус возвращается обратно в текстовое поле.
  2. Обработчик нажатия кнопки (CommandButton):

    • При нажатии кнопки происходит вызов процедуры, которая обрабатывает выход из TextBox1. Здесь также обеспечивается возврат фокуса на TextBox2.
  3. Обработчик Exit для TextBox1:

    • При выходе из TextBox1 происходит запись данных и возврат фокуса на TextBox2, что позволяет пользователю сразу же начать вводить следующий штрих-код без лишних кликов.
  4. Обработчик Enter для TextBox1:

    • Этот блок отвечает за установку фокуса на TextBox1, когда он становится активным.

Заключение

Таким образом, данный код позволяет поддерживать курсор в текстовом поле, упрощая процесс ввода данных для пользователей. Избегая лишних действий, таких как дополнительный клик мышкой, вы значительно улучшаете пользовательский интерфейс вашей формы.

Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...