046. Salvataggio periodico file

Download PDF

Domanda:

E’ possibile tramite una macro creare ad intervalli temporali definiti una copia del file su cui stò lavorando e salvarla sul computer?

Risposta:

Questa esigenza era stata risolta da Andrea nell’articolo che trovate al link:
http://terzaghi.blogspot.it/2008/02/salvataggio-automatico-di-un-foglio-di.html

Ho ripreso il suo codice apportando alcune modifiche in quanto era stato creato nel 2008
quando la versione più diffusa di Excel era quella del 2003.

Veniamo al codice:
Premendo sul bottone “INIZIO” la routine “Accedi”, imposta a True (Vero) la variabile “Attivo”
e poi lancia ma routine “SavePeriodic” che opera dopo avere verificato che il valore della variabile “Attivo” sia TRUE
(If Attivo Then  >>> TRUE è il valore di default)

Viene assegnato in una variabile il percorso del file exel attivo:

 PercorsoOrigine = ActiveWorkbook.Path

ed ad un’altra il suo nome

 NomeFileOrigine = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1)

Per evitare di inserire nel nome l’estensione del file (.xls o .xlsx),
con la funzione InStrRev cerco la posizione del carattere “.” nel nome del file che comprende l’estensione e la utilizzo per prendere estrarre la parte sinistra del nome del file per un numero di caratteri pari al risultato della funzione InStrRev, -1

Il nome della copia del file, conterrà il nome del file originale più data ed orario del salvataggio:

 NomeFileDestinazione = NomeFileOrigine & " (" & Format(O.Cells(10, 7).Value, "dd-mm-yy h.mm.ss") & ")"

dove O.Cells(10, 7) è l’orario che la macro assegna e scrive nella cella G10 del foglio “Salvataggio Automatico”

Il percorso dove sarà salvato il file è definito dall’istruzione:

 PercorsoDestinazione = PercorsoOrigine & "\"

Nel file d’esempio è lo stesso del file orignale, e volete potete modificarlo a vostro piacimento, ad esempio come:

PercorsoDestinazione =”C:\Mia Cartella\”

Veniamo alla modifica da me apportata.
Nella macro orignale tutti i file venivano salvati con estensione “.xls”,
col il seguente codice invece, individuo la versione del file excel attivo che deve essere salvato,
la assegno come valore della variabile “FileExtStr” che utilizzo nella macro che salva il file:

Set Destwb = ActiveWorkbook

With Destwb

If Val(Application.Version) < 12 Then

'se il file è in versione Excel 97-2003

FileExtStr = ".xls": FileFormatNum = -4143

Else

'se il file è in versione 2007-2013

Select Case Sourcewb.FileFormat

Case 51: FileExtStr = ".xlsx": FileFormatNum = 51

Case 52:

If .HasVBProject Then

FileExtStr = ".xlsm": FileFormatNum = 52

Else

FileExtStr = ".xlsx": FileFormatNum = 51

End If

Case 56: FileExtStr = ".xls": FileFormatNum = 56

Case Else: FileExtStr = ".xlsb": FileFormatNum = 50

End Select

End If

End With
With Destwb

.SaveAs PercorsoDestinazione & NomeFileDestinazione & FileExtStr, FileFormat:=FileFormatNum

.Close SaveChanges:=True

End With

Utilizzo il codice “Application.DisplayAlerts = False” per inabilitare eventuali finestre che richiedono un check di compatibilità delle versioni.

Eseguito il salvataggio riabilito l’apertura delle finestre di dialogo (Application.DisplayAlerts = True)

Questa istruzioni vengo ripetute ad intervalli definiti dal valore della cella “G5” del foglio “Salvataggio Automatico” (O.Cells(5, 7).Value) attraverso le seguenti instruzioni:

DoEvents

Minuti = O.Cells(5, 7).Value
tempo = "00:" + Format(Minuti, "0#") + ":00"
dTime = Now + TimeValue(tempo) 'Add another second to dTime
O.Cells(10, 7).Value = Now + TimeValue(tempo)
Application.OnTime dTime, "SavePeriodic" 'Call SavePeriodic procedure again

La ripetizione della macro viene bloccata prendendo il tasto “Fine” del foglio “Salvataggio Automatico”

A voi il file:
APRI

Riccardo Vincenti

The following two tabs change content below.