Как автозаполнить текстовое поле при вводе в Excel?
По умолчанию Excel может запомнить, что вы ввели в ячейки текущего рабочего листа, и автоматически заполнит это содержимое при следующем вводе соответствующей начальной буквы в новую ячейку. Однако, если вы хотите, чтобы все содержимое, которое вы ввели в рабочий лист, автоматически заполнялось в текстовом поле (элемент управления ActiveX), как вы могли бы это сделать? В этой статье будет представлен метод VBA, который поможет вам автоматически заполнить текстовое поле при вводе начальной буквы внутри.
Автозаполнение текстового поля при вводе с кодом VBA
Автозаполнение текстового поля при вводе с кодом VBA
Чтобы текстовое поле автоматически заполнялось при вводе первой буквы внутри текстового поля, сделайте следующее.
1. Вставьте текстовое поле, нажав Застройщик > Вставить > Текстовое поле (элемент управления ActiveX). Смотрите скриншот:
2. Затем щелкните Застройщик > Вставить > Список (элемент управления ActiveX) для вставки списка в текущий рабочий лист. Смотрите скриншот:
3. Щелкните вкладку листа правой кнопкой мыши, затем щелкните Просмотреть код из контекстного меню, как показано на скриншоте ниже.
4. в Microsoft Visual Basic для приложений окна, скопируйте и вставьте ниже код VBA в окно кода. А затем нажмите Инструменты > Рекомендации, а затем проверьте Среда выполнения сценариев Microsoft коробка в Ссылки - VBAProject диалоговое окно. Смотрите скриншот:
Код VBA: автозаполнение текстового поля при вводе
Dim xRg As Range
Dim xDic As New Dictionary
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox1.Value = Me.ListBox1.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xVal As String
On Error Resume Next
If IsNumeric(Target.Value) Then
xVal = Str(Target.Value)
Else
xVal = Target.Value
End If
If xVal <> "" Then
If Not xDic.Exists(xVal) Then
xDic.Add xVal, xVal
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.ListBox1.Visible = False
End Sub
Private Sub Worksheet_Activate()
Dim I As Long
Dim xStr As String
On Error Resume Next
If xRg Is Nothing Then
Set xRg = ActiveSheet.UsedRange
End If
Me.ListBox1.Visible = False
xDic.RemoveAll
With Me.ListBox1
For I = 1 To xRg.Count
xStr = xRg(I).Value
If xStr <> "" Then
.AddItem xStr
If Not xDic.Exists(xStr) Then
xDic.Add xStr, xStr
End If
End If
Next
End With
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With Me.ListBox1
.Top = Me.TextBox1.Top
.Left = Me.TextBox1.Left + Me.TextBox1.Width
.Width = Me.TextBox1.Width
End With
TextBoxVal Me.TextBox1.Object
End Sub
Sub TextBoxVal(xTextBox As Variant)
Dim I As Long
Dim xStr As String
On Error Resume Next
Application.ScreenUpdating = False
If xRg Is Nothing Then Exit Sub
Me.ListBox1.Clear
xStr = xTextBox.Value
If xStr = "" Then
Me.ListBox1.Visible = False
Application.EnableEvents = True
Exit Sub
End If
For I = 0 To UBound(xDic.Items)
If Left(xDic.Items(I), Len(xStr)) = xStr Then
Me.ListBox1.AddItem xDic.Items(I)
End If
Next
Me.ListBox1.Visible = True
If Me.ListBox1.ListCount > 0 Then
With xTextBox
.Value = Me.ListBox1.List(0)
.SelStart = Len(xStr)
.SelLength = Len(Me.ListBox1.List(0))
End With
End If
Me.ListBox1.Activate
Me.ListBox1.Selected(0) = True
Application.ScreenUpdating = True
End Sub
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Me.TextBox1.Value = Me.ListBox1.Value
End If
End Sub
Внимание: В коде СписокBox1 и Текстовое поле1 - это имя поля со списком и текстового поля, которое вы вставили в свой рабочий лист.
5. нажмите другой + Q ключи для выхода из Microsoft Visual Basic для приложений окно.
6. Выключите режим дизайна, нажав Застройщик > Режим проектирования в листе.
7. Теперь перейдите к другому листу, а затем вернитесь к предыдущему листу, чтобы включить код VBA.
Впредь. При вводе начальной буквы в текстовое поле все тексты, начинающиеся с этой буквы, которую вы ввели в рабочий лист, будут перечислены внутри поля списка, расположенного с правой стороны текстового поля. Дважды щелкните нужный, чтобы ввести его в текстовое поле. Смотрите скриншот:
Внимание: Вы можете использовать Up or вниз клавишу со стрелкой для перемещения между всеми текстами автозаполнения в поле списка, а затем нажмите Enter ключ, чтобы ввести нужный в текстовое поле.
Статьи по теме:
- Как автоматически выбрать текст текстового поля, когда он выбран в Excel?
- Как очистить содержимое текстового поля при нажатии в Excel?
- Как объединить тексты из нескольких ячеек в текстовое поле в Excel?
- Как отключить редактирование в текстовом поле, чтобы пользователь не вводил данные в Excel?
- Как отформатировать текстовое поле в процентах в Excel?
Лучшие инструменты для офисной работы
Улучшите свои навыки работы с Excel с помощью Kutools for Excel и почувствуйте эффективность, как никогда раньше. Kutools for Excel предлагает более 300 расширенных функций для повышения производительности и экономии времени. Нажмите здесь, чтобы получить функцию, которая вам нужна больше всего...
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!