• 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.

automatische TIMESTAMP velden worden allemaal random gereset

Status
Niet open voor verdere reacties.

bramgg

Gebruiker
Lid geworden
13 jul 2009
Berichten
19
Beste Excel champs,

Ik probeer in mijn Excel file automatische timestamps toe te voegen als er iets is gewijzigd in het notitieveld. Ter info, in mijn file met klantgegevens heb ik 2 velden; 1 voor notities en 1 voor volgende acties. Ik heb daarvoor een VBA code toegevoegd. Zodra de waarden wijzigen in 1 van de velden, wordt automatisch een timestamp ge-updatet. Tenminste, dat is de bedoeling.

Ik krijg nu wel een timestamp als ik iets wijzig, maar deze timestamps worden op (voor mij) onverklaarbare wijze continu overschreven, zonder dat iets in het veld aangepast wordt. Voorbeeld, als ik de sheet open dan zijn de timestamps voor alle klanten identiek.

Ik heb een voorbeeld van de code toegevoegd. I.v.m. klantgegevens kan ik de oorspronkelijke sheet niet delen. Mocht er nog meer info nodig zijn dan hoor ik het graag.

Alvast bedankt voor eventuele suggesties/oplossingen!

Code:
Function Timestamp(Reference As Range)
If Reference.Value <> "" Then
Timestamp = Format(Now, "dd-mm-yy hh:mm")
Else
Timestamp = ""
End If
End Function
 
Toch een voorbeeldbestand gewenst in dit geval
 
Voorbeeld bestand

Hierbij een voorbeeld bestand. Ik heb alle klantdata verwijderd, ik hoop dat in dit bestand het probleem kan worden gereproduceerd.
 

Bijlagen

Functies herrekenen steeds, het is geen platte data.
Als je je functie verwijdert, ook in de tabel en vervolgens deze code achter je de werkbladmodule (Data) zet, zou het goed moeten gaan.

Edit: had je bestand net iets anders begrepen. Nu wordt het opmerkingen veld alleen aangepast als er een nieuwe opmerking in wordt gezet.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
 With Me.ListObjects(1)
    If Not Intersect(Target, .DataBodyRange) Is Nothing And Target.Count = 1 Then
       .DataBodyRange(Target.Row - 1, 8).Offset(, 0 + (Target.Column = 2)).Resize(, 1 - (Target.Column = 2)) = Now
   End If
 End With
Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Bedankt voor je hulp!

Ik heb de Module met de functie verwijderd, en jouw code achter het werkblad gezet. Ik geloof dat het nu werkt als ik een wijziging maak in notities. Echter was het ook de bedoeling dat de timestamp in kolom H wordt bijgewerkt met de actuele tijd als er een wijziging heeft plaatsgevonden in het veld acties (kolom C).

Dus ik heb 2 'notitievelden' die ik regelmatig wijzig (kolom B en C), en als er een wijziging heeft plaatsgevonden dan moet automatisch de corresponderende timestamps worden geupdatet in kolom G en H.

Alvast bedankt.

EDIT: Ook zou ik graag weten hoe ik de code kan aanpassen naar de juiste kolommen in het oorspronkelijke bestand omdat deze kolommen niet overeenkomen.

Voorbeeld 'Opmerkingen' veld: Testbestand = kolom B, echte bestand = kolom AK
Voorbeeld 'Acties' veld: Testbestand = kolom C, echte bestand = kolom AL
Voorbeeld 'Timestamp Opmerkingen' veld: Testbestand = kolom G, echte bestand = kolom AR
Voorbeeld 'Timestamp Acties' veld: Testbestand = kolom H, echte bestand = kolom AS
 
Laatst bewerkt:
Oke zal eens kijken

Zo dan?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
 With Me.ListObjects(1)
    If Not Intersect(Target, .DataBodyRange) Is Nothing And Target.Count = 1 Then
       .DataBodyRange(Target.Row - 1, 7).Offset(, - (Target.Column = 38)) = Now
   End If
 End With
Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Oke zal eens kijken

Zo dan?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
 With Me.ListObjects(1)
    If Not Intersect(Target, .DataBodyRange) Is Nothing And Target.Count = 1 Then
       .DataBodyRange(Target.Row - 1, 7).Offset(, - (Target.Column = 38)) = Now
   End If
 End With
Application.EnableEvents = True
End Sub

Als ik deze probeer kreeg ik foutmeldingen in het eerste testbestand. In de 2e worden de verkeerde cellen gewijzigd ivm afwijkende kolommen. Is het mogelijk om de code op het 2e testbestand te baseren?
 
Dat komt omdat je tabel veel groter is dan in het voorbeeld, hierbij de aanpassing

Edit: eerste check in de intersect was nog niet aangepast

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
 With Me.ListObjects(1)
    If Not Intersect(Target, .ListColumns(37).DataBodyRange.Resize(, 2)) Is Nothing And Target.Count = 1 Then
       .DataBodyRange(Target.Row - 1, [COLOR="#FF0000"]44[/COLOR]).Offset(, -(Target.Column = 38)) = Now
   End If
 End With
Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Als je binnen de tabel blijft maakt het niet uit waar de tabel staat.

Kolommen invoegen aan de linkerkant of rijen boven de tabel invoegen is geen probleem.

* Geen kolommen invoegen tussen de twee kolommen ". Opmerkingen" en ". Acties" en die twee kolomnamen niet wijzigen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With ListObjects(1)
 If Not Intersect(Target, .ListColumns(".    Opmerkingen").DataBodyRange.Resize(, 2)) Is Nothing And Target.Count = 1 Then
   Application.EnableEvents = False
    .DataBodyRange(Target.Row - .Range.Row, .ListColumns(".    Opmerkingen (laatste wijziging)").Index).Offset(, -(.Range(1, Target.Column - (.Range(1, 1).Column - 1)) = ".    Acties")) = Now
   Application.EnableEvents = True
 End If
End With
End Sub
 
Beiden erg bedankt voor de hulp, het werkt nu perfect in het oorspronkelijke bestand!
 
Mooizo!:thumb: graag gedaan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan