Notifications
Clear all

Salvar data e h:mm:ss da última vez salvo

6 Posts
2 Usuários
0 Reactions
1,108 Visualizações
(@lallo)
Posts: 7
Active Member
Topic starter
 

Saudações colegas!

De VBA eu sei quase nada. Pelo que pesquisei, parece me que para fazer o que eu gostaria, eu teria que usar uma macro. Tentei várias que encontrei na Internet mas nenhuma funcionou perfeitamente.

Na planilha que você pode baixar eu apenas precisaria que na célula G2, toda vez que houvesse uma edição na planilha e fosse salva. Que G2 registrasse a data, hora, minutos e segundos, para saber qual é a mais atualizada.

Um dos códigos que parecia que iria resolver foi esse:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Base.Clientes").Range("G2") = Now
End Sub

Depois eu formatei a célula com: "Date" m/d/aa "Time" h:mm:ss

Mas acorrem dois problemas:

1. Depois que eu salvo como arquivo *.xlsm, a data, hora, min e segundos vão mudando conforme vou salvando, mas depois que eu fecho a planilha e reabro, não funciona mais. Fica apenas mostrando o registro de quando salvei a última vez antes de ter fechado a planilha.

2. Um outro problema é que se eu proteger as quatro primeiras linhas bloqueando para edição como eu tencionaria, o VBA mostra um aviso de problema.

Agradeço se derem uma força pra mim, de VBA sou fraquinho e aceito sugestões.

 
Postado : 05/12/2015 11:32 pm
(@lallo)
Posts: 7
Active Member
Topic starter
 

:? Não consegui descobrir uma solução ainda.

 
Postado : 06/12/2015 7:33 pm
(@edsonbr)
Posts: 0
New Member
 

Mas acorrem dois problemas:

1. ...mas depois que eu fecho a planilha e reabro, não funciona mais. Fica apenas mostrando o registro de quando salvei a última vez antes de ter fechado a planilha.

Estranho, pois reproduzi o procedimento aqui e funcionou perfeitamente. O procedimento de evento que vc usou está adequado e atenderia ao que vc deseja. Será que vc depois que fechou a pasta, ao abrir novamente não esqueceu de permitir ao Excel habilitar as macros? Ou talvez vc tenha sem querer aberto a versão velha, xlsx e não a xlsm?

2. Um outro problema é que se eu proteger as quatro primeiras linhas bloqueando para edição como eu tencionaria, o VBA mostra um aviso de problema.

Uma forma de resolver isso seria adicionar essas linhas à sua Sub:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    With Sheets("Base.Clientes")
       .Unprotect 'Password:="SuaSenha"
       .Range("G2").Value = Now
       .Protect 'Password:="SuaSenha"
    End With
End Sub

Se vc usar senha na proteção da planilha, remova o comentário (aspa simples) e faça-a coincidir dentro do código.

 
Postado : 06/12/2015 9:09 pm
(@lallo)
Posts: 7
Active Member
Topic starter
 

EdsonBR,

Obrigado pelo retorno. Eu me certifiquei que abri o arquivo xslm depois que o salvei com tal. As macros estão habilitadas para o Excel. Quando eu fiz o procedimento novamente os dois problemas relatados voltaram a ocorrer.

Meu conhecimento em VBA é limitado, pode ser que eu não inseri os códigos no lugar certo. Quando eu fecho o arquivo xslm como relatei a planilha para de atualizar a data e tempo. Quando eu bloqueio para edição com "senha" as três primeiras linhas aparece o mesmo aviso. Então fechei e abri o arquivo xslm novamene para ver o que acontecia. Continua sem atualizar, as três primeiras linhas estão bloqueadas para edição, mas nessa segunda vez o aviso de problema não apareceu.

Como eu sou principiante em VBA, você poderia descrever o procedimento passo a passo? Eu não entendi como eu faria para coincidir dentro do código. Eu criei um novo objeto e copiei as linhas abaixo. Apenas apaguei onde havia depois de =, "SuaSenha" nas duas linhas onde aparecem.

2. Um outro problema é que se eu proteger as quatro primeiras linhas bloqueando para edição como eu tencionaria, o VBA mostra um aviso de problema.

Uma forma de resolver isso seria adicionar essas linhas à sua Sub:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    With Sheets("Base.Clientes")
       .Unprotect 'Password:="SuaSenha"
       .Range("G2").Value = Now
       .Protect 'Password:="SuaSenha"
    End With
End Sub

Se vc usar senha na proteção da planilha, remova o comentário (aspa simples) e faça-a coincidir dentro do código.

 
Postado : 06/12/2015 10:52 pm
(@edsonbr)
Posts: 0
New Member
 

Lallo,

Quanto ao local, o código deve estar sob "ThisWorkbook" ou sob "EstaPasta_de_trabalho", a que aparece um símbolo X do Excel (clique duas vezes para aparecer a janela onde vc irá colar o código). Não pode estar dentro de um módulo normal, pois são procedimentos que respondem a eventos.

As células estão protegidas com a senha "123" a qual vc deve alterar lá no código, se desejar. Altere ela dentro do código, e não pela interface do Excel.

Anexo o seu exemplo com o código embutido. Aqui está funcionando normalmente, mesmo fechando e reabrindo ou mesmo saindo do Excel.
Obs.: uso o Excel 2013

 
Postado : 07/12/2015 9:24 am
(@lallo)
Posts: 7
Active Member
Topic starter
 

:D Eu refiz o procedimento no seu arquivo que você devolveu. Depois fiz no meu arquivo que está aqui, mudei a cor da na formatação para mostrar que eu reproduzi, para mostrar que aprendi. Ficou perfeito.

Gostei do resultado, vai ser útil no meu trabalho. Obrigado.

A propósito, por onde você recomendaria eu começar a estudar o básico de macros além do que aparece de sub-básico que tem na Internet? Algum sítio que tenha o introdutório? Eu aprendi alguma coisa nas páginas do Júlio Batistti e fazendo os cursos básico, intemerdiário e avançado da Escola Virtual da Fundação BRADESCO e tudo na faixa. Eu recomendo o curso do Excel da EV para os que estão começando, junto com as páginas do Júlio Batistti e sendo interessado, dá para fazer muita coisa.

Ademais depois do Excel 2007, ficou mais fácil trabalhar com a formatação condicional e validação de dados. Eu uso muito SE, E encadeadas e PROCV.

 
Postado : 07/12/2015 11:54 am