Monitorizare modificari in fisier excel

gh19612005
Mesaje: 121
Membru din: Lun Dec 28, 2009 6:10 pm
Localitate: Pitesti

Monitorizare modificari in fisier excel

Mesaj de gh19612005 » Joi Sep 20, 2018 10:03 am

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!

Dr.Windows
Site Admin
Site Admin
Mesaje: 4519
Membru din: Vin Iul 31, 2009 7:32 am

Re: Monitorizare modificari in fisier excel

Mesaj de Dr.Windows » Dum Sep 23, 2018 10:13 am

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:

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.

gh19612005
Mesaje: 121
Membru din: Lun Dec 28, 2009 6:10 pm
Localitate: Pitesti

Re: Monitorizare modificari in fisier excel

Mesaj de gh19612005 » Dum Sep 23, 2018 2:37 pm

Multumesc, Dr. Windows, am testat putin codul, se pare ca functioneaza cum imi doresc!
De maine "il bag in paine" :)
O zi excelenta!

Scrie răspuns

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”