Как включить автозаполнение поля ввода при наборе текста в Excel?
По умолчанию Excel запоминает всё, что вы вводили в ячейки текущего листа, и автоматически дополняет содержимое при вводе начальной буквы в новую ячейку. Но как сделать так, чтобы весь текст, введённый на листе, автоматически подставлялся в поле ввода (элемент управления ActiveX)? В этой статье описан метод реализации автозаполнения для такого поля с помощью кода VBA при вводе начальной буквы.
Автозаполнение поля ввода при наборе с помощью кода VBA
Автозаполнение поля ввода при наборе с помощью кода VBA
Выполните следующие действия, чтобы поле ввода автоматически дополняло текст при наборе начальной буквы.
1. Вставьте поле ввода, нажав Разработчик > Вставить > Поле текста (элемент управления ActiveX). См. снимок экрана:

2. Затем нажмите Разработчик > Вставить > Поле списка (элемент управления ActiveX), чтобы добавить поле списка на текущий лист. См. снимок экрана:

3. Щёлкните правой кнопкой мыши по ярлыку листа и в контекстном меню выберите Просмотреть код, как показано на снимке экрана ниже.

4. В окне Microsoft Visual Basic for Applications скопируйте и вставьте приведённый ниже код VBA в окно кода. Затем нажмите Сервис > Ссылки и установите флажок напротив пункта Microsoft Scripting Runtime в диалоговом окне Ссылки – 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 
Примечание: В коде ListBox1 и Textbox1 — это имена поля списка и поля ввода, которые вы добавили на лист.
5. Нажмите клавиши Alt+Q, чтобы закрыть окно Microsoft Visual Basic for Applications.
6. Отключите режим конструктора, нажав Разработчик > Режим конструктора на ленте.
7. Теперь перейдите на другой лист, а затем вернитесь на предыдущий — так вы активируете код VBA.
Теперь при вводе начальной буквы в поле ввода справа от него в списке автоматически появятся все текстовые значения с этой буквы, введённые на листе. Просто дважды щёлкните нужный вариант — и он сразу вставится в поле ввода. См. снимок экрана:

Примечание: используйте клавиши со стрелками вверх или вниз, чтобы перемещаться между вариантами автозаполнения в выпадающем списке, и нажмите Enter, чтобы вставить выбранный вариант в поле ввода.
См. также:
- Как включить автоматическое выделение всего текста в поле ввода при его выборе в Excel?
- Как очистить содержимое поля ввода при клике по нему в Excel?
- Как объединить текст из нескольких ячеек в одно поле ввода в Excel?
- Как отключить редактирование в поле ввода, чтобы пользователь не мог вводить данные в Excel?
- Как отформатировать поле ввода в Excel как процент?
Лучшие инструменты повышения продуктивности в Office
Раскройте весь потенциал Excel с помощью Kutools для Excel и ощутите эффективность как никогда раньше.Kutools для Excel предлагает более 300 расширенных функций для повышения продуктивности и Экономия времени.Нажмите здесь, чтобы получить нужную Вам функцию…
Office Tab добавляет в Office вкладки и значительно упрощает Вашу работу
- Включите редактирование и чтение во вкладках в Word, Excel, PowerPoint, Publisher, Access, Visio и Project.
- Открывайте и создавайте несколько документов во вкладках одного окна — вместо того чтобы использовать отдельные окна.
- Повышает вашу продуктивность на 50 % и экономит сотни кликов мышью каждый день!
Все надстройки Kutools — один установщик
Kutools for Office — набор надстроек для Excel, Word, Outlook и PowerPoint, а также Office Tab Pro, идеально подходящий командам, работающим с разными приложениями Office.
- Единый комплект— надстройки для Excel, Word, Outlook и PowerPoint + Office Tab Pro
- Один установщик, одна лицензия— настройка занимает считанные минуты (готово для MSI)
- Лучше работать вместе— оптимизированная продуктивность во всех приложениях Office
- 30-дневная полнофункциональная пробная версия— без регистрации и кредитной карты
- Лучшее соотношение цены и качества— экономия по сравнению с покупкой отдельных надстроек