Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
Por Leonardo7
Posts
#47942
Boa noite amigos,

Preciso do apoio de vcs para corrigir o código abaixo, pois quando vou digitar a data no formulário, só consigo digitar um número.
Código: Selecionar todos
Public Function FormataValidaData(ByVal KeyAscii As MSForms.ReturnInteger, TEXTO As String) As String

    Select Case KeyAscii
     Case 8, 48 To 57
    
    If Len(TEXTO) = 10 Then KeyAscii = 0
    
     Dim dia As Integer
    
     If Len(TEXTO) = 2 Then
     dia = TEXTO
     If dia > 31 Then
     MsgBox "Dia inválido!"
     KeyAscii = 0
     TEXTO = ""
     Exit Function
     End If
     End If
    
     Dim MES As String
     MES = TEXTO
    
     If MES <> "" Then
    
    MES = Mid(MES, 4, 2)
     If MES <> "" Then
     If MES > 12 Then
     MsgBox "Mês inválido!"
     KeyAscii = 0
     TEXTO = ""
     Exit Function
     End If
    
    dia = Mid(TEXTO, 1, 2)
    
     If MES = 2 And dia > 29 Then
     MsgBox "Mês e dia inválidos!"
     KeyAscii = 0
     TEXTO = ""
     Exit Function
     End If
    
     End If
     End If
    
     If Len(TEXTO) = 2 Then TEXTO = TEXTO & "/"
    
     If Len(TEXTO) = 5 Then TEXTO = TEXTO & "/"
    
     Case Else
     KeyAscii = 0
     End Select
    
     DATA = TEXTO

End Function
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Jimmy
Avatar
#47944
Olá Leonardo,

Teste a solução anexa. Avise se tiver alguma data válida e que não está entrando, ou uma inválida que está.

Jimmy San Juan
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por Jimmy em 10 Set 2019 às 09:49, em um total de 1 vez.
Por kiko
Posts
#47949
Leonardo7 bom dia, segue em anexo minha contribuição espero que lhe ajude.
Peço-lhe caso minha contribuição venho ajuda-lo de qualquer forma, click na mão como forma de agradecimento.
Fico aguardo.
Por Leonardo7
Posts
#47953
Jimmy escreveu:Olá Leonardo,

Teste a solução anexa. Avise se tiver alguma data válida e que não está entrando, ou uma inválida que está.

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan
Olá Jimmy, obrigado pelo apoio, mas eu só estou conseguindo editar a data se eu aperta a tecla "Num Lock" do meu teclado. As mensagens que informam que o dia ou mês estão errados não aparece.
Avatar do usuário
Por Jimmy
Avatar
#47960
Bom dia Leonardo,
Leonardo7 escreveu:Olá Jimmy, obrigado pelo apoio, mas eu só estou conseguindo editar a data se eu aperta a tecla "Num Lock" do meu teclado.
Tenho algumas perguntas:
Você disse EDITAR. Quis dizer "digitar"?
Não sei se está um notebook, um desktop, etc. Você está usando o teclado numérico (da direita), e gostaria de digitar a data mesmo com o NUMLOCK desativado?
Leonardo7 escreveu:As mensagens que informam que o dia ou mês estão errados não aparece.
A macro que fiz não emite mensagem, mas ela não aceita a digitação de dados errados. Por exemplo, se você digita "31/0", quando for digitar o segundo algarismo do mês, só serão aceitos 1, 3, 5, 7 e 8, pois são os meses que podem ter 31 dias.

Se digitar "29/02/201", só poderá digitar 2 ou 6, porque são os anos bi sextos (2012 e 2016) que podem ter 29 dias em fevereiro.

Quando são teclados números que geram dias, meses ou anos que invalidam a data, essa digitação não é aceita e um sinal sonoro é emitido. Achei que assim era melhor do que apresentar mensagem, que exige um clique para fechar, e que depois apaga todo o conteúdo já digitado, como era a macro original.

