MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


    [Resolvido]excell para VB

    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty excell para VB

    Mensagem  jhp 31/10/2012, 11:45

    bom dia

    uma pergunta seria possivel adpatar um excell para VB codigo este que seria incluido num form de acess para validar um numero especifico caso estivesse invalido mensagem de erro?


    numero correctos
    PT463311390 em que o "4" e o numero a vermelho do excell

    PTS600600 numero correcto porque o 3 digito e uma letra

    e quando os 2 primeiros digitos neste caso o PT nao for PT por ser ES DK ou outro isso nao se verifica estando o numero correcto

    o arquivo de excell esta anexado

    obrigado
    Joel Henriques
    Anexos
    [Resolvido]excell para VB Attachmentchk digito.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (5 Kb) Baixado 4 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 13:11

    De exemplos de numeros corretos e numeros incorretos..

    E onde estão esses numeros no form? como deseja validá-los, quando os inserir?


    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 13:23

    Não entendi esse seu calculo no excell....
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 14:09

    um numero correcto
    PT216832811
    PT016832812
    PT816832813
    PT616832814
    numero incorreto
    basta trocar o 3 digito desses ai acima e o numero e invalido


    o calculo no excell calcula o valor do 3 digito nesse caso o "2,0,8,6" etc etc
    e baseado nos outros 8 digitos seguintes para testares no excell nao metas o 3 digito que e o chamado check digit é estilo codigo de barras o 3 digito e um numero de segurança que valida todo o outro resto
    para que conste isso e o alguritmo de identificação bovina em portugal hehe
    a 3 casos extra
    os que nao sao "PT" ou seja que nao pertencem a Portugal e caso isso esse algoritmo nao é regra
    e caso sejam animais mais antigos estilo PTS...... em que o 3 digito ai e uma letra e nao um numero de 0 a 9
    e por ultimo os PT5300300 em que a seguir ao 3 digito so constam 6 digitos
    explicação do numero

    PT codigo do pais
    S, 7 ou 16, 52 etc direcção regional
    restantes 6 e o numero do bovino
    o codigo e posto no formulario em "contruir evento" dentro do proprio lugar onde se digita isso

    obrigado
    Joel Henriques
    testem com esses numeros vao ver que o n~vermelho e o 3 digito ai deles mas metam na parte amarela so os seguites 8

    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 14:38

    exemplo do calculo que e feito no excell para o nº PT216832811

    PT 2 1 6 8 3 2 8 1 1
    6 3 8 1 soma = 18
    1 6 8 3 2 8 1 1 soma = 30 + 18 anteriores = 48 - 1 = 47 e o valor e arredondado para cima ou seja 50
    48-50=2 o 2 resulta desta coisa

    outro exemplo PT763311390

    PT 7 6 3 3 1 1 3 9 0
    3 1 3 0 soma = 7
    6 3 3 1 1 3 9 0 soma = 26 + 7 anteriores = 33 - 1 = 32 valor arredonda pa cima = 40
    40-33 =7 la esta o 7 e o 3 digito

    obrigado
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 15:17

    Coloca isso ai colorido para que eu possa entender melhor..

    E coloca um exemplo errado para que eu possa ter paramentros... para visualizar melhor isso.

    Cumprimentos
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 15:19

    desculpa eu tinha dado uns espaços mas nao ficaram aqui
    exemplo do calculo que e feito no excell para o nº PT216832811

    PT 2 1 6 8 3 2 8 1 1
    6 3 8 1 soma = 18
    1 6 8 3 2 8 1 1 "estes sao todos os 8 digitos" soma = 30
    30 + 18 anteriores = 48 e o valor e arredondado para cima ou seja 50
    48-50=2 o 2 resulta desta coisa

    outro exemplo PT763311390

    PT 7 6 3 3 1 1 3 9 0
    3 1 3 0 soma = 7
    6 3 3 1 1 3 9 0 "estes sao todos os 8 digitos" soma = 26 + 7 anteriores = 33
    arredonda pa cima = 40
    40-33 =7 la esta o 7 e o 3 digito

    la em cima entre os PTS e os PT5 e uma regra perdão estes numeros so teem 9 digitos ao contrario dos 11 que passam por essa validação
    sendo assim sao so 2 regras que nao passam por essa validação os numeros apenas com 9 digitos e os que nao começam por PT
    obrigado


    Última edição por jhp em 31/10/2012, 15:33, editado 2 vez(es)
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 15:29

    vi agora uma coisa
    a formula do arredonda do excell e esta =ARRED.PARA.CIMA(L13; -1) ou seja aquele "-1" nao sobetrai apenas trasforma o calculo em multiplos de 10 em 10 sendo que
    41= 50
    40=40 e
    39=40

    ja corrigi os valores em cima peço desculpa mas nao conhecia esta formula no excell

    exemplo errado
    PT 3 1 6 8 3 2 8 1 1 o 3 esta mal deveria ser o "2" que resulta do calculo
    6 3 8 1 soma = 18
    1 6 8 3 2 8 1 1 "estes sao todos os 8 digitos" soma = 30
    30 + 18 anteriores = 48 e o valor e arredondado para cima ou seja 50
    48-50=2 o 2 resulta desta coisa
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 15:37

    Ok... agora o que pretende... digitar um numero e obter o digito verificador ou pegar um numero ja existente e verificar?
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 15:41

    obrigado piloto olha fiz ai uma alterações porque isto tava dificil de fica certo
    o que pretendo e que ao digitar o nº ele verifique se está certo se nao tiver da erro dizendo que o nº está mal se tiver certo ele nao diz nada e continua
    uma coisa nao sei se e relevante ou nao
    o campo na tabela onde isso está é texto ou esta como texto no access

    thanks
    depois quem quiser tem ai o verificador para os numeros dos bois e vacas em portugal
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 17:02

    Ok para o que pretende eis o cálculo:



    Private Sub btnVerifica_Click()
    Dim Num As Integer, NumTot As Integer, NumTot1 As Integer
    Dim Result As Long, ResultMult As Long
    Dim Digito As Long
    Dim Y As Integer

    'Para a soma dos digitos na posição 2,4,6,8

    For x = 2 To 8 Step 2
    Num = Mid(Me.txtNum, x, 1)
    NumTot = NumTot + Num
    Next x

    'Para a soma de todos os digitos
    For x = 1 To 8
    Num = Mid(Me.txtNum, x, 1)
    NumTot1 = NumTot1 + Num
    Next x

    Result = NumTot1 + NumTot
    ResultMult = fncMult10(Result)

    Digito = ResultMult - Result
    MsgBox Digito

    Me.txtNumVal = Digito


    End Sub

    'Função para multiplos de 10
    Public Function fncMult10(Num As Long) As Long
    Dim j As Byte
    For j = 0 To 9
    If (Num + j) Mod 10 = 0 Then
    fncMult10 = Num + j
    Exit For
    End If
    Next
    End Function



    No exemplo digite os 8 numeros do codigo sem o digito verificador e prima o botão...

    https://dl.dropbox.com/u/26441349/Jhp.rar


    Cumprimentos.

    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 17:08

    xii ok desde ja um obrigado os calculos batem certinhos mesmo fantastico
    agora eu queria que isso descarta-se a verificação quando
    nao começa por PT
    ou quando apenas tem 9 digitos
    ele calcula mas eu quero que verifique so
    e uma mensagem de erro se a validação nao passa-se era possivel piloto?

    obrigado muito obrigado desde ja
    sei que tou a ser chato desculpem
    Joel
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 17:12

    Oras pois... se calcula... verifica tambem... ou não? hehehe

    E so adapta-lo ao que pretente...

    Coloque as condicoes que deseja que sejam verificadas.

    Cumprimentos.
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 17:18

    pois hehehe Embarassed Embarassed eu na percebo mesmo disto Embarassed é que nem sei por onde eide pegar Embarassed

    seria possivel incluir uma mensagem de erro
    e por o codigo a descartar as outras duas hipoteses? e que se puser as outras duas hipoteses ele da erro como e logico mas elas estao certas mesmo assim
    sei que ja me estou a exceder mas gostava mesmo de obter isso e como nao percebo de VB pedia ajuda

    os campos que ele verifica tem o nome de "cod_bov" nas tabelas

    muito obrigado mesmo
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 17:28

    Substitua o código do botão por este:


    Private Sub btnVerifica_Click()
    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

    NumCodigo = Mid(Me.txtNum, 4, 8)
    DigitoAtual = Mid(Me.txtNum, 3, 1)

    '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)

    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 Sub



    E teste com o numero:

    PT216832841

    Depois altere qualquer um deles...


    Cumprimentos.


    Última edição por PILOTO em 31/10/2012, 17:42, editado 2 vez(es)
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 17:33

    da erro
    pondo PT ou sem PT ou sem o check digito Embarassed
    ta ai o print
    [Resolvido]excell para VB 2whh94i


    Última edição por jhp em 31/10/2012, 17:37, editado 1 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 17:35

    Lembrando que conforme esta agora, ele descarta a sigla deixando apenas o numero

    Guarda o digito que esta no numero, e executa os calculos do restante. ao final pega o digito verificador correto e compara com o antigo, se bater da codigo correto, caso nao, codigo invalido


    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 17:37

    Tem que ter o pt, coloquei uma mascara para digitação no campo, teste

    https://dl.dropbox.com/u/26441349/jhp_1.rar


    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 17:40

    É lógico que deu Erro, no final após o End Sub, não tem esse <\pre>


    Cumprimentos.
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 17:44

    pois acredite e o que faz ser leigo nisso mas fica essa ja aprendi hehe thanks

    ja bate certo, ja tenho e vergonha para pedir o restito que falta la Embarassed mas aqui vai se na quiser ja me ajudou muito acredite

    quero que ele descarte os ES DK etc
    descarte os PT com 9 digitos estilo PT5300300 ou PTS300300
    uma coisa o comprimento do campo pode conter 15 digitos incluindo a letra isto porque os numeros que nao sao portugueses teem mais de 11 digitos
    estes descartes sao porque tem uma outra nomeração mais antiga e a externa a portugal

    obrigado desde ja
    Joel Henriques
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 18:06

    O Codigo está feito para calculos em numeros com 9 digitos, sendo que executa-os em 8 digitos apenas...

    De exemplos práticos dos diversos descartes...

    Cumprimentos.
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 18:13

    ok
    descartar PTS300300 o numero esta bem porque tem 9 digitos
    descartar PT7300300 o numero esta bem porque tem 9 digitos
    descartar por exemplo ES09100293090 e externo a portugal ES = espanha e tem mais de 11 digitos

    descartar DE0346370318 e externo a portugal DE = alemanha e tem mais de 11 digitos
    etc

    no fundo os que passam por isso teem de começar por PT e ter mais 9 digitos que prefaz os 11

    pode haver casos de externos a portugal terem os 11 mas ai nao teem PT tem outra estilo NL118619039 neste caso NL= holanda
    todos esses numeros que nao sao PT sao validos
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 18:20

    Me descreva a utilização disso, pois na caixa texto nao aceita mais de 9 digitos... está com uma mascara.

    Mas me fale a real utilização para que eu possa ver como será feito esses descartes...

    Se vai checar em tabela, se alguem vai digitar... etc... como será isso?
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 18:25

    sim tem mascara pode ver
    vou deixar aqui o inicio da base de dados
    ta ai a tabela e o form nao será bem esse mas e uma questão depois de eu adptar e redesenhar
    o que quero e que quando acabe o registo ele ou deia erro (se tiver errado) ou que deixe passar caso nao tenha de passar pela verificação
    a utilização e ter uma base de dados com os dados do bovino sendo que o numero deve estar certo e nao deixar entrar qualquer coisa
    obrigado piloto
    uma coisa mande PM com o nome porque será incluido no form sobre do programa porque a ajuda tem sido imensa

    anexo a BD
    Anexos
    [Resolvido]excell para VB Attachmentlivro de bovinos.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (42 Kb) Baixado 5 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 18:29

    Ok... Não há necessidade de colocar no sistema... colocarei os creditos apenas no código.


    Descreva a situação real de um cadastro, assim:

    O Usuario pega o Documento x e cadastra no sistema, pra isso, aquilo e isso, depois clicar em algum lugar... Se espera que o sistema faça assim ou assado...

    Esse numero vem ja em um documento ou o que?


    SO pra eu entender a logica disso.


    Cumprimentos.
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 31/10/2012, 18:33

    ok
    aquilo vai ter
    os dados do bovino estilo
    n do bovino
    mae
    data de nascimento
    sexo
    e raça
    depois a outras partes
    com entradas e saidas da exploração
    mas isso na tem que ter codigo
    o codigo e executado quando se clika em gravar registo e verifica o nº do bovino se corresponde a essas formulas os descartes e porque em portugal a animais da UE espanha frança alemanha etc etc
    e o outro dos 9 digitos e porque esses nao teem esse codigo de segurança que valida o numero

    sim este tipo de dados veem num passaporte de animal mas o codigo e para contrariar o erro na introdução de dados

    obrigado
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 18:39

    Então o usuário ira cadastrar os "Dados" do bovino, após digitar o codigo se tiver um desses erros que enumerou.. gera menssagem e limpa o campo forçando o usuario a redigitar?


    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 31/10/2012, 20:09

    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, Cool
    '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


    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 1/11/2012, 13:01

    Adicionado tratamento de erros.

    Novo tratamento para situação de digitação: PT1233454f9
    - Tambem inclui a verificação para Código com o total de dígitos inferior a 11 dígitos (Letras e numeros)



    Private Sub btnVerifica_Click()
    On Error GoTo trataerro
    '***********************************************************************
    '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
    'Aqui verifica se o total de dígitos no código é inferior a 11
    If Len(Me.txtNum) < 11 Then MsgBox "Código com menos de 11 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, 8)
    '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
    Exit Sub

    Exit_TrataErro:
    DoCmd.Hourglass False
    DoCmd.Echo True
    Exit Sub

    trataerro:
    If Err.Number = 13 Then
    MsgBox "O Dígito na posição " & X + 1 & " após a sigla, é do tipo texto", vbCritical, "ABORTANDO OPERAÇÃO"
    Exit Sub
    Else
    DoCmd.Hourglass False
    DoCmd.Echo True
    MsgErro = "Erro # " & Str(Err.Number) & " gerado na " & Err.Source _
    & vbNewLine & vbNewLine & "Descrição: " & Err.Description _
    & vbNewLine & vbNewLine & "Por favor contate o Administrador de Sistema."
    MsgBox MsgErro, vbMsgBoxHelpButton + vbCritical, "Erro", Err.HelpFile, Err.HelpContext
    Resume Exit_TrataErro
    End If
    End Sub



    Cumprimentos
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 1/11/2012, 20:45

    para os descartes o erro nao se verifica deve passar a frente e nao dizer qualquer erro so esse que tem a letra la no meio e que nao se verifica uma vez mais obrigado esta ajuda está a ser preciosa depois testo amanha ou sabado
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 2/11/2012, 11:27

    Amigo, cá no Brasil, descartar significa n]ao utilizar, ou seja algo que não serve, não estou entendendo a sua utilização da palavra "Descartar".... Seja mais claro...


    Qual tipo de código poderá ser inserido?


    Qual tipo de código não será inserido?

    Saudações.
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 3/11/2012, 11:40

    a peço desculpa piloto
    descartar aqui pode ser o erro nao se verifica ou seja e como o numero está certo e deixar de lado tipo
    se PT+ 9 digitos passa pela validação
    caso contrario salta a validação para o fim sem dar erro porque está certo

    os PT + 7 digitos ou tudo o que nao seja PT sao os casos que passam ao lado dessa validação

    obrigado esta ajuda está a ser um espanto

    podes aplicar na BD que pus la atras pa testes
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 3/11/2012, 12:11

    Eu ainda não estou entendo a sua forma de se expressar.... Estamos com um problema de idioma ai.. hehehehe


    O usuario digita um código....

    PTS300300
    ou
    PT7300300
    ou
    ES09100293090

    Neste caso grava ou não o registro? mostra o erro e limpa o campo para digitar novamente?


    Se o código for:


    PT 2 1 6 8 3 2 8 1 1

    Neste caso grava ou não o registro? mostra o erro e limpa o campo para digitar novamente?



    Isso que eu quero saber... em qual caso grava o registro??????????
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 08:59

    pois peço desculpa piloto mas vamos ver agora com isso ai eu vou explicar o melhor que posso

    nos 1º 3 casos os PT + 7 e o estrageiro ES ele grava o registo e nao dá erro algum o numero esta correcto por isso grava e passa para o proximo não a forma de dizer se esta errado na ausencia de erro está certo

    no 2º caso esse e o que tem de passar pela validação e o unico caso que passa pelo script se tiver errado da erro e limpa o campo se tiver certo grava o registo e passa em frente

    um grande obrigado
    Joel Henriques
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 5/11/2012, 09:14

    Vamos la...

    No segundo caso:

    PT 2 1 6 8 3 2 8 1 1

    Vai checar se o dígito é valido, caso positivo... grava..

    Observe que o numero é composto de 8 dígitos + 1 dígito de conferencia (em vermelho)
    Total: 9 dígitos


    Agora a dúvida que tenho>


    nos 1º 3 casos os PT + 7 e o estrageiro ES ele grava o registo e nao dá erro algum

    Você falou PT + 7

    Ora... se o correto é PT + 9 (sendo um dígito o de conferência " 8 + 1")

    Isso não seria assim:

    PT + 8 , o sistema calcula o dig de conferencia e retorna PT 1 + 8 = PT + 9? gravando o numero com o dígito calculado?



    Cumprimentos.
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 09:19

    sim no PTS300300 em frente ao PT sao 7 digitos ai nao a qualquer digito de segurança ou verificador por isso esta correcto sendo que grava sem qualquer erro

    no que passa pela verificação ok sao PT +1 + 8 sendo que o "1" e o verificador por isso tem de passar pelo script o que tas a crer dizer penso eu é que o utilizador digita tudo menos esse estarei certo?
    eu digo que nao porque o utilizador deve escrever tudo incluindo o digito verificador porque pode conter erro nas guias de entrada na exploração ou seja a papelada usada no transporte no brasil nao sei se funciona assim
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 5/11/2012, 09:35

    Mas esse número não é padrão com o dig verificador?


    sim no PTS300300 em frente ao PT sao 7 digitos ai nao a qualquer digito de segurança ou verificador por isso esta correcto sendo que grava sem qualquer erro

    As guias não vem com numero padronizado? PT + 9 digitos? ou seja: PT + Verificador + 8 digitos?

    Existem guias com:

    PT + 8 digitos?
    PT + 7 digitos?
    PT + 6 digitos?


    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 5/11/2012, 09:39

    Faremos assim....

    Escreva aqui as possibilidades para:


    Gravar diretamente sem mensagem alguma e sem passar pela validação:


    Passar pela validação do dígito verificador e após isso gravar:


    Casos que que o que foi digitado será considerado invalido, limpa a caixa para nova digitação:
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 09:44

    1 - Gravar diretamente sem mensagem alguma e sem passar pela validação:
    PTS300300
    PT7300300
    ES, DK, NL etc

    2 - Passar pela validação do dígito verificador e após isso gravar:
    PT216832811
    PT016832812
    PT052461903 ou seja todos os PT + 9 digitos

    3 - Casos que o que foi digitado será considerado invalido, limpa a caixa para nova digitação:

    vou por os acima errados
    PT816832811
    PT316832812
    PT552461903 mais uma vez PT + 9
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 5/11/2012, 09:56

    os casos 1 e 2 eu entendi.. vamos apenas ao 3


    3 - Casos que o que foi digitado será considerado invalido, limpa a caixa para nova digitação:


    Colocarei alguns exemplo... no post que responder coloque apenas os que considerar errado

    3.1 - PT + 9 digitos (cujo dig. verificador seja errado)
    3.2 - PT ou ES ou DK ou NL + 6 digitos
    3.3 - PT ou ES ou DK ou NL + 8 digitos
    3.4 - PT ou ES ou DK ou NL + 10 digitos
    3.4 - PTS ou ESS ou DKS ou NLS + 5 digitos
    3.6 - PTS ou ESS ou DKS ou NLS + 6 digitos
    3.7 - PTS ou ESS ou DKS ou NLS + 7 digitos
    3.8 - PTS ou ESS ou DKS ou NLS + 8 digitos
    3.9 - PTS ou ESS ou DKS ou NLS + 9 digitos


    Se tiver mais algum caso de errado coloque.


    Cumprimentos
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 10:02

    Colocarei alguns exemplo... no post que responder coloque apenas os que considerar errado

    3.1 - PT + 9 digitos (cujo dig. verificador seja errado) sim errado mesmo o digito confirma a validade
    3.2 - PT ou ES ou DK ou NL + 6 digitos (nao se verifica de todo a mascar obriga a PT + 7 ou ES DK tudo +7
    3.3 - PT ou ES ou DK ou NL + 8 digitos - errado para os PT piloto
    3.4 - PT ou ES ou DK ou NL + 10 digitos - Errado para os PT piloto
    3.5 - PTS ou ESS ou DKS ou NLS + 5 digitos aqui ta mal a mascara obriga a minimo de 7 digitos a frente disso ai
    3.6 - PTS ou ESS ou DKS ou NLS + 6 digitos aqui na mal para os estrangeiros mas e uma coisa que nao se verifica de todo o utilizador sabe que ES e DK FR etc nao tem mais letras
    3.7 - PTS ou ESS ou DKS ou NLS + 7 digitos errado para os PT PTS + 6 apenas senao so a os PT + 9 e para os estrageiros caso acima
    3.8 - PTS ou ESS ou DKS ou NLS + 8 digitos errado os PT Letra so tem 6 digitos a frente disso
    3.9 - PTS ou ESS ou DKS ou NLS + 9 digitos errado caso acima

    pronto acabei a edição
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 10:36

    uma coisa piloto
    a casos que nao se verificam mesmo por isso nao teem de ser verificados pelo script

    os PTS + 5 ou +8 nao existem
    os DKS ou FRS ou ESR isto nao existe
    os PT + 10 tb nao existem
    o utilizador tambem nao erra dessa maneira penso eu
    uma coisa o script so verifica os PT + 9 apenas e so todo o resto ele deixa passar ok

    obrigado
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 5/11/2012, 10:53

    Não iremos utilizar mascaras... reveja então este item:

    3.2 - PT ou ES ou DK ou NL + 6 digitos (nao se verifica de todo a mascar obriga a PT + 7 ou ES DK tudo +7


    Cumprimentos.
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 11:02

    ok sem mascaras
    a mascara obriga assim
    2 letras + letra ou nº obrigatorio + 6 nº obrigatorios e o restante sao nº facultativos

    passando ao que tu dizes sem mascaras
    sim a frente do codigo do pais PT DK NL ES etc obriga a um minimo de 7 digitos nos PT o 3º pode ou nao ser uma letra nos estrangeiros e mesmo so essas 2 letras

    repare que a mascara tem um defeito aceita os ES DK FR mais uma letra logo de seguida mas estão errados mesmo
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 5/11/2012, 11:07

    Por favor apenas coloque errado ou certo. caso tiver mais alguma sugestão de errado coloque tambem.
    Não precisa explicar o porque é errado, devido a diferença em nossos idiomas, sua explicação acaba por me confundir.


    3.2 - PT ou ES ou DK ou NL + 6 digitos
    3.3 - PT ou ES ou DK ou NL + 8 digitos
    3.4 - PT ou ES ou DK ou NL + 10 digitos
    3.5 - PTS ou ESS ou DKS ou NLS + 5 digitos
    3.6 - PTS ou ESS ou DKS ou NLS + 6 digitos
    3.7 - PTS ou ESS ou DKS ou NLS + 7 digitos
    3.8 - PTS ou ESS ou DKS ou NLS + 8 digitos
    3.9 - PTS ou ESS ou DKS ou NLS + 9 digitos
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 11:17

    3.2 - PT ou ES ou DK ou NL + 6 digitos errado minimo 7
    3.3 - PT ou ES ou DK ou NL + 8 digitos errado para PT
    3.4 - PT ou ES ou DK ou NL + 10 digitos errado para PT
    3.5 - PTS ou ESS ou DKS ou NLS + 5 digitos errado
    3.6 - PTS ou ESS ou DKS ou NLS + 6 digitos errado para estrangeiros
    3.7 - PTS ou ESS ou DKS ou NLS + 7 digitos errado
    3.8 - PTS ou ESS ou DKS ou NLS + 8 digitos errado
    3.9 - PTS ou ESS ou DKS ou NLS + 9 digitos errado
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 11:19

    pode ser errado tudo o que passe os 15 digitos total
    errado para todos os PT que passem os 11 total
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 11:27

    outra coisa piloto
    as 1ª duas letras PT DK ES etc a varias combinações delas não sei todas vai depender do pais de origem por isso se possivel o script deixar estas 2 livres pa por a combinação desejada

    obrigado
    avatar
    Convidado
    Convidado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Convidado 5/11/2012, 11:53

    Se puder pesquise, podemos colocar todas em uma tabela...


    Cumprimentos.
    avatar
    jhp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 48
    Registrado : 29/10/2012

    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  jhp 5/11/2012, 11:58

    ora ok entao
    a tabela de nome
    "paises"
    letras

    PT, BE, DK, FR, DE, EL, IE, IT, LU, NL, ES, UK, AT, FI
    SE, CZ, CY, EE, HU, LV, LT, MT, PL, SI, SK, RO

    estas foi as que encontrei mas poderam aparecer mais é possivel depois acrescentar na tabela certo?

    Conteúdo patrocinado


    [Resolvido]excell para VB Empty Re: [Resolvido]excell para VB

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 2/5/2024, 07:30