Bem, vamos primeiro testar o código neste meu exemplo, para depois adaptá-lo ao seu..
Observe que no começo do código coloquei condições para algumas situações
1 - Verifica se o numero após a Sgla (Iniciando na terceira posição) contem mais de 9 dígitos
2 - Caso a sigla seja diferente de PT emite menssagem e encerra a sub
3 - Verifico se a terceira posição é numero ou texto, caso seja texto emite msg de erro
Teste com numeros:
DS123456789
PT123456789
PTD23456789
PT12345678945
CÓDIGO UTILIZADO
Private Sub btnVerifica_Click()
'***********************************************************************
'Rotina de verificação para número de registro de bovinos em Portugal
'Efetuada por Pelo Usuário PILOTO, do Fórum MáximoAccess
'Para Joel Henriques
'Em 31/10/2012
'***********************************************************************
Dim NumCodigo
Dim Num As Integer, NumTot As Integer, NumTot1 As Integer
Dim Result As Long, ResultMult As Long
Dim Digito As Long, DigitoAtual As Long
Dim StrPrefixo
Dim y As Integer
'Verifico o comprimento numérico após as duas primeiras posições
y = Len(Me.txtNum)
'Aqui verifica se os dígitos numéricos contem mais de 9 digitos, caso contenha emite menssagem e encerra a sub
If Len(Mid(Me.txtNum, 3, y)) > 9 Then MsgBox "Os números após a sigla está com mais de 9 dígitos", vbCritical, "ERRO": Exit Sub
'Carrego as duas primeira posições para verifica se a sigla corresponde a de portugal: PT
'Caso confira prosegue o código, caso contrário emite menssagem e encerra a sub
StrPrefixo = Left(Me.txtNum, 2)
If StrPrefixo <> "PT" Then
MsgBox "O Código digitádo não é pertencente a Portugal(PT)", vbCritical, "ERRO"
StrPrefixo = Empty
Exit Sub
Else
'Carrego a variável com o conteúdo da posição 3, e verifico se é numerico, caso positivo prossegue o código
'Caso contrário emite menssagem e encerra a Sub
StrPrefixo = Mid(Me.txtNum, 3, 1)
If IsNumeric(StrPrefixo) = False Then
MsgBox "A terceira posição está preenchida com letra, Verifique", vbCritical, "ERRO"
Else
'Caso não ocorra algumas das hipóteses de erro acima, carrega na variável os numeros para checar o dígito verificador
NumCodigo = Mid(Me.txtNum, 4,
'Carrego a posição referente ao digito verificador para checar se oonfere ao final o código
DigitoAtual = Mid(Me.txtNum, 3, 1)
'*********************************************************************************************************************
'Execução dos cálculos para o digito verificador
'Para a soma dos digitos na posição 2,4,6,8
For x = 2 To 8 Step 2
Num = Mid(NumCodigo, x, 1)
NumTot = NumTot + Num
Next x
'Para a soma de todos os digitos
For x = 1 To 8
Num = Mid(NumCodigo, x, 1)
NumTot1 = NumTot1 + Num
Next x
Result = NumTot1 + NumTot
ResultMult = fncMult10(Result)
'*********************************************************************************************************************
'Comparação do digito contido no código digitado com o digito calculado
Digito = ResultMult - Result
Me.txtNumVal = Digito
If DigitoAtual <> Digito Then
MsgBox "Numero inválido", vbCritical, "ERRO"
Else
MsgBox "Numero correto", vbInformation, "VALIDO"
End If
End If
End If
End Sub
https://dl.dropbox.com/u/26441349/jhp_2.rar
Cumprimentos