Monitorizare modificari in fisier excel
-
- Mesaje: 205
- Membru din: Lun Dec 28, 2009 6:10 pm
- Localitate: Pitesti
Monitorizare modificari in fisier excel
viewtopic.php?f=33&t=515&p=2713&hilit=dionisie#p2713
Solutia din topicul de mai sus imi e zilnic de folos, de aceea tin sa-i multumesc inca o data autorului!
In fisierul excel monitorizat cu acest macro am o coloana...uneori mai multe coloane ale caror celule mi-as dori sa stiu ce utilizator, cum si, mai ales, cand au fost modificate. Ceva asemanator cu Track Changes din word, dar sa fie, la fel ca mai sus, intr-un fisier log separat.
Multumesc anticipat celor ce vor dori sa ne furnizeze solutii!
Solutia din topicul de mai sus imi e zilnic de folos, de aceea tin sa-i multumesc inca o data autorului!
In fisierul excel monitorizat cu acest macro am o coloana...uneori mai multe coloane ale caror celule mi-as dori sa stiu ce utilizator, cum si, mai ales, cand au fost modificate. Ceva asemanator cu Track Changes din word, dar sa fie, la fel ca mai sus, intr-un fisier log separat.
Multumesc anticipat celor ce vor dori sa ne furnizeze solutii!
G.H.
-
- Moderator
- Mesaje: 4570
- Membru din: Vin Iul 31, 2009 7:32 am
Re: Monitorizare modificari in fisier excel
Desi metoda de protectie mentionata are mai multe dezavantaje, daca a fost utila pana acum, poate fi "completata"...
Ce mai trebuie:
1. Sa te hotarasti ce anume trebuie monitorizat - o singura foaie (una anume) sau toate foile, pentru ca in functie de asta se foloseste un eveniment la nivel de foaie (Worksheet_Change) sau la nivel de fisier (Workbook_SheetChange)
In exemplul urmator am folosit Workbook_SheetChange.
2. Se folosesc la baza 2 evenimente - Change - este cel care se declanseaza la modificare, si SelectionChange care se declanseaza la modificarea selectiei. Cel din urma este necesar pentru a "memora" valoarea existenta inainte de modificare pentru ca Excelul nu ofera in evenimentul Change informatii despre ce exista inainte acolo ci doar ce a ramas dupa modificare.
Asta inseamna ca mai ai nevoie de o variabila publica, ce va tine minte valorile initiale.
ATENTIE: Exemplul urmator monitorizeaza doar modificarile facute celula cu celula nu si stergerea sau modificarea unei zone formata din celule multiple!
Astfel, in obiectul ThisWorkbook mai apar urmatoarele:
Daca numai o singura coloana din orice foaie ar trebui monitorizata, atunci se poate folosi urmatorul cod pentru SheetChange
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("C:C")) Is Nothing Then
LogInformation "MODIFICARE: " & Format(Now, "yyyy-mm-dd hh:mm:ss") & " de catre " & Environ("USERNAME") & " de pe PC: " & Environ("COMPUTERNAME") & " in foaia " & Sh.Name & " celula " & Target.Address & ", Valoare initiala: " & ValoareInitiala & ", Valoare noua: " & Target.Value
End If
End Sub
Pentru mai multe detalii vezi si fisierul atasat.
Ce mai trebuie:
1. Sa te hotarasti ce anume trebuie monitorizat - o singura foaie (una anume) sau toate foile, pentru ca in functie de asta se foloseste un eveniment la nivel de foaie (Worksheet_Change) sau la nivel de fisier (Workbook_SheetChange)
In exemplul urmator am folosit Workbook_SheetChange.
2. Se folosesc la baza 2 evenimente - Change - este cel care se declanseaza la modificare, si SelectionChange care se declanseaza la modificarea selectiei. Cel din urma este necesar pentru a "memora" valoarea existenta inainte de modificare pentru ca Excelul nu ofera in evenimentul Change informatii despre ce exista inainte acolo ci doar ce a ramas dupa modificare.
Asta inseamna ca mai ai nevoie de o variabila publica, ce va tine minte valorile initiale.
ATENTIE: Exemplul urmator monitorizeaza doar modificarile facute celula cu celula nu si stergerea sau modificarea unei zone formata din celule multiple!
Astfel, in obiectul ThisWorkbook mai apar urmatoarele:
Cod: Selectaţi tot
Public ValoareInitiala As Variant
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
LogInformation "MODIFICARE: " & Format(Now, "yyyy-mm-dd hh:mm:ss") & " de catre " & Environ("USERNAME") & " de pe PC: " & Environ("COMPUTERNAME") & " in foaia " & Sh.Name & " celula " & Target.Address & ", Valoare initiala: " & ValoareInitiala & ", Valoare noua: " & Target.Value
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ValoareInitiala = Target.Value
End Sub
Daca numai o singura coloana din orice foaie ar trebui monitorizata, atunci se poate folosi urmatorul cod pentru SheetChange
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("C:C")) Is Nothing Then
LogInformation "MODIFICARE: " & Format(Now, "yyyy-mm-dd hh:mm:ss") & " de catre " & Environ("USERNAME") & " de pe PC: " & Environ("COMPUTERNAME") & " in foaia " & Sh.Name & " celula " & Target.Address & ", Valoare initiala: " & ValoareInitiala & ", Valoare noua: " & Target.Value
End If
End Sub
Pentru mai multe detalii vezi si fisierul atasat.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
-
- Mesaje: 205
- Membru din: Lun Dec 28, 2009 6:10 pm
- Localitate: Pitesti
Re: Monitorizare modificari in fisier excel
Multumesc, Dr. Windows, am testat putin codul, se pare ca functioneaza cum imi doresc!
De maine "il bag in paine"
O zi excelenta!
De maine "il bag in paine"
O zi excelenta!
G.H.
-
- Mesaje: 27
- Membru din: Joi Oct 18, 2018 3:07 pm
Re: Monitorizare modificari in fisier excel
Hello,
Codul functioneaza si pe fisiere stocate pe SharePoint?
Thx!
Codul functioneaza si pe fisiere stocate pe SharePoint?
Thx!