none
Como criar um Textbox que preencha sozinho em função de outro Textbox RRS feed

  • Pergunta

  • Estou tentando criar um arquivo VBA aonde um dos Texbox sera preenchido com os nomes dos técnicos, mas gostaria que em outra Textbox, ele auto preenchesse o Turno do Técnico

    Ex. TextBox1 colocar o Nome Alvaro o Texbox2 saiba que é 1ºTurno e assim por diante

    tentei usar a função IF mas acho que estou errando no basico ainda...e como são 19 nomes achei que a função If ficaria muito extensa

    desde ja agradeço ajuda

    sexta-feira, 24 de agosto de 2012 13:15

Respostas

  • Private Sub TextBox1_Change()
        Dim lRow As Long
        
        With ThisWorkbook.Sheets("Plan1")
            lRow = EleOf(TextBox1, .Columns("A"))
            If lRow = 0 Then
                TextBox2 = ""
            Else
                TextBox2 = .Cells(lRow, "B")
            End If
        End With
    End Sub
    
    Function EleOf(ByVal vTermo As Variant, ByVal vVetor As Variant) As Long
        'Retorna o número da linha ou coluna de uma célula numa linha ou coluna.
        'Se vVetor for uma Variant(), retorna o índice do elemento no vetor.
        'Caso não seja encontrada nenhuma ocorrência, é retornado 0.
        On Error Resume Next
        EleOf = WorksheetFunction.Match(vTermo + 0, vVetor, 0)
        If EleOf = 0 Then EleOf = WorksheetFunction.Match(CStr(vTermo), vVetor, 0)
        Select Case TypeName(vVetor)
            Case "Range"
                If vVetor.Columns.Count = 1 Then
                    'vVetor é uma coluna
                    EleOf = EleOf + vVetor.Row - 1
                ElseIf vVetor.Rows.Count = 1 Then
                    'vVetor é uma linha
                    EleOf = EleOf + vVetor.Column - 1
                End If
        End Select
    End Function
    Apague o botão de comando (CommandButton) do exemplo anterior, se quiser.

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

    • Marcado como Resposta Allvaro domingo, 26 de agosto de 2012 15:47
    sábado, 25 de agosto de 2012 11:54
    Moderador

Todas as Respostas

  • Crie uma planilha chamada Plan1, sendo que na coluna A tenham os nomes dos técnicos e na coluna B seu turno respectivo.

    Crie um formulário com duas caixas de texto (TextBox) e um botão de comando (CommandButton). Adicione o código abaixo:

    Private Sub CommandButton1_Click()
        Dim lRow As Long
        
        With ThisWorkbook.Sheets("Plan1")
            lRow = EleOf(TextBox1, .Columns("A"))
            If lRow = 0 Then
                MsgBox "Não foi encontrado o nome '" & TextBox1 & "'.", vbCritical
            Else
                TextBox2 = .Cells(lRow, "B")
            End If
        End With
    End Sub
    
    Function EleOf(ByVal vTermo As Variant, ByVal vVetor As Variant) As Long
        'Retorna o número da linha ou coluna de uma célula numa linha ou coluna.
        'Se vVetor for uma Variant(), retorna o índice do elemento no vetor.
        'Caso não seja encontrada nenhuma ocorrência, é retornado 0.
        On Error Resume Next
        EleOf = WorksheetFunction.Match(vTermo + 0, vVetor, 0)
        If EleOf = 0 Then EleOf = WorksheetFunction.Match(CStr(vTermo), vVetor, 0)
        Select Case TypeName(vVetor)
            Case "Range"
                If vVetor.Columns.Count = 1 Then
                    'vVetor é uma coluna
                    EleOf = EleOf + vVetor.Row - 1
                ElseIf vVetor.Rows.Count = 1 Then
                    'vVetor é uma linha
                    EleOf = EleOf + vVetor.Column - 1
                End If
        End Select
    End Function


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

    sexta-feira, 24 de agosto de 2012 21:46
    Moderador
  • Fiz o teste funcionou 100%...atendeu minha necessidade

    mais uma pergunta...não tem como ele fazer isso sem a necessidade de usar um Botão ? ao colocar o nome no Texbox 1 ele automaticamente atualize o textbox 2 ?

    abçs

    sexta-feira, 24 de agosto de 2012 22:28
  • Private Sub TextBox1_Change()
        Dim lRow As Long
        
        With ThisWorkbook.Sheets("Plan1")
            lRow = EleOf(TextBox1, .Columns("A"))
            If lRow = 0 Then
                TextBox2 = ""
            Else
                TextBox2 = .Cells(lRow, "B")
            End If
        End With
    End Sub
    
    Function EleOf(ByVal vTermo As Variant, ByVal vVetor As Variant) As Long
        'Retorna o número da linha ou coluna de uma célula numa linha ou coluna.
        'Se vVetor for uma Variant(), retorna o índice do elemento no vetor.
        'Caso não seja encontrada nenhuma ocorrência, é retornado 0.
        On Error Resume Next
        EleOf = WorksheetFunction.Match(vTermo + 0, vVetor, 0)
        If EleOf = 0 Then EleOf = WorksheetFunction.Match(CStr(vTermo), vVetor, 0)
        Select Case TypeName(vVetor)
            Case "Range"
                If vVetor.Columns.Count = 1 Then
                    'vVetor é uma coluna
                    EleOf = EleOf + vVetor.Row - 1
                ElseIf vVetor.Rows.Count = 1 Then
                    'vVetor é uma linha
                    EleOf = EleOf + vVetor.Column - 1
                End If
        End Select
    End Function
    Apague o botão de comando (CommandButton) do exemplo anterior, se quiser.

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

    • Marcado como Resposta Allvaro domingo, 26 de agosto de 2012 15:47
    sábado, 25 de agosto de 2012 11:54
    Moderador
  • Obrigado Benzadeus
    domingo, 26 de agosto de 2012 15:47