Condividi:        

Salvare file xlsm solo se è stato modificato

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Salvare file xlsm solo se è stato modificato

Postdi nunzio.caruso » 25/07/12 16:45

Mi serve un file in excel 2007 con una casella che mi indichi in automatico la data dell'ultima modifica del file (È una tabella che aggiorno su più PC, non solo io, e vorrei sapere quando è stata aggiornata).
Ho trovato le istruzioni per farlo con una macro in VBA (f.DateLastModified). Il formato che mi richiede per il salvataggio è xlsm (cartella di lavoro con attivazione macro). Tutto funziona (o quasi); se modifico e salvo, all'apertura mi visualizza la nuova data (modifica), se non salvo la data all'apertura rimane invariata. Il problema è che tutte le volte che esco dal file mi viene richiesto di salvare anche se non ho modificato nulla, quindi involontariamente se rispondo si va a modificare la data, che non sarà più quella dell'ultima modifica ma dell'ultimo salvataggio. Vorrei in qualche modo avere la richiesta di salvataggio solo quando eseguo modifiche.
Ringrazio chi mi sa aiutare
nunzio.caruso
Newbie
 
Post: 9
Iscritto il: 23/05/12 09:55

Sponsor
 

Re: Salvare file xlsm solo se è stato modificato

Postdi Flash30005 » 25/07/12 18:18

:roll:

Dovresti combinare le due cose
1) che venga modificato
2) che venga salvato

e scrivere in una cella (es.: A1) la data della modifica
In questo modo se salvi senza modificare in A1 avrai la "vecchia" data altrimenti la nuova.
Per fare questo devi mettere nel Vba di ogni foglio della cartella questo codice:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
DataS = Date
End Sub

Nel modulo rendi pubblica la variabile DataS con questo codice:
Codice: Seleziona tutto
Public DataS


e in Thisworkbook il codice:
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If DataS <> "" Then Sheets("Foglio1").Range("A1") = DataS
End Sub



Prova e fai sapere

ciao

Ps. Hai ricevuto l'MP che chiedevi in questo post?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Salvare file xlsm solo se è stato modificato

Postdi nunzio.caruso » 25/07/12 19:51

La data della modifica è inserita in modo automatico nella cella (voglio essere sicuro che venga modificata, non voglio inserirla io). È la data (ultima modifica) che si vede andando a controllare le propietà del file.

Il programma in VBA
Function ShowFI(filespec)
Dim fs, f, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(filespec)
s = s & "Ultima modifica: " & f.DateLastModified
' MsgBox s, 0, "Informazioni sul Salvataggio"
ShowFI = s
End Function

Nella cartella con la Tabella il contenuto della cella Z1
=SOSTITUISCI(SINISTRA(CELLA("filename");TROVA("]";CELLA("filename"))-1);"[";"")

La casella che visualizza la data e l'ora della modifica contiene =ShowFI(Z1)
nunzio.caruso
Newbie
 
Post: 9
Iscritto il: 23/05/12 09:55

Re: Salvare file xlsm solo se è stato modificato

Postdi Flash30005 » 25/07/12 21:05

:roll:
penso che stai facendo un po' di confusione perché questo codice:
Codice: Seleziona tutto
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(filespec)
s = s & "Ultima modifica: " & f.DateLastModified


è il codice che dice ad excel preleva la data di ultima modifica del file
ma questa è la data che windows fa assumere al file non excel
pertanto finché vorrai rilevare la data con quel codice ti dovrai accontentare di avere la data di salvataggio file anche senza alcuna modifica.

La macro da me postata, invece, controlla che il file venga modificato e, solo in quel caso, scrive nella cella la data di modifica (e salvataggio), e si può fare solo perché sei in ambiente excel e la macro è di excel (diverso dall'ambiente windows che "se ne frega" se hai modificato il file o no e lo hai solo salvato)

Altrimenti con un sotterfugio fai in modo di non salvare il file se non è stata effettuata alcuna modifica quindi inserendo quest codici in Thisworkbook
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If DataS = "" Then
ThisWorkbook.Close SaveChanges:=False
End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If DataS = "" Then
ThisWorkbook.Close SaveChanges:=False
End If
End Sub


Ricorda di lasciare sempre i codici precedenti in ogni foglio


Ciao

Ps2. Hai ricevuto l'MP che chiedevi in questo post?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Salvare file xlsm solo se è stato modificato

Postdi nunzio.caruso » 25/07/12 22:16

Grazie.
Ho provato la prima soluzione che mi hai dato e funziona benissimo.
Questa data la posso mettere nel piè pagina?
nunzio.caruso
Newbie
 
Post: 9
Iscritto il: 23/05/12 09:55

Re: Salvare file xlsm solo se è stato modificato

Postdi Flash30005 » 25/07/12 23:35

Ok allora modificando solo la macro che è in ThisWorkbook
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If DataS <> "" Then
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .RightFooter = Format(DataS, "dd/mm/yyyy")
    End With
End If
End Sub


Otterrai, in caso di salvataggio (con modifica), l'aggiornamento della data sul "Piè di pagina" del foglio attivo

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Salvare file xlsm solo se è stato modificato

Postdi Anthony47 » 26/07/12 01:05

Ricordate che invece di mettere tante Private Sub Worksheet_Change(ByVal Target As Range) in ogni foglio si puo' mettere una sola Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) in ThisWorkbook.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Salvare file xlsm solo se è stato modificato":


Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti