Як автозавершити текстове поле під час набору тексту в Excel?
За замовчуванням Excel може запам'ятати, що ви ввели в комірки поточного робочого аркуша, і автоматично заповнити цей вміст наступного разу, вводячи відповідну початкову букву в нову комірку. Однак якщо ви хочете, щоб увесь вміст, який ви ввели на робочому аркуші, був автозаповнюваним у текстовому полі (ActiveX Control), як ви могли це зробити? У цій статті буде запропоновано метод VBA, який допоможе вам самозавершити текстове поле під час введення початкової літери всередину.
Автозавершення текстового поля під час набору тексту за допомогою коду VBA
Автозавершення текстового поля під час набору тексту за допомогою коду VBA
Будь ласка, виконайте наступні дії, щоб зробити автозаповнення текстового поля під час набору початкової літери всередині текстового поля.
1. Вставте текстове поле, клацнувши Розробник > Insert > Текстове поле (керування ActiveX). Дивіться знімок екрана:
2. А потім натисніть Розробник > Insert > Вікно списку (елемент керування ActiveX) щоб вставити поле списку в поточний аркуш. Дивіться знімок екрана:
3. Клацніть правою кнопкою миші вкладку аркуша, а потім клацніть Переглянути код з контекстного меню, як показано нижче.
4 В Microsoft Visual Basic для додатків вікно, скопіюйте та вставте нижче код VBA у вікно коду. А потім клацніть Tools > посилання, а потім перевірте Виконання сценаріїв 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
примітки: У коді, ListBox1 та Текстове поле1 - це ім’я вікна списку та текстового поля, яке ви вставили у свій аркуш.
5 Натисніть кнопку інший + Q клавіші для виходу з Microsoft Visual Basic для додатків вікна.
6. Вимкніть режим дизайну, клацнувши Розробник > Режим дизайну на аркуші.
7. Тепер перейдіть до іншого аркуша, а потім поверніться до попереднього аркуша, щоб увімкнути код VBA.
Відтепер. При введенні початкової літери в текстове поле, усі тексти, які починаються з тієї літери, яку ви ввели на робочому аркуші, будуть перераховані всередині списку, який знаходиться праворуч від текстового поля. Будь ласка, двічі клацніть потрібний, щоб ввести його в текстове поле. Дивіться знімок екрана:
примітки: Ви можете скористатись Up or вниз клавіша зі стрілкою, щоб переміщатися між усіма текстами автозаповнення у полі списку, а потім натисніть Що натомість? Створіть віртуальну версію себе у клавішу для введення потрібної в текстове поле.
Статті по темі:
- Як автоматично вибрати текст текстового поля, коли він виділений в Excel?
- Як очистити вміст текстового поля при натисканні в Excel?
- Як об’єднати тексти декількох комірок у текстове поле в Excel?
- Як вимкнути редагування в текстовому полі, щоб запобігти введенню користувачем в Excel?
- Як відформатувати текстове поле у відсотках у Excel?
Найкращі інструменти продуктивності офісу
Покращуйте свої навички Excel за допомогою Kutools для Excel і відчуйте ефективність, як ніколи раніше. Kutools для Excel пропонує понад 300 додаткових функцій для підвищення продуктивності та економії часу. Натисніть тут, щоб отримати функцію, яка вам найбільше потрібна...
Вкладка Office Передає інтерфейс із вкладками в Office і значно полегшує вашу роботу
- Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
- Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
- Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!