FUNCAO PIS/PASEP COM MASCARA
Olá,
Estou postando abaixo um código que tem a função de validar PIS/PASEP, ou seja, está funcionando beleza quanto a validação, porém só funciona se colocado sem os pontos e o dÃgito. Como faço para que a validação tenha efeito com a máscara ex: 000.00000.00-0.
**Função para validação:
Public Function PISPASEP(numero As String)
Dim ftap As String
Dim total As String
Dim i As Integer
Dim resto As Integer
If Val(numero) = 0 Or Len(numero) <> 11 Then
PISPASEP = False
Exit Function
End If
ftap = [Ô]3298765432[Ô]
total = 0
For i = 1 To 10
total = total + Val(Mid(numero, i, 1)) * Val(Mid(ftap, i, 1))
Next i
resto = Int(total Mod 11)
If resto <> 0 Then
resto = 11 - resto
End If
If resto <> Val(Mid(numero, 11, 1)) Then
PISPASEP = [Ô]Inválido[Ô]
Exit Function
End If
PISPASEP = [Ô]Válido[Ô]
End Function
========================================
** Esta é a máscara que está sendo usada atualmente porém a função não reconhece:
Private Sub TextBox21_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 8, 48 To 57 [ô] BackSpace e numericos
If Len(TextBox21) = 3 Then TextBox21 = TextBox21 + [Ô].[Ô]
If Len(TextBox21) = 9 Then TextBox21 = TextBox21 + [Ô].[Ô]
If Len(TextBox21) = 12 Then TextBox21 = TextBox21 + [Ô]-[Ô]
SendKeys [Ô]{End}[Ô], True
Case Else [ô] o resto é travado
KeyAscii = 0
End Select
End Sub
========================================
** Chamando a função
Private Sub TextBox21_LostFocus()
Range([Ô]Y40[Ô]) = PISPASEP(TextBox21.Text)
If TextBox21.Text = [Ô][Ô] Then
Range([Ô]Y40[Ô]) = [Ô][Ô]
End If
End Sub
Estou postando abaixo um código que tem a função de validar PIS/PASEP, ou seja, está funcionando beleza quanto a validação, porém só funciona se colocado sem os pontos e o dÃgito. Como faço para que a validação tenha efeito com a máscara ex: 000.00000.00-0.
**Função para validação:
Public Function PISPASEP(numero As String)
Dim ftap As String
Dim total As String
Dim i As Integer
Dim resto As Integer
If Val(numero) = 0 Or Len(numero) <> 11 Then
PISPASEP = False
Exit Function
End If
ftap = [Ô]3298765432[Ô]
total = 0
For i = 1 To 10
total = total + Val(Mid(numero, i, 1)) * Val(Mid(ftap, i, 1))
Next i
resto = Int(total Mod 11)
If resto <> 0 Then
resto = 11 - resto
End If
If resto <> Val(Mid(numero, 11, 1)) Then
PISPASEP = [Ô]Inválido[Ô]
Exit Function
End If
PISPASEP = [Ô]Válido[Ô]
End Function
========================================
** Esta é a máscara que está sendo usada atualmente porém a função não reconhece:
Private Sub TextBox21_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 8, 48 To 57 [ô] BackSpace e numericos
If Len(TextBox21) = 3 Then TextBox21 = TextBox21 + [Ô].[Ô]
If Len(TextBox21) = 9 Then TextBox21 = TextBox21 + [Ô].[Ô]
If Len(TextBox21) = 12 Then TextBox21 = TextBox21 + [Ô]-[Ô]
SendKeys [Ô]{End}[Ô], True
Case Else [ô] o resto é travado
KeyAscii = 0
End Select
End Sub
========================================
** Chamando a função
Private Sub TextBox21_LostFocus()
Range([Ô]Y40[Ô]) = PISPASEP(TextBox21.Text)
If TextBox21.Text = [Ô][Ô] Then
Range([Ô]Y40[Ô]) = [Ô][Ô]
End If
End Sub
Cara, antes de validar da um replace na string.
faça um teste ve se vai te ajudar
Public Function PISPASEP(numero As String)
Dim ftap As String
Dim total As String
Dim i As Integer
Dim resto As Integer
Dim num as String
num = replace(numero, [Ô].[Ô],[Ô][Ô])
num = replace(numero,[Ô]-[Ô],[Ô][Ô])
If Val(num) = 0 Or Len(num) <> 11 Then
PISPASEP = False
Exit Function
End If
faça um teste ve se vai te ajudar
ELTAO,
Infelizmente não funcionou, quando digito o número, ele só me retorna valor [Ô]Válido[Ô] quando tiro os dÃgitos reparadores.
Infelizmente não funcionou, quando digito o número, ele só me retorna valor [Ô]Válido[Ô] quando tiro os dÃgitos reparadores.
tenta isto
Private Sub TextBox21_LostFocus()
Range([Ô]Y40[Ô]) = PISPASEP(Replace(Replace(TextBox21.Text,[Ô].[Ô]),[Ô]-[Ô]))
If TextBox21.Text = [Ô][Ô] Then
Range([Ô]Y40[Ô]) = [Ô][Ô]
End If
End Sub
MARCELO-TREZE,
Esta dando [Ô]ERRO DE COMPILAÇÃO[Ô], [Ô]O ARGUMENTO NÃO é OPCIONAL[Ô].
Esta dando [Ô]ERRO DE COMPILAÇÃO[Ô], [Ô]O ARGUMENTO NÃO é OPCIONAL[Ô].
este código é para VB6 ou .NET?
quais componentes está usando?
quais componentes está usando?
é uma textbox inserido em uma planilha do excel, ou seja VBA. Desculpe não ter avisado.
Alguém pode me ajudar?
Pedindo apoio urgente...
pablo não sei se vai funcionar, mas podemos tentar assim agora
Private Sub TextBox21_LostFocus()
Range([Ô]Y40[Ô]) = PISPASEP(WorksheetFunction.Substitute(WorksheetFunction.Substitute(TextBox21.Text, [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô][Ô])
If TextBox21.Text = [Ô][Ô] Then
Range([Ô]Y40[Ô]) = [Ô][Ô]
End If
End Sub
MARCELO-TREZE,
Está dando erro de sintaxe e a linha abaixo está vermelha.
Range([Ô]Y40[Ô]) = PISPASEP(WorksheetFunction.Substitute(WorksheetFunction.Substitute(TextBox21.Text, [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô][Ô])
Está dando erro de sintaxe e a linha abaixo está vermelha.
Range([Ô]Y40[Ô]) = PISPASEP(WorksheetFunction.Substitute(WorksheetFunction.Substitute(TextBox21.Text, [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô][Ô])
Tópico encerrado , respostas não são mais permitidas