• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Macro werkende maken

Status
Niet open voor verdere reacties.

verluc

Gebruiker
Lid geworden
29 mei 2009
Berichten
535
Heb onderstaande macro gevonden bij een antwoord van Jean-Paul
Deze zou perfect passen in mijn project zij het dat de "PreviousValue" niet vermeld word in sheets "Log"
Wat mis ik hier om dit werkende ter maken ?

Code:
If target.Value <> PreviousValue Then
x = Environ("USERNAME") & "|" & Application.UserName & "|" & " changed cell " & "|" & ActiveSheet.Name & target.Address _
            & "|" & PreviousValue & "|" & target.Value & "|" & Date & "|" & Time
Sheets("log").Cells(65000, 1).End(xlUp).Offset(1, 0).Resize(1, 8).Value = Split(x, "|")

Met mijn oprechte dank voor aanzet in deze.
 
Is dit een vraag voor de helderzienden hier? Halve code, geen linkje, geen bestandje erbij, bij welk event vindt dit plaats, etc?
 
Ik kan je vast vertellen wat wíj missen om dit werkende te maken: context.
Plaats graag een representatief voorbeeld-excelbestand waarin duidelijk wordt wat de bedoeling is.

Edit: wat VenA zegt.
 
Laatst bewerkt:
^ Wat zij zeggen

Nu ben ik een beetje paranormaal begaafd, dus heb ik je idee gevangen in de volgende code. Plaats deze achter de sheet waar je de logging voor wilt hebben:
Code:
Public PreviousValue As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    PreviousValue = Target.Value
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> PreviousValue Then
    x = Environ("USERNAME") & "|" & Application.UserName & "|" & " changed cell " & "|" & ActiveSheet.Name & Target.Address _
            & "|" & PreviousValue & "|" & Target.Value & "|" & Date & "|" & Time
    Sheets("log").Cells(65000, 1).End(xlUp).Offset(1, 0).Resize(1, 8).Value = Split(x, "|")
End If
End Sub
 
Laatst bewerkt:
Hierbij de volledige macro.
Alleen de PreviousValue word niet vermeld op de sheet "log'

Code:
Sub Worksheet_Change(ByVal target As Range)
Dim PreviousValue
Application.ScreenUpdating = False
Application.EnableEvents = False
Range("A4:D1000").HorizontalAlignment = xlLeft
Range("B4:C1000").HorizontalAlignment = xlCenter
Range("D4:D1000").HorizontalAlignment = xlLeft
On Error Resume Next
  If target.Column < 5 Then target = UCase(target)
   Range("A4:W" & Range("A" & Rows.Count).End(xlUp).Row).Sort Range("A4")
   Range("A4:W" & Range("A" & Rows.Count).End(xlUp).Row).Sort Range("D4")
   Rows.AutoFit
If target.Value <> PreviousValue Then
x = Environ("USERNAME") & "|" & Application.UserName & "|" & " changed cell " & "|" & ActiveSheet.Name & target.Address _
            & "|" & PreviousValue & "|" & target.Value & "|" & Date & "|" & Time
Sheets("log").Cells(65000, 1).End(xlUp).Offset(1, 0).Resize(1, 8).Value = Split(x, "|")
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
 
@Peter B
Grappig dat ^ om te refereren aan bovenstaande posts:d

Even off topic
Ooit van HSV gekregen of gezien om de vorige waarde te "vangen" waarbij je geen SelectionChange en geen Public nodig hebt.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
    With Application
        .EnableEvents = False
        nieuw = Target
        .Undo
        oud = Target
        Target = nieuw
        .EnableEvents = True
    End With
    MsgBox "nieuw: " & nieuw & Chr(10) & "Oud: " & oud & Chr(10) & "Nu: " & Target
End If
End Sub
 
Het kruist elkaar een beetje maar volgens mij heb je nu twee opties om de oude waarde te 'vangen'. Om bij elke Change de opmaak opnieuw aan te passen lijkt mij een beetje overbodig. Om twee regels op te nemen voor het sorteren is ook niet echt nodig.

Code:
Range("A4:W" & Range("A" & Rows.Count).End(xlUp).Row).Sort Range("A4"),,Range("D4")
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan