Как да попълвам автоматично текстово поле при въвеждане в Excel?
По подразбиране Excel може да запомни какво сте въвели в клетките на текущия работен лист и да допълни автоматично това съдържание следващия път, когато въвеждате свързана начална буква в нова клетка. Въпреки това, ако искате да направите цялото съдържание, което сте въвели в работния лист, да бъде автоматично довършвано в текстово поле (ActiveX Control), как бихте могли да го направите? Тази статия ще предостави метод на VBA, който да ви помогне да попълните автоматично текстово поле, когато въвеждате начална буква вътре.
Автоматично попълване на текстово поле, когато пишете с VBA код
Автоматично попълване на текстово поле, когато пишете с VBA код
Моля, направете следното, за да направите автоматично попълване на текстово поле, когато въвеждате начална буква в текстовото поле.
1. Моля, поставете текстово поле, като щракнете Софтуерен Инженер > Поставете > Текстово поле (ActiveX Control). Вижте екранна снимка:
2. И след това щракнете Софтуерен Инженер > Поставете > Списъчно поле (ActiveX Control) за вмъкване на списъчно поле в текущия работен лист. Вижте екранна снимка:
3. Щракнете с десния бутон върху раздела на листа, след което щракнете Преглед на кода от контекстното меню, както е показано на екранната снимка по-долу.
4. В Microsoft Visual Basic за приложения прозорец, моля, копирайте и поставете под кода на 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 намлява Текстово поле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% и намалява стотици кликвания на мишката за вас всеки ден!