Path per il backup

di il
14 risposte

Path per il backup

Buonasera, volevo sapere ho inserito questo blocco di codice:

"nomecopia = ThisWorkbook.Path & "\" & ThisWorkbook.Name & "_Backup_" & “.xlsm”

ThisWorkbook.SaveCopyAs nomecopia"

nel percorso del path mi crea correttamente il Backup, però io adesso vorrei che il Backup lo salvasse nella cartella che ho chiamto appunto Backup.

Come posso modificare il path ?

Grazie a chi mi riponderà

Il codice l'ho scritto così perchè nel menù a tendina non c'è VBA

14 Risposte

  • Re: Path per il backup

    Ciao,

    fai in questo modo che è abbastanza consono:

    Dim strFullPahBackup As String
    strFullPahBackup = ThisWorkbook.Path & "\Backup\" & "Backup_" & ThisWorkbook.Name
  • Re: Path per il backup

    Grazie per la risposta, ma la copia nella certella Backup non la fa.

  • Re: Path per il backup

    17/05/2023 - freddy60 ha scritto:


    Grazie per la risposta, ma la copia nella certella Backup non la fa.

     hai già il codice della copia, aggiungilo ;)))

    poi ci vorrebbe anche una gestione errori e di verifica esito delle operazioni eseguite….

    Esempio: 

    Sub MyBackup()
    On Error GoTo ErrorH
    ' save workbook
    ActiveWorkbook.Save
    
    ' retrieve full path and backup file name
    Dim strFullPathBackup As String
    strFullPathBackup = ThisWorkbook.Path & "\Backup\" & "Backup_" & ThisWorkbook.Name
    
    ' if not exist crate backup folder
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(Left(strFullPathBackup, InStrRev(strFullPathBackup, "\"))) Then _
           fso.CreateFolder (Left(strFullPathBackup, InStrRev(strFullPathBackup, "\")))
    
    ' create backup file
    ThisWorkbook.SaveCopyAs strFullPathBackup 
    
    ' check backup
    If fso.FileExists(strFullPathBackup) Then
        MsgBox "Backup completed..." & vbCrLf & strFullPathBackup, vbInformation, "Info"
    Else
        MsgBox "Backup file not created !!!", vbCritical, "Error"
    End If
    ' close
    Set fso = Nothing
    Exit Sub
    
    ErrorH:
    ' if error
    If Err.Number <> 0 Then
    	MsgBox Err.Number & ": " & Err.Description, vbCritical, "Error"
       	Err.Clear
    End If
    End Sub
  • Re: Path per il backup

    Ricopialo adesso che ho fatto una piccola modifica…

    Questo esempio consente di:

    • retrieve nome Cartella e nome File per il backup
    • creare la cartella di Backup se non esiste
      • verifica se operazione non è andata a buon fine
    • creare il Backup 
      • verifica se il Backup non è andato a buon fine
    • messaggio di completamento del Backup
      • info del Backup eseguito


    Controlla , verifica e ricontrolla prima dell'uso. ;)

  • Re: Path per il backup

    17/05/2023 - freddy60 ha scritto:


    però io adesso vorrei che il Backup lo salvasse nella cartella che ho chiamto appunto Backup.

    Ma questa cartella Backup dove l'hai creata?  

    Per rimanere nell'ambito della tua richiesta, inserendo la cartella nel path dovrebbe funzionare, a patto che sia inserita nel punto giusto, cosa che potresti controllare facilmente da solo. Comunque dovrebbe essere

    nomecopia = ThisWorkbook.Path & "\Backup\" & ThisWorkbook.Name & "_Backup_" & “.xlsm”

    P.S. per inserire il codice nel forum devi usare il pulsante apposito <>

  • Re: Path per il backup

    17/05/2023 - oregon ha scritto:


    17/05/2023 - freddy60 ha scritto:


    però io adesso vorrei che il Backup lo salvasse nella cartella che ho chiamto appunto Backup.

    Ma questa cartella Backup dove l'hai creata?  

    Per rimanere nell'ambito della tua richiesta, inserendo la cartella nel path dovrebbe funzionare, a patto che sia inserita nel punto giusto, cosa che potresti controllare facilmente da solo.

    P.S. per inserire il codice nel forum devi usare il pulsante apposito <>

    Ciao oregon ,

    per come ha posto il quesito io ho inteso che voglia creare una cartella denominata Backup nella cartella corrente del file excel e denominare il file excel di backup aggiungendo il suffisso "Backup_"

    Ho provato ha dare una traccia di come approcciare la questione… perchè almeno un minimo di riscontri per eventuali errori va sempre gestita. 
    Però vedo spesso delle richieste dove molti mettono lì un istruzione e come va, vada… senza preoccuparsi di gestire eventi imprevisti che possono sempre verificarsi nell'esecuzione del codice.
    Che dire …..

  • Re: Path per il backup

     Purtroppo hai ragione ma io mi limito alle richieste, non scrivo il codice al posto di chi fa la richiesta. 

    Per il resto studieranno da soli cosa aggiungere nel codice, altrimenti finiamo col fornire “pappa pronta” (cosa che alcuni sono abituati ad ottenere per avere  frequentato altri forum)

  • Re: Path per il backup

    18/05/2023 - oregon ha scritto:


     Purtroppo hai ragione ma io mi limito alle richieste, non scrivo il codice al posto di chi fa la richiesta. 

    Per il resto studieranno da soli cosa aggiungere nel codice, altrimenti finiamo col fornire “pappa pronta”

    Hai perfettamente ragione e condivido…. 

    ho questo bruttissimo vizio …. e quando vedo approssimazioni e carenze, le dita scappano e pigiano sulla tastiera preparando la “pappa” … è più forte di me. 
    Poi quanto gli raccomandi che il copia/incolla non basta perchè è necessario studiare ed approfondire gli argomenti, in cuor mio mi auguro che lo facciano, ma sono sicuro che al 99,99% non lo faranno mai. :( 

    Ecco perchè dico che hai perfettamente ragione.
    Mi devo togliere sto' maledetto vizio!!!  ;))
    Grazie!

  • Re: Path per il backup

    Poi è anche una questione di “esperienza sul campo"…

    Sono anni che do suggerimenti a @freddy60 in tanti forum ma ancora pone quesiti banali di questo tipo. Quindi è evidente che non utilizza molto del suo tempo per studiare la materia nè gli interessa farlo. Legittimo ci mancherebbe ma quindi perchè andare oltre anche solo di un pizzico?

  • Re: Path per il backup

    18/05/2023 - oregon ha scritto:


    Poi è anche una questione di “esperienza sul campo"…

    Sono anni che do suggerimenti a @freddy60 in tanti forum ma ancora pone quesiti banali di questo tipo. Quindi è evidente che non utilizza molto del suo tempo per studiare la materia nè gli interessa farlo. Legittimo ci mancherebbe ma quindi perchè andare oltre anche solo di un pizzico?

    Sante parole, è proprio come dici…

  • Re: Path per il backup

    Buonasera, allora ho creato un modulo con qusto codice:

    Sub SalvaUnaCopia()
    nomecopia = ThisWorkbook.Path & "\" & ThisWorkbook.Name & "_Backup_" & ".xlsm"
    End Sub

    In Private Sub Workbook_BeforeClose(Cancel As Boolean), ho scritto quest'altro codice quando chiudo il programma:

    Dim risposta As String
    risposta = MsgBox("Queta copia esitste già, vuoi sostituirla?", vbYesNo, "AVVISO")
    If risposta = vbYes Then
    ThisWorkbook.SaveCopyAs nomecopia
     Else
      End If
    Call SalvaUnaCopia
    MsgBox "Bachup avvenuto con successo", vbInformation, "Informazione"
    ThisWorkbook.SaveCopyAs nomecopia
    End Sub

    IL file viene salvato nel pc in una cartella che ho chiamato excel , e qui viene salvato sia il file del programma che il file di Backup.

    In questa Cartella ho creato un altra cartella chiamata BACKUP, ed io vorrei che il backup venga salvato appunto in questa cartella.

    Io penso che bisogna modificare questo path:

    Sub SalvaUnaCopia()
    nomecopia = ThisWorkbook.Path & "\" & ThisWorkbook.Name & "_Backup_" & ".xlsm"
    End Sub

    per fare in modo che la copia di backup la copi appunto nella cartella che ho creato che si chiama BACKUP.

    Io ho provato in tanti modi ma non ci riesco.

    Penso di essere stato abbastanza chiaro

    Ringrazio By65Franco per l'impegno che ci ha messo.

  • Re: Path per il backup

    Hai ripetuto senza aggiungere nulla e soprattutto senza leggere la mia risposta con il codice che ti ho suggerito di modificare.

  • Re: Path per il backup

    E si … non ci siamo , o perlomeno siamo lontani lontani

    L'esempio che ti ho postato esegue esattamente ciò che vuoi fare con un modo più consono di denominare il file di backup

    Ripeto in modo di essere più esaustivo

    Nella cartella dove si trova il File Excel, l'esempio che ti ho postato crea, se non esiste, una cartella di nome Backup e crea il file di Backup al suo interno.

    Questo è quello che fa, così come sopra già postato:

    • retrieve nome Cartella e nome File per il backup
    • creare la cartella di Backup se non esiste
      • verifica se operazione non è andata a buon fine
    • creare il Backup 
      • verifica se il Backup non è andato a buon fine
    • messaggio di completamento del Backup
      • info del Backup eseguito

    Più di questo non saprei, hai una traccia e i consigli che ti hanno dato anche gli altri.
    Basta studiarseli e metterli in pratica. Ci vuole un po' di impegno e di logica nello scrive un codice in VBA 

    Leggi bene cosa ti ha risposto oregon e vedi cosa fare.

  • Re: Path per il backup

    18/05/2023 - freddy60 ha scritto:


    In Private Sub Workbook_BeforeClose(Cancel As Boolean), ho scritto quest'altro codice quando chiudo il programma:

    Dim risposta As String
    risposta = MsgBox("Queta copia esitste già, vuoi sostituirla?", vbYesNo, "AVVISO")
    If risposta = vbYes Then
    ThisWorkbook.SaveCopyAs nomecopia
     Else
      End If
    Call SalvaUnaCopia
    MsgBox "Bachup avvenuto con successo", vbInformation, "Informazione"
    ThisWorkbook.SaveCopyAs nomecopia
    End Sub

    Vorrei aggiungere una considerazione, tanto per darti uno spunto e riflessione, in merito alla Sub sopra riportata.
    La Sub è scritta…. diciamo malino? qui occorre un po' di impegno e logica :

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    					>> Eliminato dichiarazioni inutili e impostato IF con la logica corretta <<
    If MsgBox("Queta copia esitste già, vuoi sostituirla?", vbYesNo, "AVVISO") = VbYes Then ThisWorkbook.SaveCopyAs nomecopia
    
    Call SalvaUnaCopia	>> Ma nella If sopra già fa un salvataggio se viene risposto Yes al MsgBox e qui fa un altro salvataggio?
    					   Se questa Sub esegue la copia di Backup, il Messaggio di completamento di Andato a Buon Fine
    					   su cosa si basa? quali sono i controlli per dire che il file di backup esiste? <<
    MsgBox "Bachup avvenuto con successo", vbInformation, "Informazione"  >>>>?????
    ThisWorkbook.SaveCopyAs nomecopia	>> qui viene riesiguita un altra copia del file excel ? perchè ?????
    End Sub

    Poi hai messo una parte di codice dove ci si interroga se si vuole o meno sostituire il vecchio file di backup con uno nuovo.

    Logica sbagliata, se si richiede di eseguire un backup del file è perchè si vuole fare, o si conferma oppure no.
    Il fatto che esiste già un backup a cosa porta, a cosa serve ? per non fare un nuovo backup perchè già ne esiste uno? Boh?????

    Un flusso corretto sarebbe:

    • Avvio comando per eseguire il Backup
    • Richiesta di conferma
      • “ Vuoi eseguire il Backup?” risposte: Yes or No
        • Yes = esegue il Backup
          • Controlli per confermare che il Backup è andato a buon fine
            • Messaggio di Completamento: “Backup Eseguito”
        • No = torna indietro e non esegue il Backup
    • Chiusura della Sub 

    In ultimo sarebbe opportuno creare più copie di Backup se non altro per avere la possibilità di poter riprendere una vecchia versione del file. Magari quella di alcuni minuti o ore fa, oppure quella di ieri o dell'altro ieri, etc….

    A tal fine nella cartella di Backup verranno mantenuti un certo numero di file di backup

    Supponiamo di voler conservare gli ultimi 5 file di Backup

    • Ogni file di Backup avrà un nome univoco, per esempio anteponendo al nome del file un Suffisso + data e ora del backup. Esempio: 
      • per il file excel di nome MyWorkExcel.Xlsm alle ore 17:50:35 del 18/05/2023 si esegue il backup che verrà salvato come:
        • Bk20230518175035_MyWorkExcel.Xlsm
      • alle 19:30:15 dello stesso giorno si esegue un nuovo backup e si otterrà un nuovo file:
        • Bk20230518193015_MyWorkExcel.Xlsm
      • il giorno successivo alle 08:15:45 viene eseguito un nuovo backup e si ottiene il file:
        • Bk20230519081545_MyWorkExcel.Xlsm
      • nella stessa giornata alle ore 20:05:25 viene eseguito un nuovo backup e si ottiene il file:
        • Bk202305190200525_MyWorkExcel.Xlsm
      • il giorno successivo alle 10:45:10 viene eseguito un nuovo backup e si ottiene il file:
        • Bk20230520104510_MyWorkExcel.Xlsm
    • supponiamo di voler conservare gli ultimi 5 Backup per poter risalire alle versioni precedenti del file in questione
      • alla successiva richiesta di Backup:
        • se il numero di Backup è Uguale o Maggiore di 5
          • eliminare il file di backup più vecchio 
          • aggiungere il nuovo file di backup
    • In questo caso nella Cartella di Backup saranno presenti sempre e solo gli ultimi 5 file di backup:
    Bk20230518175035_MyWorkExcel.Xlsmsalvato il 18/05/2023 alle 17:50:35
    Bk20230518193015_MyWorkExcel.Xlsmsalvato il 18/05/2023 alle 19:30:15
    Bk20230519081545_MyWorkExcel.Xlsmsalvato il 19/05/2023 alle 08:15:45
    Bk20230519200525_MyWorkExcel.Xlsmsalvato il 19/05/2023 alle 20:05:05
    Bk20230520104510_MyWorkExcel.Xlsmsalvato il 20/05/2023 alle 10:45:10

    Questo un piccolo e banale esempio di come pensare e organizzare delle copie di Backup che magari per un Foglio Excel può tornare utile per consultare o ripristinare delle vecchie versioni.

    Ma un vero Backup, con o senza le versioni precedenti del file, si ottiene destinando almeno due copie in due siti diversi di destinazione (Server Remoti e con Provider diversi, Hardware remoti e sedi diverse, etc…),  e non nello stesso Computer.

    Vabbè, diciamo basta, non ti annoio più ;))

Devi accedere o registrarti per scrivere nel forum
14 risposte