none
Como preencher TextBox com dados de uma pesquisa, usando Macro em VBA Excel? RRS feed

  • 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

    terça-feira, 28 de janeiro de 2014 13:14

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
    quarta-feira, 29 de janeiro de 2014 20:07
    Moderador

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 Sub

    Abraços

    AT_+


    • Editado Alexandre Dorigão terça-feira, 28 de janeiro de 2014 13:19 Adicionei um exemplo
    terça-feira, 28 de janeiro de 2014 13:18
  • 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

    terça-feira, 28 de janeiro de 2014 13:44
  • Sua dúvida está em preencher as caixas de texto ou fazer a pesquisa?

    Além disso, se você já tem algum código pronto, poste aqui.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    terça-feira, 28 de janeiro de 2014 21:14
    Moderador
  • 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.


    quarta-feira, 29 de janeiro de 2014 11:45
  • 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
    quarta-feira, 29 de janeiro de 2014 20:07
    Moderador
  • 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.

    quinta-feira, 30 de janeiro de 2014 14:15
  • 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

    quinta-feira, 30 de janeiro de 2014 21:54
    Moderador
  • 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?

    sexta-feira, 17 de novembro de 2017 14:57