Logboek maken

Status
Niet open voor verdere reacties.

miso1995

Gebruiker
Lid geworden
25 mei 2018
Berichten
87
Beste allemaal,

Ik wil graag een openstaande puntenlijst hanteren, waarbij ik een kolom heb toegevoegd met de titel "Laatst gewijzigd door".
Ik wil per wijziging in een regel, dat een macro getriggerd wordt die in de kolom "Laatst gewijzigd door" van die regel, de gegevens bijwerkt.

De codes voor het vullen van de kolom is geen probleem, maar het zit hem in de trigger.

Ik heb nu wel codes dat als een bereik verandert, dat ik alle regels kan bijwerken, maar het is de bedoeling dat enkel de regel gewijzigd wordt, waar de wijziging plaatsvindt.

Wie biedt?

Alvast heel erg bedankt!

Groetjes,


Michel
 
Je geeft niet veel info, dus de trigger:
Sub Worksheet_Change(ByVal Target As Range)
 
Je geeft niet veel info, dus de trigger:
Sub Worksheet_Change(ByVal Target As Range)

Die code die je geeft is inderdaad het begin. Die heb ik al verscheidene keren gebruikt.
Maar hoe zorg ik ervoor dat in een lijst een wijziging op regel niveau leidt tot een wijziging op die regel en niet voor die hele kolom?

Je kunt gebruik maken van "For Each ....."
En dan je code.

Concreet is dit mijn beginnetje:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("D12:D149")
    Dim c As Range
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
        ActiveSheet.Unprotect Password:=".........."
        KeyCells.Rows.AutoFit
        For Each c In Range("C12:C149")

Ik twijfel over hoe ik verder moet.

Gr. Michel
 
Je kan controleren op Target.Row en/of Target.Column

Wat ik al zei, je geeft weinig info.
Een voorbeeld bestandje is meestal gewenst met dit soort dingen.
 
Je kan controleren op Target.Row en/of Target.Column

Wat ik al zei, je geeft weinig info.
Een voorbeeld bestandje is meestal gewenst met dit soort dingen.

Bijgaand het bestandje.Bekijk bijlage Voorbeeld helpmij.xlsx

Zoals te zien is in kolom K een logboek opgenomen. Als ik in de voorgaande kolommen van die tabel op die regel iets wijzig, dan moet de waarde in kolom K voor die regel bijgewerkt worden.
Voorwaarde is dat de informatie in kolom K op een andere regel in tact blijft.

Mijn probleem is dat niet zo gauw op een passende efficiënte formule kan komen.
Vandaar dat in het voorbeeld bestand geen macro's nog zijn opgenomen. Ik denk dat ik nu een stukje basiskennis over het hoofd zie.

Alvast bedankt.

Gr. Michel
 
Zo?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  With ListObjects(1)
    If Not Intersect(Target, .DataBodyRange) Is Nothing And Target.Column < .Range.Columns.Count Then
      If Target.Count = 1 Then .Range.Cells(Target.Row, .Range.Columns.Count) = Now
    End If
  End With
End Sub
 
Zo?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  With ListObjects(1)
    If Not Intersect(Target, .DataBodyRange) Is Nothing And Target.Column < .Range.Columns.Count Then
      If Target.Count = 1 Then .Range.Cells(Target.Row, .Range.Columns.Count) = Now
    End If
  End With
End Sub

Dank voor je bericht, maar ik weet niet helemaal hoe ik de parameters moet invullen (het juiste formaat voor deze formule). Dit is omdat ik deze niet ken.

Gr. Michel
 
Het quoten is niet nodig. Er staan geen parameters in. Gewoon de code kopiëren in de bladmodule van het betreffende blad.
 
Het werkt bijna.

Als ik in cel d14 iets wijzig, dan krijg ik de datum in k17.

Enig idee waar de aanpassing plaats moet vinden? Aangezien er geen parameters ingevuld hoeven te worden?

Dank hiervoor.

Ik zie wat het probleem is. Ik had boven de tabel 3 lege regels opgenomen. Maar die zou ik willen laten staan in verband met nog toe te voegen knoppen.
 
Laatst bewerkt:
Andere vraag is. Als ik meerdere cellen aanpas, dan wordt kolom K nu niet bijgewerkt. Kun je het ook zo aanpassen dat als ik meerdere regels tegelijk aanpas, dat voor al die regels, een wijziging wordt toegevoegd?
 
Dan moet je de 3 rijen boven de tabel weghalen. of
Code:
If Target.Count = 1 Then .Range.Cells(Target.Row[COLOR="#FF0000"]-3[/COLOR], .Range.Columns.Count) = Now
 
Aha werkt dat zo. En hoe kun je dit bereiken wanneer meerdere regels in 1 keer aangepast worden?
 
Niet direct een antwoord op de vraag van TS maar hierbij een heel oud bestand waarbij de activiteiten van de Users worden gemonitord.

Moest even zoeken in de catacomben, afstoffen en in een nieuw bestand zetten (oude was nog voorzien van een privé sleutel en die heb ik eraf gehaald).

