KutoolsforOffice — Одно решение — пять мощных инструментов.Меньше усилий — больше результата.

Как включить автозаполнение поля ввода при наборе текста в Excel?

АвторSiluviaДата изменения

По умолчанию 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

перейдите в диалоговое окно «Ссылки» и установите флажок напротив Microsoft Scripting Runtime

Примечание: В коде ListBox1 и Textbox1 — это имена поля списка и поля ввода, которые вы добавили на лист.

5. Нажмите клавиши Alt+Q, чтобы закрыть окно Microsoft Visual Basic for Applications.

6. Отключите режим конструктора, нажав Разработчик > Режим конструктора на ленте.

7. Теперь перейдите на другой лист, а затем вернитесь на предыдущий — так вы активируете код VBA.

Теперь при вводе начальной буквы в поле ввода справа от него в списке автоматически появятся все текстовые значения с этой буквы, введённые на листе. Просто дважды щёлкните нужный вариант — и он сразу вставится в поле ввода. См. снимок экрана:

При вводе начальной буквы в текстовое поле будут отображены все тексты, начинающиеся с этой буквы

Примечание: используйте клавиши со стрелками вверх или вниз, чтобы перемещаться между вариантами автозаполнения в выпадающем списке, и нажмите Enter, чтобы вставить выбранный вариант в поле ввода.



См. также:

Лучшие инструменты повышения продуктивности в Office

🤖KUTOOLS AI Помощник: Преобразуйте Анализ данных с помощью:Интеллектуального выполнения   |  Генерации кода|  Создания пользовательские формулы  |  Анализа данных и построения диаграмм|  Вызова Расширенные функции
Популярные функции:Поиск, выделение или Отметить дубликаты   |  Удалить пустые строки   |  Объединить столбцы или ячеек без потери данных   |  Округление без использования формул
Супер ПОИСК:VLookup по нескольким критериям  |  VLookup по нескольким значениям  |   VLookup по нескольким листам   |   Распознавание нечетких соответствий
Расширенный раскрывающийся список:Быстрое создание выпадающего списка   |  Зависимый выпадающий список   |  Выпадающий список с множественным выбором
Управление столбцами:Добавление заданного количества столбцов|Перемещение столбцов|Переключение видимости скрытых столбцов|Сравнение диапазонов и столбцов
Избранные функции:Сетка фокусировки   |  Просмотр дизайна   |Улучшенная строка формулы   | Управление рабочими книгами и листами   |  Библиотека ресурсов(автотекст)|  Выбор даты   |  Объединить листы  |  Шифрование/Расшифровать ячейки   | Отправка писем по списку   |  Супер фильтр   |   Специальный фильтр(Фильтр ячеек с жирным шрифтом/курсив/зачёркивание…) …
Лучшие наборы инструментов 15:12 Текстовыеинструменты(Добавить текст,Удалить определенные символы, …)|   50+Типыдиаграмм(Диаграмма Ганта, …)|   40+ Практические формулы(Рассчитать возраст на основе даты рождения, …)|   19 Инструментывставки(Вставить QR-код,Вставка изображения по пути, …)|   12 Инструментыпреобразования(Преобразовать в слова,Конвертация валют, …)|   7 Объединить и разделитьИнструменты(Расширенное объединение строк,Разделить ячейки, …)|… и многое другое
Используйте Kutools на предпочитаемом языке — поддержка английского, испанского, немецкого, французского, китайского и ещё 40+ языков!

Раскройте весь потенциал 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.

ExcelWordOutlookTabsPowerPoint
  • Единый комплект— надстройки для Excel, Word, Outlook и PowerPoint + Office Tab Pro
  • Один установщик, одна лицензия— настройка занимает считанные минуты (готово для MSI)
  • Лучше работать вместе— оптимизированная продуктивность во всех приложениях Office
  • 30-дневная полнофункциональная пробная версия— без регистрации и кредитной карты
  • Лучшее соотношение цены и качества— экономия по сравнению с покупкой отдельных надстроек