MASCARA DE CNPJ
Bom dia a todos,
Como posso fazer para que, ao digitar numeros em um textbox, ele automaticamente possa formatar esse numero no formato de CNPJ ? Exemplo se eu digitar os 2 primeiros numeros do CNPJ, automaticamente é incluido um "." depois dos 2 numeros?
aproveitando, como faço para que o textbox perca foco depois que seu numero de caracteres for preenchido?
Como posso fazer para que, ao digitar numeros em um textbox, ele automaticamente possa formatar esse numero no formato de CNPJ ? Exemplo se eu digitar os 2 primeiros numeros do CNPJ, automaticamente é incluido um "." depois dos 2 numeros?
aproveitando, como faço para que o textbox perca foco depois que seu numero de caracteres for preenchido?
porque você não usa o componente Masked Edit Control,
você pode formatar assim:
MskCnpj.FormattedText = "##.###.###/####-##"
você pode formatar assim:
MskCnpj.FormattedText = "##.###.###/####-##"
bom dia, eu faço assim:
If Len(txtCNPJ.Text) = 2 Then
txtCNPJ.Text = txtCNPJ.Text & "."
txtCNPJ.SelStart = 4
ElseIf Len(txtCNPJ.Text) = 6 Then
txtCNPJ.Text = txtCNPJ.Text & "."
txtCNPJ.SelStart = 9
ElseIf Len(txtCNPJ.Text) = 10 Then
txtCNPJ.Text = txtCNPJ.Text & "/"
txtCNPJ.SelStart = 14
ElseIf Len(txtCNPJ.Text) = 15 Then
txtCNPJ.Text = txtCNPJ.Text & "-"
txtCNPJ.SelStart = 17
End If
If Len(txtCNPJ.Text) = 2 Then
txtCNPJ.Text = txtCNPJ.Text & "."
txtCNPJ.SelStart = 4
ElseIf Len(txtCNPJ.Text) = 6 Then
txtCNPJ.Text = txtCNPJ.Text & "."
txtCNPJ.SelStart = 9
ElseIf Len(txtCNPJ.Text) = 10 Then
txtCNPJ.Text = txtCNPJ.Text & "/"
txtCNPJ.SelStart = 14
ElseIf Len(txtCNPJ.Text) = 15 Then
txtCNPJ.Text = txtCNPJ.Text & "-"
txtCNPJ.SelStart = 17
End If
Carinha, vc pode usar o Mask como o colega acima falou, para tanto, pressione Ctrl+T e selecione na lista o "Microsoft Masked edit control 6.0", e OK, dpois adicione o compoenente no form, e na propriedade mask vc põe "##.###.###/####-##" (sem aspas), e no Change do TextBox vc inclui o código para saltar após o término do preenchimento:
Qualquer dúvida poste...flw
Private Sub MaskEdBox1_Change()
'Verifica se existe espaço vazio na máscara
If InStr(MaskEdBox1.Text, MaskEdBox1.PromptChar) = 0 Then
'Pular para o próximo controle
SendKeys "{TAB}"
End If
End Sub
Qualquer dúvida poste...flw
tente isto:
ok?
Private Sub Text1_Change()
If Trim(Len(Text1.Text)) = 2 Then
Text1.Text = Left(Text1.Text, 2) & "."
Text1.SelStart = 4
ElseIf Trim(Len(Text1.Text)) = 6 Then
Text1.Text = Left(Text1.Text, 6) & "."
Text1.SelStart = Len(Text1.Text) + 1
ElseIf Trim(Len(Text1.Text)) = 10 Then
Text1.Text = Left(Text1.Text, 10) & "/"
Text1.SelStart = Len(Text1.Text) + 1
ElseIf Trim(Len(Text1.Text)) = 15 Then
Text1.Text = Left(Text1.Text, 15) & "-"
Text1.SelStart = Len(Text1.Text) + 1
End If
End Sub
ok?
TENTE ASSIM :
Private Sub Maskcpfcgc_LostFocus()
On Error GoTo Error_Hdl
If Len(MaskCPFCGC.Text) > 0 Then
Select Case Len(MaskCPFCGC.Text)
Case Is = 11
MaskCPFCGC.Mask = "###.###.###-##"
If Not calculacpf(MaskCPFCGC.Text) Then
MsgBox "CPF com DV incorreto !!!"
MaskCPFCGC = ""
MaskCPFCGC.Mask = "##############"
MaskCPFCGC.SetFocus
End If
Case Is = 14
MaskCPFCGC.Mask = "##.###.###/####-##"
If Not ValidaCGC(MaskCPFCGC.Text) Then
MsgBox "CGC com DV incorreto !!! "
MaskCPFCGC.Text = ""
MaskCPFCGC.Mask = "##############"
MaskCPFCGC.SetFocus
End If
End Select
End If
Exit Sub
24: Exit Sub
Error_Hdl:
26: MsgBox Err.Number & " - " & Err.Description & " na linha: " & Erl & " - FRMCLIENTES"
27: Exit Sub
End Sub
Private Sub Maskcpfcgc_KeyPress(KeyAscii As Integer)
On Error GoTo Error_Hdl
'se teclar enter envia um TAB
33: If KeyAscii = 13 Then
34: SendKeys "{TAB}"
35: KeyAscii = 0
36: End If
37: Exit Sub
Error_Hdl:
39: MsgBox Err.Number & " - " & Err.Description & " na linha: " & Erl & " - FRMCLIENTES"
40: Exit Sub
End Sub
Public Function CalculaCGC(Numero As String) As String
On Error GoTo Error_Hdl
Dim I As Integer
Dim prod As Integer
Dim mult As Integer
Dim digito As Integer
64: If Not IsNumeric(Numero) Then
65: CalculaCGC = ""
66: Exit Function
67: End If
69: mult = 2
70: For I = Len(Numero) To 1 Step -1
71: prod = prod + Val(Mid(Numero, I, 1)) * mult
72: mult = IIf(mult = 9, 2, mult + 1)
73: Next
75: digito = 11 - Int(prod Mod 11)
76: digito = IIf(digito = 10 Or digito = 11, 0, digito)
78: CalculaCGC = Trim(Str(digito))
80: Exit Function
Error_Hdl:
82: MsgBox Err.Number & " - " & Err.Description & " na linha: " & Erl & " - FRMCLIENTES"
83: Exit Function
End Function
'2- Validar CPF
On Error GoTo Error_Hdl
Dim I As Integer
Dim prod As Integer
Dim mult As Integer
Dim digito As Integer
64: If Not IsNumeric(Numero) Then
65: CalculaCGC = ""
66: Exit Function
67: End If
69: mult = 2
70: For I = Len(Numero) To 1 Step -1
71: prod = prod + Val(Mid(Numero, I, 1)) * mult
72: mult = IIf(mult = 9, 2, mult + 1)
73: Next
75: digito = 11 - Int(prod Mod 11)
76: digito = IIf(digito = 10 Or digito = 11, 0, digito)
78: CalculaCGC = Trim(Str(digito))
80: Exit Function
Error_Hdl:
82: MsgBox Err.Number & " - " & Err.Description & " na linha: " & Erl & " - FRMCLIENTES"
83: Exit Function
End Function
Public Function ValidaCGC(CGC As String) As Boolean
On Error GoTo Error_Hdl
88: If CalculaCGC(Left(CGC, 12)) <> Mid(CGC, 13, 1) Then
89: ValidaCGC = False
90: Exit Function
91: End If
93: If CalculaCGC(Left(CGC, 13)) <> Mid(CGC, 14, 1) Then
94: ValidaCGC = False
95: Exit Function
96: End If
98: ValidaCGC = True
100: Exit Function
Error_Hdl:
102: MsgBox Err.Number & " - " & Err.Description & " na linha: " & Erl & " - FRMCLIENTES"
103: Exit Function
End Function
'2- Validar CPF
Function calculacpf(CPF As String) As Boolean
'Esta rotina foi adaptada da revista Fórum Access
On Error GoTo Err_CPF
Dim I As Integer 'utilizada nos FOR... NEXT
Dim strcampo As String 'armazena do CPF que será utilizada para o cálculo
Dim strCaracter As String 'armazena os dÃgitos do CPF da direita para a esquerda
Dim intNumero As Integer 'armazena o digito separado para cálculo (uma a um)
Dim intMais As Integer 'armazena o digito especÃfico multiplicado pela sua base
Dim lngSoma As Long 'armazena a soma dos dÃgitos multiplicados pela sua base(intmais)
Dim dblDivisao As Double 'armazena a divisão dos dÃgitos * base por 11
Dim lngInteiro As Long 'armazena inteiro da divisão
Dim intResto As Integer 'armazena o resto
Dim intDig1 As Integer 'armazena o 1º digito verificador
Dim intDig2 As Integer 'armazena o 2º digito verificador
Dim strConf As String 'armazena o digito verificador
125: lngSoma = 0
126: intNumero = 0
127: intMais = 0
128: strcampo = Left(CPF, 9)
'Inicia cálculos do 1º dÃgito
131: For I = 2 To 10
132: strCaracter = Right(strcampo, I - 1)
133: intNumero = Left(strCaracter, 1)
134: intMais = intNumero * I
135: lngSoma = lngSoma + intMais
136: Next I
137: dblDivisao = lngSoma / 11
139: lngInteiro = Int(dblDivisao) * 11
140: intResto = lngSoma - lngInteiro
141: If intResto = 0 Or intResto = 1 Then
142: intDig1 = 0
143: Else
144: intDig1 = 11 - intResto
145: End If
147: strcampo = strcampo & intDig1 'concatena o CPF com o primeiro digito verificador
148: lngSoma = 0
149: intNumero = 0
150: intMais = 0
'Inicia cálculos do 2º dÃgito
152: For I = 2 To 11
153: strCaracter = Right(strcampo, I - 1)
154: intNumero = Left(strCaracter, 1)
155: intMais = intNumero * I
156: lngSoma = lngSoma + intMais
157: Next I
158: dblDivisao = lngSoma / 11
159: lngInteiro = Int(dblDivisao) * 11
160: intResto = lngSoma - lngInteiro
161: If intResto = 0 Or intResto = 1 Then
162: intDig2 = 0
163: Else
164: intDig2 = 11 - intResto
165: End If
166: strConf = intDig1 & intDig2
'Caso o CPF esteja errado dispara a mensagem
168: If strConf <> Right(CPF, 2) Then
169: calculacpf = False
170: Else
171: calculacpf = True
172: End If
173: Exit Function
Exit_CPF:
176: Exit Function
Err_CPF:
178: MsgBox Error$
179: Resume Exit_CPF
End Function
Tente isto no evento KeyPress do TextBox:
aproveite também para definir a propriedade MaxLength para 18 que é o tamanho máximo do CNPJ com a máscara.
espero ter ajudado
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8 'Aceita o BACK SPACE
Case 13: SendKeys "{TAB}" 'Emula o TAB
Case 48 To 57
If Text1.SelStart = 2 Then Text1.SelText = "."
If Text1.SelStart = 6 Then Text1.SelText = "."
If Text1.SelStart = 10 Then Text1.SelText = "/"
If Text1.SelStart = 15 Then Text1.SelText = "-"
Case Else: KeyAscii = 0 'Ignora os outros caracteres
End Select
End Sub
aproveite também para definir a propriedade MaxLength para 18 que é o tamanho máximo do CNPJ com a máscara.
espero ter ajudado
esse link é o melhor que já vi , faz qualquer tipo de mascara
Bom . . . só pra lembrar o controle MaskEdit tem uma propriedade AUTOTAB. Que faz passar para o próximo campo assim q preenchido.
Tópico encerrado , respostas não são mais permitidas