Como ativar o preenchimento automático numa caixa de texto enquanto digita no Excel?
Por predefinição, o Excel memoriza o que introduz nas células da folha atual e preenche automaticamente esse conteúdo sempre que começar a digitar uma letra correspondente numa nova célula. No entanto, se pretender que todos os conteúdos inseridos na folha de cálculo sejam usados para preenchimento automático numa caixa de texto (Controlo ActiveX), como poderá fazê-lo? Este artigo apresenta um método em VBA que lhe permite preencher automaticamente uma caixa de texto à medida que digita a primeira letra.
Preenchimento automático de uma caixa de texto ao digitar com código VBA
Preenchimento automático de uma caixa de texto ao digitar com código VBA
Siga os passos abaixo para ativar o preenchimento automático de uma caixa de texto ao digitar a letra inicial.
1. Insira uma caixa de texto clicando em Programador > Inserir > Caixa de Texto (Controlo ActiveX). Veja a imagem:

2. Em seguida, clique em Programador > Inserir > Caixa de Listagem (Controlo ActiveX) para inserir uma caixa de listagem na folha atual. Veja a imagem:

3. Clique com o botão direito do rato no separador da folha e, em seguida, clique em Ver Código no menu de contexto, conforme ilustrado na imagem seguinte.

4. Na janela do Microsoft Visual Basic para Aplicações, copie e cole o seguinte código VBA na janela de Código. Em seguida, clique em Ferramentas > Referências e marque a caixa Microsoft Scripting Runtime na caixa de diálogo Referências – VBAProject. Veja a imagem:
Código VBA: Preenchimento automático de uma caixa de texto ao digitar
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: No código, ListBox1 e Textbox1 são os nomes da caixa de listagem e da caixa de texto que inseriu na sua folha de cálculo.
5. Prima as teclas Alt+Q para sair da janela do Microsoft Visual Basic para Aplicações.
6. Desative o Modo de Estrutura clicando em Programador > Modo de Estrutura na folha de cálculo.
7. Agora, mude para outra folha de cálculo e volte à folha anterior para ativar o código VBA.
A partir de agora, ao introduzir uma letra inicial na caixa de texto, todos os textos que começam com essa letra e que tenha introduzido na folha de cálculo serão listados na caixa de listagem localizada à direita da caixa de texto. Faça duplo clique no item pretendido para o introduzir na caixa de texto. Veja a imagem:

Nota: Pode utilizar a tecla Seta para Cima ou Seta para Baixo para navegar entre todas as sugestões de preenchimento automático na caixa de listagem e, em seguida, premir a tecla Enter para introduzir o item pretendido na caixa de texto.
Artigos relacionados:
- Como selecionar automaticamente o texto de uma caixa de texto quando esta é clicada no Excel?
- Como limpar automaticamente o conteúdo de uma caixa de texto ao clicar nela no Excel?
- Como concatenar texto de várias células numa caixa de texto no Excel?
- Como desativar a edição numa caixa de texto para impedir que o utilizador introduza dados no Excel?
- Como formatar uma caixa de texto como percentagem no Excel?
As Melhores Ferramentas de Produtividade para o Office
Potencie as suas competências no Excel com Kutools para Excel e experimente uma eficiência como nunca antes.Kutools para Excel Oferece mais de 300 funcionalidades avançadas para impulsionar a produtividade e Economizar Tempo.Clique aqui para obter a funcionalidade de que mais precisa...
Office Tab Traz uma interface com separadores para o Office e torna o seu trabalho muito mais fácil
- Ative a edição e leitura com separadores no Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
- Abra e crie vários documentos em novos separadores da mesma janela, em vez de em janelas separadas.
- Aumente a sua produtividade em 50 % e elimine centenas de cliques do rato todos os dias!
Todos os suplementos Kutools — num único instalador.
Kutools for Office reúne suplementos para Excel, Word, Outlook e PowerPoint, além do Office Tab Pro, sendo a solução ideal para equipas que trabalham em várias aplicações do Office.
- Pacote tudo-em-um— suplementos para Excel, Word, Outlook e PowerPoint + Office Tab Pro
- Um instalador, uma licença— configuração em minutos (pronto para MSI)
- Funciona melhor em conjunto— produtividade simplificada em todas as aplicações do Office
- Teste gratuito de 30 dias com todas as funcionalidades— sem registo, sem cartão de crédito
- Melhor relação qualidade-preço— poupe face à compra individual dos suplementos