Vou colocar uma mensagem dentro do próprio formulário, pra não ter que ficar fechando janela. Até de tarde posto aqui.

Jimmy San Juan
Editado pela última vez por Jimmy em 10 Set 2019 às 09:50, em um total de 1 vez.
Por Leonardo7
Posts
#47964
Segue respostas abaixo:
Jimmy escreveu: Você disse EDITAR. Quis dizer "digitar"?
Quis dizer digitar

Jimmy escreveu:Não sei se está um notebook, um desktop, etc. Você está usando o teclado numérico (da direita), e gostaria de digitar a data mesmo com o NUMLOCK desativado? Acho que isso é possível fazer.
Estou em um notebook usando o teclado numérico (da direita) e mesmo com o meu NUMLOCK ativado, não consigo digitar a data. Tenho que apertar o NUMLOCK para fazer a digitação.

Jimmy escreveu:A macro que fiz não emite mensagem, mas ela não aceita a digitação de dados errados. Por exemplo, se você digita "31/0", quando for digitar o segundo algarismo do mês, só serão aceitos 1, 3, 5, 7 e 8, pois são os meses que podem ter 31 dias.

Se digitar "29/02/201", só poderá digitar 2 ou 6, porque são os anos bi sextos (2012 e 2016) que podem ter 29 dias em fevereiro.

Quando são teclados números que geram dias, meses ou anos que invalidam a data, essa digitação não é aceita e um sinal sonoro é emitido. Achei que assim era melhor do que apresentar mensagem, que exige um clique para fechar, e que depois apaga todo o conteúdo já digitado.
Perfeito!
Avatar do usuário
Por JCabral
Avatar
#47965
Veja se ajuda
Código: Selecionar todos
Private Sub tbData_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    tbData.MaxLength = 10                        '10/10/2014
    Select Case KeyAscii
    Case 8                                       'Aceita o BACK SPACE
    Case 13: SendKeys "{TAB}"                    'Emula o TAB
    Case 48 To 57
        If tbData.SelStart = 2 Then
            If CInt(tbData.Text) > 31 Then
                MsgBox "Dia errado"
                KeyAscii = 0
                tbData = Empty
                Exit Sub
            End If
            tbData.SelText = "/"
        End If
        If tbData.SelStart = 5 Then
            If Mid(tbData.Text, 4, 2) > 12 Then
                MsgBox "Mês inválido!"
                KeyAscii = 0
                tbData = Mid(tbData.Text, 1, 3)
                Exit Sub
            End If
            tbData.SelText = "/"
        End If
        
    Case Else: KeyAscii = 0                      'Ignora os outros caracteres
    End Select


End Sub
Avatar do usuário
Por Jimmy
Avatar
#47966
Leandro,

A versão anterior desta planilha estava com um erro e não aceitava 29/02, independente do ano. Agora aceita.

Ela também está emitindo mensagem quando algo errado é teclado.

O problema do NumLock deve ser algo particular do seu note. Em meu desktop funciona bem em ambos os teclados numéricos.

Tem ainda algo a ser corrigido, que é o fato dele estar aceitando data americana: mm/dd/aaaa.

Leandro, nas mensagens acima que você julgar que ajudaram de alguma forma com a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita. Obrigado.

Jimmy San Juan
Você não está autorizado a ver ou baixar esse anexo.
Por Leonardo7
Posts
#47983
Jimmy escreveu:Leandro,

A versão anterior desta planilha estava com um erro e não aceitava 29/02, independente do ano. Agora aceita.

Ela também está emitindo mensagem quando algo errado é teclado.

O problema do NumLock deve ser algo particular do seu note. Em meu desktop funciona bem em ambos os teclados numéricos.

Tem ainda algo a ser corrigido, que é o fato dele estar aceitando data americana: mm/dd/aaaa.

Leandro, nas mensagens acima que você julgar que ajudaram de alguma forma com a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita. Obrigado.

Jimmy San Juan

Muito obrigado, funcionou. Tenho que ver agora o motivo do conflito com o meu teclado.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord