Sicurezza contro curruzione file excel



  • Sicurezza contro curruzione file excel
    di Emmepi (utente non iscritto) data: 20/10/2016 13:08:38

    Ecco il mio problema.
    Ho un database che aggiorno quasi quotidianamente. Un database con diversi fogli e tabelle con poche formule ma molte colonne formattate graficamente.

    Oggi è la quarta volta (in qualche anno) che mi si corrompe il file. Ho dovuto sempre recuperare un file salvato precedentemente ma sempre vecchio di qualche settimana (se non mesi) dovendo poi ricostruire tutte le voci mancanti con un lavoro davvero faticoso... L'ultima volta ho avuto fortuna recuperando una copia vecchia di solo un paio di settimane usando un sw di recupero dati sull'HD...

    Tralasciando il recupero del file corrotto (non ci si riesce mai...) oggi posso usare una copia vecchia di una sola settimana, anche se in questa settimana ci avevo messo pesanti cambiamenti che dovrò rifare.
    Quello che vorrei sapere è se possa esistere la possibilità di avere in automatico una copia sempre aggiornata del file senza dover salvare manualmente lo stesso in 2 cartelle differenti.
    Non prendo in considerazione OneDrive o simili. Usavo OneDrive e spesso non avevo le copie sincronizzate, col risultato che mettevo mani alla penultima copia e mi creava casini... Forse perchè il database excel lo modificavo da casa e dall'ufficio... comunque il sincro non c'era quasi mai.

    Esiste una qualche utility che mi faccia salvare il automatico il file in 2 cartelle differenti?
    o in alternativa una utility che crei il backup automatico del file non appena questo venga salvato?

    Vorrei evitare in futuro per l'ennensima volta di ritrovarmi il file corrotto!



  • di alfrimpa data: 20/10/2016 13:44:15

    Ciao emmepi

    Non hai bisogno di nessuna utility.

    La macro che vedi sotto, da inserire nel modulo di ThisWorkbook, al momento della chiusura del file te ne salva una copia con lo stesso nome in altra directory che devi specificare nel punto indicato.

    Prova e fai sapere.

    Alfredo 
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim myPath As String
    Dim nomefile As String
        myPath = "c:TuoPercorso" ' Modifica con la directory dove vuoi salvare il file
        nomefile = ActiveWorkbook.Name
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=myPath & nomefile & ".xlsm", FileFormat:= _
            xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
        Application.DisplayAlerts = True
    End Sub






  • di emmepi (utente non iscritto) data: 20/10/2016 13:50:07

    Stasera la provo.
    Volendo si potrebbe salvare anche in 2 altre cartelle?




  • di alfrimpa data: 20/10/2016 13:56:16

    Cit. "Volendo si potrebbe salvare anche in 2 altre cartelle?"

    Prova con la macro qui sotto che ho messo in Workbook_BeforeSave (io ho provato e funziona).

    In questo modo ritengo che tu possa essere abbastanza garantito.

    Io non so quali possano essere i motivi per i quali un file si corrompe; se la corruzione avviene quando il file è in uso e questo viene salvato penso che questo rimanga corrotto (non ho mai avuto esperienze in questo senso).

    Tieni presente che la macro salva e sostituisce il vecchio file con lo stesso nome.

    Prova e fai sapere.

    Alfredo     
     
    Private Sub Workbook_BeforeSave(Cancel As Boolean)
    Dim i As Integer
    Dim myPath1 As String
    Dim myPath2 As String
    Dim myPath3 As String
    Dim nomefile As String
    On Error Resume Next
        myPath1 = "c:TuoPercorso" ' Modifica con la directory dove vuoi salvare il file
        myPath2 = "c:TuoPercorso" ' Modifica con la directory dove vuoi salvare il file
        myPath3 = "c:TuoPercorso" ' Modifica con la directory dove vuoi salvare il file
        nomefile = ActiveWorkbook.Name
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=myPath1 & nomefile & ".xlsm", FileFormat:= _
            xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
        ActiveWorkbook.SaveAs Filename:=myPath2 & nomefile & ".xlsm", FileFormat:= _
            xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
        ActiveWorkbook.SaveAs Filename:=myPath3 & nomefile & ".xlsm", FileFormat:= _
            xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
        Application.DisplayAlerts = True
    End Sub
    






  • di emmepi (utente non iscritto) data: 20/10/2016 14:34:49

    Grazie di nuovo, la proverò.

    Il problema credo derivi dal fatto che il file è su un hd esterno usb.
    Spesso non si riesce a fare la rimozione sicura, rimane sempre "in uso" anche se con le utility mi da NO-LOCK.
    Quindi a volte lo stacco in questi casi (non potendo spegnere il PC) ma aspetto che comunque non ci sia attività sul disco, passando anche ore prima che si verifichi. Forse è questo che causa la corruzione di file excel...




  • di alfrimpa data: 20/10/2016 14:36:54

    Non ho HD esterni/usb per cui non saprei risponderti.

    Alfredo





  • di emmepi (utente non iscritto) data: 21/10/2016 15:11:56


    Innanzitutto grazie dell'aiuto.

    La prima routine funziona, la seconda con il doppio (triplo) salvataggio del file, da un errore di compilazione:

    "La dichiarazione della routine non corrisponde alla descrizione dell'evento o della routine con lo stesso nome"

    Inoltre c'è una cosa molto strana, provando con la prima routine, va tutto bene, crea una copia del file, però il file risultante è quasi un terzo del "peso" dell'originale.
    Il database originale attuale è di 17,6 MB e la copia che esce è di 6,25 MB

    L'ho aperto ed esaminato e sembra comunque esserci tutto!!!

    Altra cosa che vorrei sapere è come mai nel file che viene copiato hai scelto di aggiungere l'estenzione .xlms? Forse per l'eventualità che lo si voglia salvare nella stessa cartella dell'originale? In modo da reare una copia di backup e non salvarlo su se stesso?

    Poi per finire "abuso" della tua pazienza e professionalità...
    Si potrebbe nella routine scegliere se salvare o no la copia di backup in uscita dal database?
    Dico questo perchè potrebbe capitare che delle modifiche fatte io non voglia salvarle e per questo esco senza salvare il file, però la routine salva la copia lo stesso...

    Scusami se approfitto troppo... tempo addietro i misi a studiare un pò il visual basic per le routine excel, ma poi ho lasciato perdere...

    PS: grazie davvero di cuore.



  • di alfrimpa data: 21/10/2016 16:16:49

    Ora sono in partenza ti rispondo lunedì.

    Per quanto riguarda l'errore dovrei provare

    L'estensione .xlsm si riferisce a file con macro e .xlsx a quelli senza.

    Per quanto riguarda la dimensione del file non saprei

    A lunedì

    Alfredo