Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Formatar [hora:minuto:segundo] ao digitar.[RESOLVIDO]

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Avatar do usuário
costaribeiro
Colaborador
Colaborador
Mensagens: 96
Registrado em: Ter Mar 04, 2014 10:10 am
Localização: Pouso Alegre - MG

Formatar [hora:minuto:segundo] ao digitar.[RESOLVIDO]

Mensagem por costaribeiro »

;) Olá pessoal,

Sempre estou tentando ajudar alguém com relação ao Excel, mas meus conhecimentos ainda são parcos. Uma amiga tem uma planilha de banco de horas de uma turma do plantão de um hospital. Ela me perguntou se tem como digitar os valores de [hora:minuto:segundo] e os caracteres intercessores ":" apareçam automaticamente a cada dois dígitos colocados (segundo ela, isso agiliza o trabalho) nas CÉLULAS. Pesquisei um VBA que pudesse ajudar, mas não consegui nada. Anexo a planilha dela.

EXEMPLO:

Ao digitar: 034506 → autoformata para: 03:45:06

Não sei se fui claro.

:mrgreen: Quem puder dar uma força, será legal!
Anexos
Planilha B. Horas Berenice.rar
Arquivo com proteção SEM SENHA.
(10.36 KiB) Baixado 318 vezes
Editado pela última vez por costaribeiro em Seg Dez 22, 2014 10:54 am, em um total de 2 vezes.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


afbergman
Colaborador
Colaborador
Mensagens: 38
Registrado em: Sex Set 26, 2014 12:08 pm

Re: Formatar [hora:minuto:segundo] ao digitar.

Mensagem por afbergman »

Olá costaribeiro,

segue o codigo abaixo que eu utilizo:

Código: Selecionar todos

Private Sub TxtHrChegada_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Limita a Qde de caracteres
    TxtHrChegada.MaxLength = 5
    
    Select Case KeyAscii
            Case 8, 48 To 57 ' BackSpace e numericos
              If Len(TxtHrChegada) = 2 Or Len(TxtHrChegada) = 6 Then
                TxtHrChegada.Text = TxtHrChegada.Text & ":"
                SendKeys "{End}", False
              End If
            Case Else ' o resto é travado
                KeyAscii = 0
          End Select
    
End Sub
Troque "TxtHrChegada" para o nome da sua textbox correspondente.

Qualquer duvida estamos ai.
abraços.


Avatar do usuário
costaribeiro
Colaborador
Colaborador
Mensagens: 96
Registrado em: Ter Mar 04, 2014 10:10 am
Localização: Pouso Alegre - MG

Re: Formatar [hora:minuto:segundo] ao digitar.

Mensagem por costaribeiro »

Amigão, obrigado.
Ótima resposta. Mas no caso, não é uma textbox e sim células.
Tem como?


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Formatar [hora:minuto:segundo] ao digitar.

Mensagem por Reinaldo »

Veja se atende
Anexos
Planilha B. Horas Berenice.xlsm.zip
(19.08 KiB) Baixado 343 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
costaribeiro
Colaborador
Colaborador
Mensagens: 96
Registrado em: Ter Mar 04, 2014 10:10 am
Localização: Pouso Alegre - MG

Re: Formatar [hora:minuto:segundo] ao digitar.

Mensagem por costaribeiro »

:P RMarco,

Fechou! Muito bom! Vai ajudar muita gente.

Vou colocar aqui seu código para o pessoal do forum:

Código: Selecionar todos

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    'Função para entrar Horas sem digitar os ":"
    'Por: José Luiz Martins
    Dim TimeStr As String
    
    On Error GoTo EndMacro
    If Application.Intersect(Target, Range("C5:C25,D5:D25,E5:E25,H5:H25,I5:i25")) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    If IsNull(Target.Value) Then Exit Sub
    
    Application.EnableEvents = False
    With Target
        If .HasFormula = False Then
            Select Case Len(.Formula)
                Case 1 To 2 ' ex: 12 = 12:00:00
                    TimeStr = "00:00" & ":" & .Formula
                Case 3 ' ex:, 735 = 00:07:35
                    TimeStr = "00:0" & Left(.Formula, 1) & ":" & Right(.Formula, 2)
                Case 4 ' ex:, 1234 = 12:34
                    TimeStr = "00:" & Left(.Formula, 2) & ":" & Right(.Formula, 2)
                Case 5 ' ex:, 12345 = 1:23:45 e não 12:03:45
                    TimeStr = Left(.Formula, 1) & ":" & _
                        Mid(.Formula, 2, 2) & ":" & Right(.Formula, 2)
                Case 6 ' ex:, 123456 = 12:34:56
                    TimeStr = Left(.Formula, 2) & ":" & _
                        Mid(.Formula, 3, 2) & ":" & Right(.Formula, 2)
                Case Else
                    Err.Raise 0
            End Select
            .Formula = Format(TimeValue(TimeStr), "hh:mm:ss")
        End If
    End With
    Application.EnableEvents = True
    Exit Sub
EndMacro:
    MsgBox "Você não entrou com uma Hora válida."
    Range(Target.Address).Select
    Selection.ClearContents
    Application.EnableEvents = True
End Sub

Valeu!


Avatar do usuário
costaribeiro
Colaborador
Colaborador
Mensagens: 96
Registrado em: Ter Mar 04, 2014 10:10 am
Localização: Pouso Alegre - MG

Re: Formatar [hora:minuto:segundo] ao digitar.[RESOLVIDO]

Mensagem por costaribeiro »

Um detalhe importante aqui...

Somente com "hh:mm" como devo proceder no código?

Obrigado.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder