Как автозаполнить текстовое поле при вводе в Excel?
По умолчанию Excel может запоминать то, что вы ввели в ячейках текущего листа, и автозаполнять это содержимое в следующий раз, когда вы вводите связанную начальную букву в новую ячейку. Однако, если вы хотите, чтобы все содержимое, которое вы ввели на листе, автозаполнялось в текстовом поле (ActiveX Control), как это сделать? В этой статье мы предложим метод VBA, который поможет вам автозаполнять текстовое поле при вводе начальной буквы.
Автозаполнение текстового поля при вводе с помощью кода VBA
Автозаполнение текстового поля при вводе с помощью кода VBA
Пожалуйста, выполните следующие действия, чтобы заставить текстовое поле автозаполняться при вводе начальной буквы внутрь текстового поля.
1. Пожалуйста, вставьте текстовое поле, нажав Разработчик > Вставить > Текстовое поле (ActiveX Control). См. скриншот:
2. Затем нажмите Разработчик > Вставить > Поле со списком (ActiveX Control), чтобы вставить поле со списком в текущий лист. См. скриншот:
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% и сократите сотни лишних кликов мышью каждый день!