FUNCAO PIS/PASEP COM MASCARA

PABLOMOREIRAGV 06/10/2010 08:47:31
#354511
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

ELTAO 06/10/2010 09:00:22
#354512
Cara, antes de validar da um replace na string.



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
PABLOMOREIRAGV 06/10/2010 09:16:58
#354515
ELTAO,

Infelizmente não funcionou, quando digito o número, ele só me retorna valor [Ô]Válido[Ô] quando tiro os dígitos reparadores.
MARCELO.TREZE 06/10/2010 09:31:02
#354517
tenta isto

Private Sub TextBox21_LostFocus()
Range([Ô]Y40[Ô]) = PISPASEP(Replace(Replace(TextBox21.Text,[Ô].[Ô]),[Ô]-[Ô]))
If TextBox21.Text = [Ô][Ô] Then
Range([Ô]Y40[Ô]) = [Ô][Ô]
End If
End Sub
PABLOMOREIRAGV 06/10/2010 09:36:07
#354518
MARCELO-TREZE,

Esta dando [Ô]ERRO DE COMPILAÇÃO[Ô], [Ô]O ARGUMENTO NÃO é OPCIONAL[Ô].
MARCELO.TREZE 06/10/2010 10:15:11
#354521
este código é para VB6 ou .NET?

quais componentes está usando?
PABLOMOREIRAGV 06/10/2010 10:16:28
#354522
é uma textbox inserido em uma planilha do excel, ou seja VBA. Desculpe não ter avisado.
PABLOMOREIRAGV 06/10/2010 15:15:55
#354552
Alguém pode me ajudar?
PABLOMOREIRAGV 07/10/2010 08:27:19
#354591
Pedindo apoio urgente...
MARCELO.TREZE 07/10/2010 12:15:49
#354610
Resposta escolhida
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


PABLOMOREIRAGV 07/10/2010 12:19:43
#354612
MARCELO-TREZE,

Está dando erro de sintaxe e a linha abaixo está vermelha.

Range([Ô]Y40[Ô]) = PISPASEP(WorksheetFunction.Substitute(WorksheetFunction.Substitute(TextBox21.Text, [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô][Ô])

Página 1 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas