Macro per backup di file excel

Anonimo
2017-06-28T07:59:13+00:00

Buongiorno,

da poco ho scoperto quanto excel può contribuire a farmi "lavorare meglio". E spero con il vs. contributo di continuare su questo percorso.

Inizio da subito.

Ho un file excel aperto 24/24 per 5 gg. a settimana ( ma alcune volte i miei collaboratori dimenticano di chiuderlo anche nel WE!!).

Vorrei che ad un orario predeterminato:

  1. arrivi una avviso che il file è in chiusura
  2. il file si chiuda salvandosi e creando un file di backup
  3. il file si riapra avvisando dell'avvenuto backup

Francamente non saprei se quanto richiestovi  è fattibile.

Attendo vostra indicazione.

Grazie mille

by EF

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2017-06-30T13:34:38+00:00

Ciao By EF,

grazie per l'immenso aiuto

[RISOLTO]

Grazie a te per il cortese riscontro. 

Per chiudere questo thread, vorrei chiederti gentilmente di contrassegnare la mia risposta come Risposta preferita. In questo modo, tu aiuterai anche coloro che potessero cercare soluzioni ai problemi simili negli archivi della Community.

  

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2017-06-29T17:49:09+00:00

Ciao By EF,

Norman:

Nota bene, però, che solo i file di backup dovrebbero essere salvati nella specifica directory perché, come scritto, il codice non distingue il tipo di file salvati nella directory. Di conseguenza, solo gli ultimi tre file saranno conservati e tutti gli altri file verranno eliminati, a prescindere dal tipo di file. Se questo potrebbe essere un problema, potrei modificare il codice per assicurare che solo i file di backup potrebbero essere eliminati.

EF:

Se la modifica di cui sopra non ti comporta tanto lavoro, sarebbe gradita per aumentarmi la flessibilità e diminuire possibili errori.

Nel modulo di codice standard, sostituisci il codice precedente con la seguente versione:

'=========>>

Option Explicit

Dim sPath As String

Public RunWhen As Double

Public Const cRunIntervalHours = 1      '\ 1 ora        '<<=== Modifica

Public Const cRunWhat = "CreaBackup"

Public Const sPercorso As String =  _

                       "**C:\Users\EDF\MyBackups**"             '<<=== Modifica

'--------->>

Public Sub CreaBackup()

    Dim arrSplit As Variant

    Dim sDateTimeStamp As String, sFilename As String

    Dim sName As String, sExt As String, sStr As String

    Const sFormat As String = "yyyy-mm-dd hh-mm"

    sStr = Application.PathSeparator

    If Right(sPercorso, 1) = sStr Then

        sPath = sPercorso

    Else

        sPath = sPercorso & sStr

    End If

    sDateTimeStamp = Format(Now, sFormat)

    With ThisWorkbook

        arrSplit = Split(.Name, ".")

        sName = arrSplit(0) & "_"

        sExt = "." & arrSplit(1)

        sFilename = sPath & sName _

                    & sDateTimeStamp & sExt

        .SaveCopyAs sFilename

    End With

    Call MsgBox( _

         Prompt:="Un file di backup " _

                 & sFilename _

                 & " è stato salvato a: " _

                 & vbNewLine _

                 & sDateTimeStamp _

                 & vbNewLine, _

         Buttons:=vbInformation, _

         Title:="BACKUP CREATO " & sDateTimeStamp)

    Call CancellaFile(sName, sExt)

    Call StartTimer

End Sub

'--------->>

Public Sub CancellaFile(aName As String, sExt As String)

    Dim oFSO As Object

    Dim oFolder As Object

    Dim oFiles As Object

    Dim oFile As Object

    Dim oOldfile As Object

    Dim iCtr As Long, jCtr As Long, kCtr As Long

    Const iMaxFileBackup As Long = 3                        '<<=== Modifica

    On Error GoTo XIT

    Set oFSO = CreateObject("Scripting.FileSystemObject")

    Set oFolder = oFSO.GetFolder(sPath)

    Set oFiles = oFolder.Files

    iCtr = iMaxFileBackup

    Do While oFiles.Count - kCtr > iCtr

        jCtr = 0

        kCtr = 0

        For Each oFile In oFiles

            With oFile

                If .Name Like aName & "????-??-?? ##-##" & sExt Then

                    jCtr = jCtr + 1

                    If oOldfile Is Nothing Then

                        Set oOldfile = oFile

                    End If

                    If oOldfile.DateLastModified > .DateLastModified Then

                        Set oOldfile = oFile

                    End If

                Else

                    kCtr = kCtr + 1

                End If

            End With

        Next oFile

        If jCtr > iMaxFileBackup Then

            oFSO.DeleteFile oOldfile, True

        End If

        Set oOldfile = Nothing

    Loop

XIT:

    Set oFile = Nothing

    Set oFiles = Nothing

    Set oFSO = Nothing

End Sub

'--------->>

Sub StartTimer()

    RunWhen = Now + TimeSerial(cRunIntervalHours, 0, 0)

    Application.OnTime EarliestTime:=RunWhen, _

                       Procedure:=cRunWhat, _

                       Schedule:=True

End Sub

'--------->>

Public Sub StopTimer()

    On Error Resume Next

    Application.OnTime EarliestTime:=RunWhen, _

                       Procedure:=cRunWhat, _

                       Schedule:=False

End Sub

'<<=========

Questo codice crea un file di backup con la data e ora per il file in cui si trova il codice e assicura che solo gli ultimi tre versioni siano conservati. Altri file nella directory precisata per i file di backup non saranno toccati. Nota inoltre che il codice può essere utilizzato in più file per salvare sino a tre copie di backup per ciascuno di loro, sia in una directory comune per tutti i file di backup che una directory dedicata per ogni file. Come indicato in precedenza, il numero di copie di backup per ogni file dipende dal valore assegnato alla costante iMaxFileBackup.

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-07-31T13:52:24+00:00

    Buongiorno, io avrei un'esigenza simile alla precedente.

    Anzichè però avere solo un file aperto, ne abbiamo una decina. Tutti aperti contemporaneamente e tutti all'interno di una stessa cartella sul serve. A questi file possono accedere diversi utenti, naturalmente soltanto il primo che apre il file ha la possibilità di modificarlo.

    Se qualcunon potesse aiutarmi vi sarei molto grato.

    Saluti,

    Massimo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-06-30T13:22:39+00:00

    Ciao Norman,

    grazie per l'immenso aiuto

    [RISOLTO]

    Alla prossima

    by EF

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-06-29T10:08:38+00:00

    Ciao Norman,

    Se questo potrebbe essere un problema, potrei modificare il codice per assicurare che solo i file di backup potrebbero essere eliminati.

    Se la modifica di cui sopra non ti comporta tanto lavoro, sarebbe gradita per aumentarmi la flessibilità e diminuire possibili errori.

    Altrimenti è OK cosi.

    Attendo tue.

    Grazie ancora.

    by EF

    La risposta è stata utile?

    0 commenti Nessun commento