Amigos leitores, sejam bem vindos mais uma vez ao meu blog.
Quantas e quantas vezes perdemos tudo o que estávamos fazendo por conta de uma queda de energia ou bugs no computador. Isso é uma coisa realmente muito chata – pra não dizer algo pior, que, por sinal, é o que certamente exclamamos nestes momentos!!!
Em meus estudos, descobri um código muito interessante para programarmos osalvamento automático real, com uma certa frequência a ser definida por nós mesmos. Diferentemente do autosalvamento do excel, esta macro salva o próprio arquivo de modo real, como se nós mesmos o tivéssemos feito clicando no botão “Salvar”.
O fundamento desta macro é salvar o arquivo a cada X minutos caso o arquivo tenha sofrido modificações e ainda não tenha sido salvo. Esta macro é iniciada ao abrirmos o arquivo, no evento Workbook_Open da pasta de trabalho. Vou mostrar como criá-la.
Abra o Projeto do VBA (Alt+F11) e insira um módulo digitando o seguinte código:
Public RunWhen As Double
Public Const cRunIntervalSeconds = 600 '10 minutos
Public Const cRunWhat = "SalvamentoProgramado" 'nome do procedimento a ser executado
Sub StartTimer()
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
Schedule:=True
End Sub
Sub SalvamentoProgramado()
If Application.ThisWorkbook.Saved = False Then
Application.ThisWorkbook.Save
End If
StartTimer ' Reschedule the procedure
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
Schedule:=False
End Sub
A constante cRunIntervalSeconds define o tempo, em segundos, para o Cronômetro executar.
O procedimento StartTimer inicia o cronômetro da programação do salvamento. Na sub SalvamentoProgramado é verificado se houve alterações no arquivo e se ele está salvo, então, ele salvará as modificações no arquivo. StopTimer encerrará a programação da macro. Poderá ser chamada no menu macros mesmo, ou então criar um atalho para ela.
Agora, abra o código da pasta de trabalho, dando um duplo clique em EstaPasta_de_trabalho e digite o código:
Private Sub Workbook_Open()
Call StartTimer
End Sub
Prontinho. Salve o arquivo. Feche. E abra novamente. A partir de então ele salvará suas alterações no intervalo de tempo estipulado. E adeus aos trabalhos perdidos.
Um abraço.
Você também gostará de ler:




Imprimir


