Succede che dopo aver fatto un ordinamento poco attento, un copia & incolla selvaggio, ecc. ecc., ci accorgiamo che i nostri dati non sono più coerenti.
A questo punto se non abbiamo salvato è male di poco, chiudiamo e siamo salvi, ma se nel frattempo abbiamo effettuato un salvataggio, mettiamo mano al calendario( per non dimenticarsi qualche Santo, vedi mai si offende).
Per evitare di scomodare i beati, ho realizzato un modello .xlt da utilizzare come base di partenza, per i nostri file .xls.
La particolarità di questo modello è che ad ogni avvio previo nostra approvazione crea una copia di sicurezza del nostro file.
Non servono molte spiegazioni per il codice, in quanto è ampiamente commentato.
Ho pensato di fare due versioni:
La prima al momento del salvataggio aggiunge la stringa “Bk_” al nome del file
La seconda invece aggiunge la stringa composta da data & ora sempre al nome del file.
Aggiunge BK
Option Explicit
Private Sub Workbook_Open()
' Dichiariamo eplicitamente le variabili
Dim ST_NomeAttuale As String 'nome del file attuale
Dim ST_NomeBK As String 'nome del file di bk
Dim ST_File As String 'nome del file cmd
Dim ST_Lancia As String 'variabile di servizio
Dim ST_Message As String ' Imposta il messaggio.
Dim ST_Titolo As String ' Imposta il titolo
Dim ST_Predefinito As String ' Valore predefinito
Dim ST_Scelta As String ' Valore Scelto
' Facciamo aprire la finestra che ci chiede se vogliamo far aeffettuare il salvataggio di BK
ST_Message = "Questo finestra serve a decidere se si vuole fare una copia di bk del file" ' Imposta il messaggio.
ST_Titolo = " Lasciare SI se si vuole fare la copia " ' Imposta il titolo.
ST_Predefinito = "SI"
ST_Scelta = InputBox(ST_Message, ST_Titolo, ST_Predefinito)
' A questo punto sappiamo se l’utente effettuare il salvataggio se si proseguiamo altrimenti usciamo.
If ST_Scelta = "SI" Then
ST_NomeAttuale = ActiveWorkbook.Name ' assegno alla variabile il nome del file attuale
ST_NomeBK = "Bk_" & ActiveWorkbook.Name ' assegno alla variabile il nome del file di bk
ST_File = ActiveWorkbook.Path & "\CopiaFile.cmd" ' assegno alla variabile il nome completo del file di comandi
' Creiamo il file di comandi
Open ST_File For Output As #1 ' Apre il file.
Print #1, "copy " & ActiveWorkbook.Path & "\" & ST_NomeAttuale & " " & ActiveWorkbook.Path & "\" & ST_NomeBK
Print #1, "pause" 'da inserire se non volete la chiusura automatica del file cmd
Close #1 ' chiudo il file cmd
ST_Lancia = Shell(ST_File, 1) ' lancia il file dei comendi
MsgBox "Il File " & ST_NomeAttuale & " è stato copiato " & ST_NomeBK
' avvisiamo che la copia è andata a buon fine
Kill ST_File ' elimino il file di comandi
End If
End Sub
Aggiunge Data & Ora
Option Explicit
Private Sub Workbook_Open()
' Dichiariamo eplicitamente le variabili
Dim ST_NomeAttuale As String 'nome del file attuale
Dim ST_NomeBK As String 'nome del file di bk
Dim ST_File As String 'nome del file cmd
Dim ST_Lancia As String 'variabile di servizio
Dim ST_Message As String ' Imposta il messaggio.
Dim ST_Titolo As String ' Imposta il titolo
Dim ST_Predefinito As String ' Valore predefinito
Dim ST_Scelta As String ' Valore Scelto
Dim ST_DataOra As String ' Valore Scelto
' Facciamo aprire la finestra che ci chiede se vogliamo far aeffettuare il salvataggio di BK
ST_Message = "Questo finestra serve a decidere se si vuole fare una copia di bk del file" ' Imposta il messaggio.
ST_Titolo = " Lasciare SI se si vuole fare la copia " ' Imposta il titolo.
ST_Predefinito = "SI"
ST_Scelta = InputBox(ST_Message, ST_Titolo, ST_Predefinito)
ST_DataOra = Date & "_" & Time & "_"
ST_DataOra = Replace(ST_DataOra, "/", "_") ' trasformo tutti i caratteri "/" in "_"
ST_DataOra = Replace(ST_DataOra, ".", "_") ' trasformo tutti i caratteri "/" in "_"
ST_DataOra = Replace(ST_DataOra, " ", "_") ' trasformo tutti gli spazi in "_"
' A questo punto sappiamo se l’utente effettuare il salvataggio se si proseguiamo altrimenti usciamo.
If ST_Scelta = "SI" Then
ST_NomeAttuale = ActiveWorkbook.Name ' assegno alla variabile il nome del file attuale
ST_NomeBK = ST_DataOra & ActiveWorkbook.Name ' assegno alla variabile il nome del file di bk
ST_File = ActiveWorkbook.Path & "\CopiaFile.cmd" ' assegno alla variabile il nome completo del file di comandi
' Creiamo il file di comandi
Open ST_File For Output As #1 ' Apre il file.
Print #1, "copy " & ActiveWorkbook.Path & "\" & ST_NomeAttuale & " " & ActiveWorkbook.Path & "\" & ST_NomeBK
Print #1, "pause" 'da inserire se non volete la chiusura automatica del file cmd
Close #1 ' chiudo il file cmd
ST_Lancia = Shell(ST_File, 1) ' lancia il file dei comendi
MsgBox "Il File " & ST_NomeAttuale & " è stato copiato " & ST_NomeBK
' avvisiamo che la copia è andata a buon fine
Kill ST_File ' elimino il file di comandi
End If
End Sub
http://www.rifici.it\public\AutosalvataggioIniziale.zip
?>