¿Cómo autocompletar un cuadro de texto al escribir en Excel?
Por defecto, Excel puede recordar lo que has ingresado en las celdas de la hoja de trabajo actual y autocompletar ese contenido la próxima vez que escribas una letra inicial relacionada en una nueva celda. Sin embargo, si deseas que todo el contenido que has ingresado en la hoja de trabajo se autocomplete en un cuadro de texto (Control ActiveX), ¿cómo podrías hacerlo? Este artículo proporcionará un método VBA para ayudarte a autocompletar un cuadro de texto cuando escribas una letra inicial dentro.
Autocompletar un cuadro de texto al escribir con código VBA
Autocompletar un cuadro de texto al escribir con código VBA
Por favor, sigue los siguientes pasos para hacer que un cuadro de texto se autocomplete al escribir una letra inicial dentro del cuadro de texto.
1. Por favor, inserta un cuadro de texto haciendo clic en Desarrollador > Insertar > Cuadro de Texto (Control ActiveX). Ver captura de pantalla:
2. Luego haz clic en Desarrollador > Insertar > Cuadro de Lista (Control ActiveX) para insertar un cuadro de lista en la hoja de trabajo actual. Ver captura de pantalla:
3. Haz clic derecho en la pestaña de la hoja, luego haz clic en Ver Código desde el menú contextual como se muestra en la siguiente captura de pantalla.
4. En la ventana Microsoft Visual Basic para Aplicaciones, por favor copia y pega el siguiente código VBA en la ventana de Código. Luego haz clic en Herramientas > Referencias, y marca la casilla Microsoft Scripting Runtime en el cuadro de diálogo Referencias – VBAProject. Ver captura de pantalla:
Código VBA: Autocompletar un cuadro de texto al escribir
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
Nota: En el código, ListBox1 y Textbox1 son los nombres del cuadro de lista y el cuadro de texto que has insertado en tu hoja de trabajo.
5. Presiona las teclas Alt + Q para salir de la ventana Microsoft Visual Basic para Aplicaciones.
6. Desactiva el Modo Diseño haciendo clic en Desarrollador > Modo Diseño en la hoja de trabajo.
7. Ahora cambia a otra hoja de trabajo y luego regresa a la hoja de trabajo anterior para habilitar el código VBA.
A partir de ahora. Al ingresar una letra inicial en el cuadro de texto, todos los textos que comiencen con esa letra que hayas ingresado en la hoja de trabajo se mostrarán dentro del cuadro de lista ubicado en el lado derecho del cuadro de texto. Haz doble clic en el que necesites para ingresarlo en el cuadro de texto. Ver captura de pantalla:
Nota: Puedes usar la tecla de flecha Arriba o Abajo para moverte entre todos los textos de autocompletado en el cuadro de lista, y luego presionar la tecla Intro para ingresar el que necesites en el cuadro de texto.
Artículos relacionados:
- ¿Cómo seleccionar automáticamente el texto de un cuadro de texto cuando está seleccionado en Excel?
- ¿Cómo borrar el contenido de un cuadro de texto cuando se hace clic en Excel?
- ¿Cómo concatenar textos de varias celdas en un cuadro de texto en Excel?
- ¿Cómo deshabilitar la edición en un cuadro de texto para evitar la entrada del usuario en Excel?
- ¿Cómo formatear un cuadro de texto como un porcentaje en Excel?
Las mejores herramientas de productividad para Office
Potencia tus habilidades en Excel con Kutools para Excel y experimenta una eficiencia sin precedentes. Kutools para Excel ofrece más de300 funciones avanzadas para aumentar la productividad y ahorrar tiempo. Haz clic aquí para obtener la función que más necesitas...
Office Tab lleva la interfaz de pestañas a Office y facilita mucho tu trabajo
- Habilita la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
- Abre y crea varios documentos en nuevas pestañas de la misma ventana, en lugar de nuevas ventanas.
- ¡Aumenta tu productividad en un50% y reduce cientos de clics de ratón cada día!