Wijziging loggen

Status
Niet open voor verdere reacties.

Ron001

Gebruiker
Lid geworden
4 dec 2017
Berichten
384
Helpmij'ers

Ik heb hier op het forum een tijdje geleden onderstaande code gevonden en een beetje aangepast, dit werkt..

Code:
Dim PreviousValue
Private Sub Worksheet_Change(ByVal target As Range)
If target.Value <> PreviousValue Then
Sheets("log").Cells(65000, 1).End(xlUp).Offset(1, 0).Value = _
            Replace((Environ("username")), ".", " ") & " wijzigde " & ActiveSheet.Name & target.Address _
            & " van " & UCase(PreviousValue) & " naar " & UCase(target.Value) & " op " & Date & "  " & Time
End If
            
End Sub

Nu wil ik alleen de tekst die komt achter "van" en "naar" in het rood laten verschijnen dat dit opvalt in het logtabblad.
Dit had ik geprobeerd via "<font color = #FF0000>" ,HTML opmaak. Maar dat is blijkbaar niet de manier...
Als de cel leeg was dat er "LEEG" komt te staan, ook als men iets verwijdert uit een cel "LEEG" komt te staan...
En bij het bereiken van 1000 regels terug op regel één beginnen, kwestie van file wat te "sparen"..

Mvg
 
Laatst bewerkt:
Bepaal de posities van die woorden om Start en Length te berekeken en gebruik dan dit:
Code:
Range("A1").Characters(Start:=7, Length:=5).Font.ColorIndex = 3

Waarbij je uiteraard die 5 en 7 vervangt door de berekende positie en lengte.
 
Laatst bewerkt:
@ Edmoor

Ik ben niet helemaal mee maar;

Startpositie begrijp ik nog wel denk ik...De positie van de eerste letter/cijfer? Deze is dan steeds hetzelfde veronderstel ik?
Lengte is afhankelijk van wat de gebruikers in de cellen invullen?

Of hoe moet ik dit zien?

Mvg
 
Start positie is dan positie van " van " +5.
Lengte is positie van (" naar " -1) - Start positie.
Hetzelfde doe je met " naar " en " op ".

A1 vervang je uiteraard door Target.
Plaats anders een voorbeeld document.
 
Laatst bewerkt:
Dit is een van de eerste dingen waarvoor programmeurs in de jaren '60 een oplossing bedachten:

Code:
Private Sub Worksheet_Change(ByVal target As Range)
    open "G:\OF\logboek.txt" for append as #1
       Print #1, format(now) & "  " & Replace(Environ("username"), ".", " ") & ": "  & target.Address(,,,-1)  & " naar: " & target.Value
   close
End Sub
 
@ Ed

Voorbeeld in bijlage...
Kan hier dan ook ineens in;
LEEG in een "lege cel" (leeg naar gevulde cel, gevulde cel naar leeg)
Bij 10000 regels wissen

@ snb

Tof om te weten! :)
 

Bijlagen

  • Logbestand na wijziging(jp) (1).xlsm
    20,6 KB · Weergaven: 49
Als je wilt dat alleen Ed naar je probleem kijkt, kun je hem beter een PB sturen en je vraag sluiten...
 
@ Octafish

Ik wil niet alleen Ed, maar hij vroeg achter een voorbeeldfile...

Hoe meer zielen...Hoe meer oplossingen...
Dus voel je vrij :)
 
Heb je wel eerst naar de code van snb gekeken en dit getest?
 
Jep,

Maar vind de log in excel beter...
Als deze is zoals ik wil, gooi ik die van snb en deze samen dat deze in een externe file gelogd wordt...

Code:
28/02/2018 8:24:30  Ron : '[Logbestand na wijziging(jp) (1).xlsm]Blad1'!$A$23 naar: dffg
28/02/2018 8:24:31  Ron : '[Logbestand na wijziging(jp) (1).xlsm]Blad1'!$J$28 naar: dffd
28/02/2018 8:24:33  Ron : '[Logbestand na wijziging(jp) (1).xlsm]Blad1'!$O$18 naar: dfgdf
28/02/2018 8:25:06  Ron : '[Logbestand na wijziging(jp) (1).xlsm]Blad1'!$A$13 naar: 
28/02/2018 8:25:07  Ron : '[Logbestand na wijziging(jp) (1).xlsm]Blad1'!$B$18 naar: 
28/02/2018 8:25:07  Ron : '[Logbestand na wijziging(jp) (1).xlsm]Blad1'!$B$19 naar:
 
Ik hoop dat je je realiseert dat jouw aanpak dubbelop is: als alle wijzigingen worden bijgehouden hoef je niet iedere keer vast te leggen wat de 'oude' waarde was. Die is nl. een vorige keer al vastgelegd in het logbestand.
Voor dit soort wijzigingen ('dffg', 'dffd') lijkt me een logbestand wel een heel zwaar middel ;)
 
Voor dit soort wijzigingen ('dffg', 'dffd') lijkt me een logbestand wel een heel zwaar middel

Is gewoon snel getypt om te kijken of de wijzigingen effectief worden gelogd :)
 
Zo kan het het meest efficiënt:

Code:
Private Sub Workbook_Open()
    Open "G:\OF\logboek.csv" For Append As #1
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Close #1
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Print #1, Join(Array(Now, Environ("username"), Target.Address(, , , -1), Target.Value), ";  ")
End Sub
 
Laatst bewerkt:
Hoewel ik het helemaal met snb eens ben, toch hier een voorbeeld voor het zetten van een kleur in tekst van een cel:
Bekijk bijlage Kleurtje.xlsm
 
Laatst bewerkt:
Weer zo'n ondoordacht projectje? Als je gegevens wilt loggen in Excel dan zet je deze niet in 1 kolom om vervolgens met kleurtjes te gaan werken maar dan schrijf je de gegevens in aparte kolommen. Je kan dan optimaal gebruik maken van filters, draaitabellen en alle andere functionaliteiten om de logfile te analyseren.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  c00 = Target.Value
  Application.Undo
  c01 = Target.Value
  Sheets("Log").Cells(Rows.Count, 12).End(xlUp).Offset(1).Resize(, 5) = Array(Environ("username"), Now, Target.Address(, , , -1), c01, c00)
  Target = c00
  Application.EnableEvents = True
End Sub
 
Ik heb jullie 3 oplossingen getest...Zijn allemaal perfect werkende!

Maar zou deze nu willen combineren

snb schrijft wijzigingen naar externe file, TOP!
Edmoor zet de veranderde waardes in rode kleur, TOP!
VenA maakt van al deze info een handig en snel te analyseren file, TOP!

Is het mogelijk deze te combineren?
 
Wat dacht dat er gebeurt als je het bestand dat hier wordt gemaakt opent in Excel ?

Code:
Private Sub Workbook_Open()
    Open "G:\OF\logboek.csv" For Append As #1
End Sub
 
@ snb

dat is al een zeer groot stuk, maar heb daar graag bij;

"van" x "naar" y (deze in UCase en rode kleur) en 10000 rijden clearcontents
 
Heb ik gebruikt...Enkel de path is wat anders...

Code:
Private Sub Workbook_Open()
    Open "P\logboek.csv" For Append As #1
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Close #1
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Print #1, Join(Array(Now, Environ("username"), Target.Address(, , , -1), Target.Value), ";  ")
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan