Usuário com melhor resposta
Como preencher TextBox com dados de uma pesquisa, usando Macro em VBA Excel?

Pergunta
-
Pessoal,
Fiz um UserForm com 7 TextBox para preencher respectivamente células, linha por linha de uma planilha. Feito isso, quero fazer uma macro onde rode uma pesquisa (através de uma TextBox, em um UserForm com um botão pesquisar) e com essa ação, as TextBox seja preenchidas com os respectivos dados da pesquisa.
Estou aberto a sugestões!!
Obrigado
Respostas
-
Crie um planilha chamada Dados com cabeçalhos ID, Nome e Idade. Preencha algumas linhas.
Crie um formulário com as caixas de texto txtID, txtNome e txtIdade. Crie também os botões de comando btnPesquisar e btnAtualizar.
Cole o código no formulário:
Private Sub btnPesquisar_Click() Dim lngRow As Long Me.txtNome.Value = "" Me.txtIdade.Value = "" With ThisWorkbook.Worksheets("Dados") lngRow = fMatch(Me.txtID.Value, .Columns("A")) If lngRow = 0 Then MsgBox "Dados não encontrados!", vbCritical Else Me.txtNome.Value = .Cells(lngRow, "B").Value Me.txtIdade.Value = .Cells(lngRow, "C").Value End If End With End Sub Private Sub btnAtualizar_Click() Dim lngRow As Long With ThisWorkbook.Worksheets("Dados") lngRow = fMatch(Me.txtID.Value, .Columns("A")) If lngRow = 0 Then MsgBox "Dados não encontrados!", vbCritical Else .Cells(lngRow, "B").Value = Me.txtNome.Value .Cells(lngRow, "C").Value = Me.txtIdade.Value MsgBox "Dados atualizados com sucesso!", vbInformation End If End With End Sub Private Function fMatch(ByVal strValue As String, ByVal varArray As Variant) As Long Dim Temp As Long On Error Resume Next Temp = WorksheetFunction.Match(strValue + 0, varArray, 0) If Temp = 0 Then Temp = WorksheetFunction.Match(VBA.CStr(strValue), varArray, 0) On Error GoTo 0 If Temp > 0 Then If VBA.TypeName(varArray) = "Range" Then If varArray.Columns.Count = 1 Then Temp = varArray(1).Row + Temp - 1 ElseIf varArray.Rows.Count = 1 Then Temp = varArray(1).Column + Temp - 1 Else 'A seleção não é um vetor, mas sim uma matriz. Temp = 0 End If End If End If fMatch = Temp End Function
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Rodolpho Santos quinta-feira, 30 de janeiro de 2014 14:16
Todas as Respostas
-
Rodolpho,
Bom dia,
Este assunto já foi abordado na comunidade e a resolução simples e rápida é do link abaixo:
http://www.ambienteoffice.com.br/officevba/usar_um_procedimento_para_varios_controles_de_um_formulario/
Siga as instruções e você vai desenvolver o que deseja.
Segue um exemplo de como codificar:
crie um formulário com 3 TextBox e popule as células A1, A2 e A3 da Planilha ativa:
Private Sub UserForm_Initialize()
Dim lng As Long
For lng = 1 To 3
Controls("TextBox" & lng).Text = Cells(lng, "A")
Next lng
End SubAbraços
AT_+
- Editado Alexandre Dorigão terça-feira, 28 de janeiro de 2014 13:19 Adicionei um exemplo
-
Bom dia Alexandre. Obrigado pela atenção.
O site que recomendou é ótimo, pois estou começando a escrever VBA agora, e ainda sinto os efeitos da inesperiência. Sua dica é de grande valia e já está add em meus favoritos.
O que procuro não é exatamente o que me indicou. Quero que as TextBox sejam preenchidas com os dados da pesquisa. Estou com dois problemas:
1 - Criar uma Macro para fazer a pesquisa (com a elaboração de UserForm contendo uma TextBox, e um botão "Pesquisar"), e;
2 - fazer com os dados respectivos a pesquisa preencham as TextBox do UserForm, possibilitando as alterações no cadastro do banco que criei.
Agradeço mais uma vez a ajuda, e conto com sua colaboração.
RS
-
-
Caro,
Não escrevi o código, como disse anteriormente, estou engatinhando no VBA.
Preciso fazer com que a pesquisa preencha textbox (ou labels), para que eu consigar fazer a manutenção das informações do banco de dados.
A idéia é fazer a busca pelo ID do registro, e as informações apareçam na textbox para alterar os registros.
Agradeço a sua atenção.
Abs,
RS.
- Editado Rodolpho Santos quarta-feira, 29 de janeiro de 2014 12:56
-
Crie um planilha chamada Dados com cabeçalhos ID, Nome e Idade. Preencha algumas linhas.
Crie um formulário com as caixas de texto txtID, txtNome e txtIdade. Crie também os botões de comando btnPesquisar e btnAtualizar.
Cole o código no formulário:
Private Sub btnPesquisar_Click() Dim lngRow As Long Me.txtNome.Value = "" Me.txtIdade.Value = "" With ThisWorkbook.Worksheets("Dados") lngRow = fMatch(Me.txtID.Value, .Columns("A")) If lngRow = 0 Then MsgBox "Dados não encontrados!", vbCritical Else Me.txtNome.Value = .Cells(lngRow, "B").Value Me.txtIdade.Value = .Cells(lngRow, "C").Value End If End With End Sub Private Sub btnAtualizar_Click() Dim lngRow As Long With ThisWorkbook.Worksheets("Dados") lngRow = fMatch(Me.txtID.Value, .Columns("A")) If lngRow = 0 Then MsgBox "Dados não encontrados!", vbCritical Else .Cells(lngRow, "B").Value = Me.txtNome.Value .Cells(lngRow, "C").Value = Me.txtIdade.Value MsgBox "Dados atualizados com sucesso!", vbInformation End If End With End Sub Private Function fMatch(ByVal strValue As String, ByVal varArray As Variant) As Long Dim Temp As Long On Error Resume Next Temp = WorksheetFunction.Match(strValue + 0, varArray, 0) If Temp = 0 Then Temp = WorksheetFunction.Match(VBA.CStr(strValue), varArray, 0) On Error GoTo 0 If Temp > 0 Then If VBA.TypeName(varArray) = "Range" Then If varArray.Columns.Count = 1 Then Temp = varArray(1).Row + Temp - 1 ElseIf varArray.Rows.Count = 1 Then Temp = varArray(1).Column + Temp - 1 Else 'A seleção não é um vetor, mas sim uma matriz. Temp = 0 End If End If End If fMatch = Temp End Function
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Rodolpho Santos quinta-feira, 30 de janeiro de 2014 14:16
-
Boa tarde Felipe,
Antes de mais nada, preciso dizer que você é o cara! Fiquei alguns dias pesquisando sobre isso, procurando algum caminho e nada. Muito Obrigado.
Era exatamente isso o que eu procurava. Vou trabalhar um pouco mais sobre esse assunto, mas o que você me mandou já é um ótimo caminho!
Esse site que tem na sua assinatura é o seu site pessoal? Lá tem algum material de apoio de VBA?
Mais uma vez, Parabéns e muito obrigado!!
RS.
-
Obrigado pelas palavras, Rodolpho.
Sim, é meu site pessoal.
Sobre VBA, eu estava escrevendo um livro, mas decidi plublica-lo em meu site. Infelizmente, ainda demorá algumas semanas para eu publicar a parte de Excel, ainda estou nos fundamentos do VBA. Aos poucos, lanço mais material, e o índice geral se encontra aqui: http://www.ambienteoffice.com.br/officevba/visual_basic_for_applications_(vba)/
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Estou fazendo um "procv" porém que retorne todos os resultados encontrados.
Esse resultados terão que ser exibidos no textbox.No caso, digamos que eu tenho o mesmo id para duas pessoas diferentes, essas duas pessoas teriam que aparecer no textBox
Como faço isso?