none
TextBox utilizando letras e números RRS feed

  • Pergunta

  • Olá pessoal,

    Mais uma vez lanço uma pergunta: É possivel em um textbox formatar os caractéres para inserir limitadamente 3 letras um hífen automático "-" e limitar o final em 4 números?

    Ex.: Placa da veículos (VBA-2012) <- com a separação do hífen automática.

    Usei este código porém só faz referência a números, é possível?

    Private Sub textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'Limita a Qde de caracteres
        TextBox1.MaxLength = 8
     
         Select Case KeyAscii
              Case 8, 48 To 57 ' BackSpace e numericos
              If Len(TextBox1) = 3 Or Len(TextBox1) = 4 Then

                TextBox1.Text = TextBox1.Text & "-"
                SendKeys "{End}", False
       
        End If
            
        Case Else ' o resto é travado
                KeyAscii = 0
          End Select
    End Sub



    • Editado alexhsantos quinta-feira, 17 de maio de 2012 21:35
    quinta-feira, 17 de maio de 2012 21:06

Respostas

  • Crie um formulário com um TextBox chamado TextBox1 e cole o código abaixo na classe do formulário:

    Private Sub TextBox1_Change()
        
        Dim sTemp As String
        Static blEmMudança As Boolean
        
        If blEmMudança = True Then Exit Sub
        blEmMudança = True
            
        sTemp = TextBox1
        sTemp = Replace(sTemp, "-", vbNullString)
        
        'Limita o TextBox a 7 caracteres, fora o hífen
        sTemp = Left(sTemp, 7)
        
        'Construção da máscara. Talvez fique mais interessante se for feita com o uso de IFs
        Select Case Len(sTemp)
            Case Is <= 3
            Case Else
                sTemp = Left(sTemp, 3) & "-" & Mid(sTemp, 4)
        End Select
        
        'Atribui-se ao controle o valor da máscara com a devida formatação:
        TextBox1 = sTemp
        
        'Essa rotina poderá ser chamada de novo, já que o código findou.
        blEmMudança = False
    End Sub
    
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Select Case KeyAscii
            Case Asc("A") To Asc("Z"), Asc("a") To Asc("z")
                If Len(TextBox1) >= 3 Then
                    MsgBox "Favor inserir apenas números!", vbCritical, "Erro de validação"
                    KeyAscii = 0
                End If
            Case Asc("0") To Asc("9")
                If Len(TextBox1) < 3 Then
                    MsgBox "Favor inserir apenas letras!", vbCritical, "Erro de validação"
                    KeyAscii = 0
                End If
            Case Else
                MsgBox "Favor inserir apenas letras ou números!", vbCritical, "Erro de validação"
                KeyAscii = 0
        End Select
    End Sub


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

    • Marcado como Resposta alexhsantos sexta-feira, 18 de maio de 2012 12:02
    sexta-feira, 18 de maio de 2012 01:15
    Moderador

Todas as Respostas

  • Crie um formulário com um TextBox chamado TextBox1 e cole o código abaixo na classe do formulário:

    Private Sub TextBox1_Change()
        
        Dim sTemp As String
        Static blEmMudança As Boolean
        
        If blEmMudança = True Then Exit Sub
        blEmMudança = True
            
        sTemp = TextBox1
        sTemp = Replace(sTemp, "-", vbNullString)
        
        'Limita o TextBox a 7 caracteres, fora o hífen
        sTemp = Left(sTemp, 7)
        
        'Construção da máscara. Talvez fique mais interessante se for feita com o uso de IFs
        Select Case Len(sTemp)
            Case Is <= 3
            Case Else
                sTemp = Left(sTemp, 3) & "-" & Mid(sTemp, 4)
        End Select
        
        'Atribui-se ao controle o valor da máscara com a devida formatação:
        TextBox1 = sTemp
        
        'Essa rotina poderá ser chamada de novo, já que o código findou.
        blEmMudança = False
    End Sub
    
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Select Case KeyAscii
            Case Asc("A") To Asc("Z"), Asc("a") To Asc("z")
                If Len(TextBox1) >= 3 Then
                    MsgBox "Favor inserir apenas números!", vbCritical, "Erro de validação"
                    KeyAscii = 0
                End If
            Case Asc("0") To Asc("9")
                If Len(TextBox1) < 3 Then
                    MsgBox "Favor inserir apenas letras!", vbCritical, "Erro de validação"
                    KeyAscii = 0
                End If
            Case Else
                MsgBox "Favor inserir apenas letras ou números!", vbCritical, "Erro de validação"
                KeyAscii = 0
        End Select
    End Sub


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

    • Marcado como Resposta alexhsantos sexta-feira, 18 de maio de 2012 12:02
    sexta-feira, 18 de maio de 2012 01:15
    Moderador
  • Veja mais em: http://www.ambienteoffice.com.br/officevba/mascara_para_campos_num_formulario/

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

    sexta-feira, 18 de maio de 2012 01:24
    Moderador
  • Crie um formulário com um TextBox chamado TextBox1 e cole o código abaixo na classe do formulário:

    Private Sub TextBox1_Change()
        
        Dim sTemp As String
        Static blEmMudança As Boolean
        
        If blEmMudança = True Then Exit Sub
        blEmMudança = True
            
        sTemp = TextBox1
        sTemp = Replace(sTemp, "-", vbNullString)
        
        'Limita o TextBox a 7 caracteres, fora o hífen
        sTemp = Left(sTemp, 7)
        
        'Construção da máscara. Talvez fique mais interessante se for feita com o uso de IFs
        Select Case Len(sTemp)
            Case Is <= 3
            Case Else
                sTemp = Left(sTemp, 3) & "-" & Mid(sTemp, 4)
        End Select
        
        'Atribui-se ao controle o valor da máscara com a devida formatação:
        TextBox1 = sTemp
        
        'Essa rotina poderá ser chamada de novo, já que o código findou.
        blEmMudança = False
    End Sub
    
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Select Case KeyAscii
            Case Asc("A") To Asc("Z"), Asc("a") To Asc("z")
                If Len(TextBox1) >= 3 Then
                    MsgBox "Favor inserir apenas números!", vbCritical, "Erro de validação"
                    KeyAscii = 0
                End If
            Case Asc("0") To Asc("9")
                If Len(TextBox1) < 3 Then
                    MsgBox "Favor inserir apenas letras!", vbCritical, "Erro de validação"
                    KeyAscii = 0
                End If
            Case Else
                MsgBox "Favor inserir apenas letras ou números!", vbCritical, "Erro de validação"
                KeyAscii = 0
        End Select
    End Sub


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

    Show de bola Felipe, funcionou perfeitamente, você realmente entende do assunto.

    Muito obrigado mais uma vez.

    sexta-feira, 18 de maio de 2012 12:01
  • Felipe, boa noite.

    A sua ajuda ao amigo alexhsantos, já meu deu um norte para finalizar minha alteração, mas mesmo assim estou penando.

    Preciso de algo semelhante e imagino que seja um arranjo simples.

    O TextBox1 deve possuir a seguinte configuração;

    CT-0001.P

    Ou seja, duas letras, traço, quatro números, ponto e uma letra no final.

    Você pode por gentileza me guiar neste assunto, creio que outros poderão ser auxiliados também.

    Obrigado.

    quinta-feira, 14 de junho de 2018 01:24