In ThisWorkbook staat de volgende code: (verder geen VBA)
Code:
Option Explicit

Dim NewValue, OldValue As Variant

Private Sub Workbook_Open()
    Application.DisplayAlerts = False
        With Worksheets("Monitoring_Changes").Range("A65536").End(xlUp).Offset(1)
            .Value = Application.UserName
            .Offset(, 1).Value = Now
            .Offset(, 2).Value = " Open"
        End With
    Application.DisplayAlerts = True
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Originally from Jan Karel Pieterse
  Static bStopEvent As Boolean
  If bStopEvent Then Exit Sub
    On Error Resume Next
    If Sh.Name = "Monitoring_Changes" Then Exit Sub
    bStopEvent = True
    Application.EnableEvents = False
    NewValue = Target.Formula
    Application.Undo
    OldValue = Target.Formula
    Target.Formula = NewValue
    With Worksheets("Monitoring_Changes").Range("A65536").End(xlUp).Offset(1)
        .Value = Application.UserName
        .Offset(, 1).Value = Now
        .Offset(, 2).Value = " Change"
        .Offset(, 3).Value = Sh.Name & " / " & Target.Address
        .Offset(, 4).Value = "'" & OldValue
        .Offset(, 5).Value = "'" & NewValue
    End With
    OldValue = Nothing
    NewValue = Nothing
    Application.SendKeys ("{enter}")
    Application.EnableEvents = True
    bStopEvent = False
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
        With Worksheets("Monitoring_Changes").Range("A65536").End(xlUp).Offset(1)
            .Value = Application.UserName
            .Offset(, 1).Value = Now
            .Offset(, 2).Value = " Close & Save"
        End With
    Application.Goto Reference:=Worksheets("Blad1").Cells(1, 1)
    ActiveWorkbook.Save
    Application.DisplayAlerts = True
    Application.Quit
End Sub
Als je naar de code kijkt zie je meteen dat het echt oud is. Ongetwijfeld nu te perfectioneren / beveiligen.

Twee tabbladen:
Blad1: breng hier evt. wijzigingen aan
Monitoring_Changes: hier zie je wie wat en wanneer gedaan heeft. Helaas nog wel mogelijk in dit tabblad wijzigingen aan te brengen.


Wellicht te gebruiken c.q. een uitdaging.

Groeten,
Trainers

Bekijk bijlage Monitoring_Changes.xlsm
 
Hoe worden meerdere regels in 1 keer aangepast? Leg even stapsgewijs uit wat je allemaal wil. Gaat toch om 1 rij?

Ik wil per wijziging in een regel, dat een macro getriggerd wordt die in de kolom "Laatst gewijzigd door" van die regel, de gegevens bijwerkt.
 
Hoe worden meerdere regels in 1 keer aangepast? Leg even stapsgewijs uit wat je allemaal wil. Gaat toch om 1 rij?

Ja, het gaat om 1 rij. Maar stel dat ik als gebruiker snel wil zijn en ik pas bijvoorbeeld de status aan voor meerdere regels door een paar cellen te selecteren, te typen en dan met Ctrl + Enter de tekst in de geselecteerde cellen te plaatsen.
Met deze bewerking, werkt de code van VenA niet.

Ik zoek dus een manier om mijn bestandje ******proof te maken.

Alvast bedankt.
 
Ik zie wat het probleem is. Ik had boven de tabel 3 lege regels opgenomen. Maar die zou ik willen laten staan in verband met nog toe te voegen knoppen.

Het is niet handig een niet-gelijkend voorbeeldbestand te plaatsen.

Het is niet handig lege regels boven een Listobject (tabel) te zetten.

Met vergroting van de rijhoogte van rij 1 kun je voldoende ruimte creëren om knoppen toe te voegen.

Hoe beter de struktuur van een werkblad hoe minder capriolen in een macro nodig zijn.

Foolproof begint bij de ontwerper.
 
Het is niet handig een niet-gelijkend voorbeeldbestand te plaatsen.

Het is niet handig lege regels boven een Listobject (tabel) te zetten.

Met vergroting van de rijhoogte van rij 1 kun je voldoende ruimte creëren om knoppen toe te voegen.

Hoe beter de struktuur van een werkblad hoe minder capriolen in een macro nodig zijn.

Foolproof begint bij de ontwerper.

Eens. Heb je ook een oplossing?
 
SVP niet citeren/quoten.

Die heb ik je net gegeven; lees nog eens aandachtig door.
 
Waarom niet citeren/quoten? Dat is toch handig?

Ik bedoelde een oplossing voor het wijzigen van meerdere cellen tegelijk, zodat ook op meerdere regels een log komt te staan. Daar heb ik nog geen oplossing voor gezien.

Ik waardeer je pogingen om te helpen en een nuttige bijdrage te leveren. Echt waar, dank daarvoor, maar als je je in een discussie mengt, lees dan alsjeblieft de hele threat aandachtig door.

Dankjewel.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan