Перейти к содержимому

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

Author: Siluvia Last Modified: 2025-06-05

По умолчанию Excel может запоминать то, что вы ввели в ячейках текущего листа, и автозаполнять это содержимое в следующий раз, когда вы вводите связанную начальную букву в новую ячейку. Однако, если вы хотите, чтобы все содержимое, которое вы ввели на листе, автозаполнялось в текстовом поле (ActiveX Control), как это сделать? В этой статье мы предложим метод VBA, который поможет вам автозаполнять текстовое поле при вводе начальной буквы.

Автозаполнение текстового поля при вводе с помощью кода VBA


Автозаполнение текстового поля при вводе с помощью кода VBA

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

1. Пожалуйста, вставьте текстовое поле, нажав Разработчик > Вставить > Текстовое поле (ActiveX Control). См. скриншот:

click to insert Text Box

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

click to insert List Box

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

click View Code from right click menu

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

go to References dialog box and check Microsoft Scripting Runtime

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

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

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

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

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

When entering an initial letter into the textbox, all texts which begin with that letter will be listed

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



Связанные статьи:

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

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

Ускорьте работу в Excel с Kutools для Excel и ощутите новую степень эффективности. Kutools для Excel предлагает более300 расширенных функций для повышения продуктивности и экономии времени. Нажмите здесь, чтобы выбрать нужную вам функцию...


Office Tab добавляет вкладки в Office и делает вашу работу намного проще

  • Включите редактирование и чтение с вкладками в Word, Excel, PowerPoint, Publisher, Access, Visio и Project.
  • Открывайте и создавайте несколько документов во вкладках одного окна, а не в отдельных окнах.
  • Увеличьте свою продуктивность на50% и сократите сотни лишних кликов мышью каждый день!