Página 1 de 1

Excel VBA - Formatação de data

Enviado: 09 Set 2019 às 22:54
por Leonardo7
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

Re: Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 01:36
por Jimmy
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

Re: Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 07:28
por kiko
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.

Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 07:30
por kiko
Esqueci o anexo, vai agora

Re: Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 08:23
por Leonardo7
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.

Re: Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 08:34
por Leonardo7
kiko escreveu:Esqueci o anexo, vai agora
Olá Kiko, obrigado pelo apoio, mas a macro não está colocando as "/" ao digitar a data.

Re: Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 09:04
por Jimmy
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

Re: Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 09:24
por Leonardo7
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!

Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 09:25
por JCabral
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

Re: Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 09:33
por Jimmy
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

Re: Excel VBA - Formatação de data

Enviado: 10 Set 2019 às 11:25
por Leonardo7
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.