Macro per modifiche file excel
Hai un problema con Excel? 
Macro per modifiche file excel
di radu.popa data: 14/12/2012 15:55:19
Ciao a tutti,
mi servirebbe tracciare le modifiche eseguite in un file excel in condivisione.
Ho pensato ad una macro, per esempio salvare in un file txt(oppure excel) il nome del utente, l'ora, la data, il contenuto della cella/celle modificate, e se il file viene salvato o meno.
Il codice più vicino alle mie esigenza mi salva in un file txt solo nome utente l'ora e la data
Le mie conoscenze di vba sono 0.
Ringrazio a tutti per il vostro aiuto.
Public strNome As String
Public datData As Date
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'variabile da valorizzare
nomepercorso = "C:nomepercorso.txt"
If Dir(nomepercorso, vbNormal) = "" Then
Open nomepercorso For Output As #1
Print #1, "Data Accesso", "|", "Ora Accesso", "|", "Utente", "|", "Salvato"
Close #1
End If
Open nomepercorso For Append As #1
Print #1, CDate(Date), "|", CDate(Time), "|", Application.UserName
Close #1
End Sub
|
di Vecchio Frac data: 14/12/2012 20:51:43
Ma Excel non salva già queste modifiche se è attivata la modalità condivisa?
di HarryBosch data: 14/12/2012 21:00:05
Ciao radu.popa
il codice fa bene il suo lavoro, e salva appunto data, ora e nome utente recuperando le informazioni dal sistema:
CDate(Date), CDate(Time) e Application.UserName
Ora, vuoi salvare tutte le modifiche del foglio; ma hai dei campi fissi o si è liberi di modificare a piacere? Perchè altrimenti la registrazione potrebbe essere molto ampia.
Comunque si può fare qualcosa, e secondo me ci sono due soluzioni, di cui la prima abbastanza veloce:
- utilizziamo l'evento "change": ogni modifica la registriamo, ad esempio su un foglio di appoggio, con riferimento (indirizzo della cella) e nuovo valore inserito; non possiamo recuperare il valore precedente. Quando chiudiamo il foglio riportiamo tutte le modifiche sul file di testo o su un file Excel creato allo scopo.
- oppure, decisamente più elaborato, quando si salva, si deve creare una nuova copia del file, in modo che resti il file precedente. A questo punto possiamo confrontare il file vecchio con le modifiche che abbiamo registrato: si recupera così il valore precedente ed eliminare il vecchio più vecchio. Per appassionati ^_^
Non credo ci sia un modo migliore per recuperare il valore su quale andiamo a scrivere; forse Vecchio Frac può confermarlo
di HarryBosch data: 14/12/2012 21:03:26
"eliminare il vecchio più vecchio" ! :)
mi dico lol da solo...
intendevo il file più vecchio
@VecchioFrac
credo che il nostro amico voglia memorizzare specificatamente i valori che vengono modificati.. per i nuovi inseriti il problema è abbastanza risolvibile con il change, ma per i precedenti valori magari hai qualche idea buona :)
Sempre che interessino anche quelli
di Vecchio Frac data: 14/12/2012 21:40:36
Ci devo pensare :)
Non ho molta testa oggi... fuori nevica da tutto il giorno e sono preoccupato perchè la macchina è bloccata :(
di radu.popa data: 17/12/2012 16:19:57
Ciao ragazzi e grazie per le vostre risposte.
HarryBosch, credo che andrebbe più che bene la prima soluzione in quanto quello che m'interessa è avere un log file con i nuovi dati inseriti, le versioni precedenti non m'interessano.
Vorrei che nel log file, vicino al nome utente, la data e l'ora ci sia anche il contenuto delle celle compilate.
Sarebbe fattibile utilizzando l'evento "change"?
Come sarebbe il codice vb?
Grazie.
di HarryBosch data: 17/12/2012 18:40:50
Ti allego allora un esempio di quello che si potrebbe fare.
Nel .rar "salvare modifiche alla chiusura" che allego, troverai due file Excel: il file principale e un file "registrazioni" che serve per archiviare tutti i movimenti.
Per rendere funzionante il codice devi modificare il percorso che trovi nel modulo ThisWorkbook del file principale; sostituisci questa riga:
Workbooks.Open ("C:UsersDesktopProva
egistrazioni.xlsx")
con il percorso del file registrazioni, in base a dove lo metterai nel tuo pc.
poi comincia a scrivere sul foglio1 del file principale; quando lo chiudi tutte le modifiche saranno riportate nel file registrazioni, assieme alla data, ora e nome utente.
Intanto testa questo, analizza un pò il codice e poi vediamo eventuali miglioramenti o correzioni da porre.
di radu.popa data: 18/12/2012 16:52:57
Ho fatto qualche prova e sembra che va benissimo questa soluzione.
Ti ringrazio tantissimo sei stato molto gentile.
di Neferfra data: 31/01/2013 09:41:23
Ciao HarryBosch,
ho un problema analogo a radu.popa.
Potrei avere anch'io il file che hai postato?
Grazie
di HarryBosch data: 31/01/2013 11:33:08
Ti riallego il rar che avevo postato a radu.popa.
Ti ricordo di modificare il percorso del file registrazioni.
Testalo ed eventualmente apri un nuovo thread per chiarimenti o aggiustamenti al codice
^_^
Vuoi Approfondire?