Veja os possiveis casos que chequei... Te enviarei o arquivo e teste... retornando caso queira que modifique algo.
'Checo se o comprimento total do codigo ultrapasa 15 dígitos
If ComCodigo > 15 Then
MsgBox "Os dígitos não podem ser maiores que 15 dígitos!", vbCritical, "ERRO"
Me.txtNum = ""
Exit Sub
End If
'Checo se o o código se inicia com PT e o seu comprimento total do codigo ultrapasa 11 dígitos
If ComCodigo > 11 And StrPrefixo = "PT" Then
MsgBox "Os código para Portugal não podem ser maiores que 11 dígitos!", vbCritical, "ERRO"
Me.txtNum = ""
Exit Sub
End If
'Checo que o código se inicia com PT e possue 9 dígitos, caso positivo vai diretamente para validação
If StrPrefixo = "PT" And Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 9 Then GoTo Valida
'Checo para PT + 11 ou 10 ou 6 ou 5 caso positivo emite menssagem de erro
If StrPrefixo = "PT" And Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 11 Or Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 10 Or Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 8 Or Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 6 Or Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 5 Then
MsgBox "Os dígitos não podem conter apenas: " & Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) & " números ", vbCritical, "ERRO"
Me.txtNum = ""
Exit Sub
End If
'Checo se as primeiras 3 posições do código são do tipo texto, e se a mesma se inicia com PT e o comprimento para 6 ou 5
If IsNumeric(Mid(Me.txtNum, 1, 3)) = False And StrPrefixo <> "PT" And Len(Mid(Me.txtNum, 4, Len(Me.txtNum))) = 6 Or Len(Mid(Me.txtNum, 4, Len(Me.txtNum))) = 5 Then
MsgBox "Os dígitos para códigos estrabgeiros não podem conter apenas: " & Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) & " números ", vbCritical, "ERRO"
Me.txtNum = ""
Exit Sub
End If
'Checo se código total tem menos de 11 dígitos
If Len(Me.txtNum) < 11 Then MsgBox "Código com menos de 11 dígitos!", vbCritical, "ERRO": Exit Sub
https://dl.dropbox.com/u/26441349/jhp_3.rar
Teste todas as combinações possíveis de acordo com vossa utilização, qualquer sugestão apite.
Cumprimentos.
'Checo se o comprimento total do codigo ultrapasa 15 dígitos
If ComCodigo > 15 Then
MsgBox "Os dígitos não podem ser maiores que 15 dígitos!", vbCritical, "ERRO"
Me.txtNum = ""
Exit Sub
End If
'Checo se o o código se inicia com PT e o seu comprimento total do codigo ultrapasa 11 dígitos
If ComCodigo > 11 And StrPrefixo = "PT" Then
MsgBox "Os código para Portugal não podem ser maiores que 11 dígitos!", vbCritical, "ERRO"
Me.txtNum = ""
Exit Sub
End If
'Checo que o código se inicia com PT e possue 9 dígitos, caso positivo vai diretamente para validação
If StrPrefixo = "PT" And Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 9 Then GoTo Valida
'Checo para PT + 11 ou 10 ou 6 ou 5 caso positivo emite menssagem de erro
If StrPrefixo = "PT" And Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 11 Or Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 10 Or Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 8 Or Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 6 Or Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) = 5 Then
MsgBox "Os dígitos não podem conter apenas: " & Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) & " números ", vbCritical, "ERRO"
Me.txtNum = ""
Exit Sub
End If
'Checo se as primeiras 3 posições do código são do tipo texto, e se a mesma se inicia com PT e o comprimento para 6 ou 5
If IsNumeric(Mid(Me.txtNum, 1, 3)) = False And StrPrefixo <> "PT" And Len(Mid(Me.txtNum, 4, Len(Me.txtNum))) = 6 Or Len(Mid(Me.txtNum, 4, Len(Me.txtNum))) = 5 Then
MsgBox "Os dígitos para códigos estrabgeiros não podem conter apenas: " & Len(Mid(Me.txtNum, 3, Len(Me.txtNum))) & " números ", vbCritical, "ERRO"
Me.txtNum = ""
Exit Sub
End If
'Checo se código total tem menos de 11 dígitos
If Len(Me.txtNum) < 11 Then MsgBox "Código com menos de 11 dígitos!", vbCritical, "ERRO": Exit Sub
https://dl.dropbox.com/u/26441349/jhp_3.rar
Teste todas as combinações possíveis de acordo com vossa utilização, qualquer sugestão apite.
Cumprimentos.