Valeu cara…eu estava precisando de um macro destes e funcionou !!!
Beleza!!!
Muito gratificante isso.
Visite mais vezes.
Abraço
Olá..
dica muito bacana…mas acho que estou fazendo alguma coisa errada.. não está dando certo…
alguém poderia me dar uma força?
Abraços
Que problema está ocorrendo?
Tentei fazer no Excel 2007, e até parece que quer funcionar.
O problema é que aparece a seguinte mensagem em uma janela:
Aviso de privacidade: este documento contém macros, controle ActiveX, informações do pacote de expansao para XML ou componentes da Web. É possÃvel que esses itens contenham informações pessoais que não possam ser removidas pelo Inspetor de Documento.
Fui nas opções das configurações de Macro e ActiveX (Habilitei os recursos) mais a mensagem ainda acontece.
Preciso que a mensagem não apareça.
Minha intenção é gerar uma página web dos dados de forma automática. Mais ele só atualiza a página, se o arquivo for salvo. Assim a pagina fica atualizada sempre.
Agradeço se puder me ajudar !!!!
Bom diaaa !!!
Encontrei uma solução aqui
Private Sub Worksheet_Change(ByVal Target As Range)
ThisWorkbook.Save
End Sub
Colocando na pasta só essa macro já funciona no momento em que a planilha receber qualquer alteração.
Flw
obrigado
Ok.
Abraço
Ola, muito boa essas dicas.
Fiz todos os procedimentos acima de colar no modulo o codigo do primeiro bloco.
mais o segundo bloco não entendi onde colocar o codigo abaixo.
Private Sub Workbook_Open()
Call StartTimer
End Sub
—————-
outra pergunta caro amigo Ederson, esse seu codigo funciona sem os codigos acima, simplesmente colar num modulo e pronto?
Obrigado se puder responder
Primeiro lugar, obrigado.
Quanto ao bloco do código Workbook_Open, ele deve ser colocado no módulo da Pasta de trabalho (o próprio arquivo Excel)… Na lista dos objetos do projeto, onde tem os módulos, formulários, planilhas,… também tem um item chamado EstaPastaDeTrabalho.
Dê dois clique sobre este item e será exibida uma janela de código como a do módulo. Então insira este código ali.
Agora, sobre o coment do Ederson, é uma outra maneira de fazer, porém, gera muita lentidão no sistema, pois a macro será repetida a cada alteração nas células, diferente da macro deste artigo que é realizada a cada 10 minutos.
Espero que tenha ficado explicado.
Abraço
Prezado,
Há a possibilidade de rodar essa macro com o tempo e 60 segundos e em uma planilha compartilhada?
Na planilha compartilhada há a restrição de salvamento.
Apenas o primeiro usuário na fila de acesso terá o privilégio para salvá-la.
Abraço.
Meus parabens
essa macro (não salvando automaticamente mas realizando uma função a cada intervalo) é de extrema importancia e necessidade
Parabens
Otima dica!
Mas veja se oque eu vou explicar é possivel.
Oque eu precisaria era que ele salva-se como um outro arquivo de nome diferente conforme o o dia atual.
por exemplo: Eu crio no dia 1º de novembro de 2010 o arquivo “ExeceldoSeuJeito” e precisária que o Execel desse um “Salvar Como…” e salva-se com o nome “ExeceldoSeuJeito 01-11-2010″ (usei como exemplo o hifem ” – ” porque o windows não aceita a barra ” / ” no nome do arquivo)
Se não for possivel por a data tudo bem, mas tem como fazer “salvar como…” e pré determinar o nome do arquivo? e se possivel pré determinar o nome com o valor de alguma celula?
Att.
@Allston,
Podes substituir a linha de comando “Application.Thisworkbook.Save” por uma chamada da rotina “SalvarCopiaComo“, que vou descrever abaixo, para que seja adicionada ao código.
Sub SalvarCopiaComo()
Dim sExtensao As String
Dim sNomeSalvarComo As String
sExtensao = Mid(ThisWorkbook.FullName, (InStrRev(StringCheck:=ThisWorkbook.FullName, StringMatch:=”.”, Compare:=vbTextCompare)))
sNomeSalvarComo = Left(ThisWorkbook.FullName, (InStrRev(StringCheck:=ThisWorkbook.FullName, StringMatch:=”.”, Compare:=vbTextCompare) – 1)) _
& ” ” & Format(Date, “dd-mm-yyyy”) & sExtensao
ThisWorkbook.SaveCopyAs sNomeSalvarComo
End Sub
Abç
Tenho uma planilha feito no Excel 2007 porém quando à salvo é exibida a seguinte mensagem:
Aviso de privacidade: este documento contém macros, controle ActiveX, informações do pacote de expansao para XML ou componentes da Web. É possÃvel que esses itens contenham informações pessoais que não possam ser removidas pelo Inspetor de Documento.
Como faço para que a mensagem acima não seja exibida?
Li a resposta acima no entanto não compreendi, poderia ser mais detalhista com relação a pasta ao qual devo inserir o código postado? Desde já agradeço pela atenção.
Parabéns pelo site!!!!
Obrigado.
Isso acontece com todos as suas planilhas 2007?
Experimente criar um novo arquivo e copiar suas macros. Veja se continua o problema.
Abç
Deu super certo… ótimo saber que exista pessoas como você que compartilhe essas maravilhas!
parabénssss!