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
Riccardo Vincenti
Ultimi post di Riccardo Vincenti (vedi tutti)
- 073. Duplicare righe excel modificando il contenuto - 6 Ottobre 2017
- 072. Estrazione numeri casuali - 6 Ottobre 2017
- 071. Estrazione casuale valori da un elenco - 5 Ottobre 2017
- 070. Contare dati univoci senza Pivot - 21 Settembre 2017
- 069. Aggiungere intervalli ad una data: Date Add in Excel - 21 Settembre 2017