Datumstämpel med kryssruta i Excel
Datumstämpel med kryssruta – så får du datumet att stanna kvar
I en kort video visade vi nyligen hur du kopplar ihop en kryssruta med en automatisk datumstämpel i Excel – med en OM-formel och funktionen IDAG (eller NU, om du även vill ha med klockslag). Kryssar du i rutan visas dagens datum, och kryssar du ur försvinner det igen. Smidigt och fullt tillräckligt i många lägen.
IDAG och NU är dock flyktiga funktioner som räknas om varje gång arbetsboken öppnas. Datumet visar därför alltid dagens datum – inte den dag då raden faktiskt klarmarkerades. Vill du i stället ha en stämpel som ligger kvar, en riktig logg över när något blev klart, behöver datumet skrivas in som ett fast värde. Så här gör du.
Lösningen: ett fast datum med lite VBA
Knepet är att låta Excel skriva in ett fast datum i samma stund du kryssar i rutan – och sedan låta det vara. Det klarar ingen formel, men det går utmärkt med en kort bit VBA.
Utgångsläget är en vanlig Exceltabell med två kolumner: en kolumn Klar med kryssrutor, och en kolumn Datum. (I mitt exempel heter tabellen tbl_Tabellnamn – byt det mot namnet på din egen tabell.)
Koden lägger du i kodmodulen för själva bladet, eftersom den ska reagera på när något ändras just där:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tbl As ListObject
Dim klarKol As Range, datumKol As Range
Dim traff As Range, cell As Range, dCell As Range
' Hämta tabellen på det här bladet
On Error Resume Next
Set tbl = Me.ListObjects("tbl_Tabellnamn")
On Error GoTo 0
If tbl Is Nothing Then Exit Sub
' Datakolumnerna (utan rubrikrad)
Set klarKol = tbl.ListColumns("Klar").DataBodyRange
Set datumKol = tbl.ListColumns("Datum").DataBodyRange
If klarKol Is Nothing Or datumKol Is Nothing Then Exit Sub
' Berör ändringen kolumnen Klar?
Set traff = Intersect(Target, klarKol)
If traff Is Nothing Then Exit Sub
On Error GoTo Aterstall
Application.EnableEvents = False
For Each cell In traff.Cells
Set dCell = Intersect(cell.EntireRow, datumKol)
If Not dCell Is Nothing Then
If cell.Value = True Then
dCell.Value = Date ' Statiskt dagens datum – uppdateras aldrig av sig självt
Else
dCell.ClearContents ' Rensar datumet när rutan kryssas ur
End If
End If
Next cell
Aterstall:
Application.EnableEvents = True
End Sub
Så lägger du in koden
- Tryck Alt+F11 för att öppna VBA-editorn.
- Dubbelklicka på rätt blad under Microsoft Excel Objects i projektträdet till vänster – det är viktigt att koden hamnar i bladets modul, inte i en vanlig modul.
- Klistra in koden.
- Spara arbetsboken som Excel-makroaktiverad arbetsbok (.xlsm). En vanlig .xlsx kan nämligen inte spara makron.
Hur det fungerar
Koden använder händelsen Worksheet_Change, som körs automatiskt varje gång ett värde ändras på bladet – och en kryssruta som växlar mellan i- och urkryssad ändrar just ett cellvärde (SANT eller FALSKT). Skriptet kontrollerar om ändringen skedde i kolumnen Klar. Blev rutan ikryssad skrivs dagens datum in med VBA-funktionen Date, som ger ett statiskt datum utan klockslag.
Eftersom det är ett vanligt värde och inte en formel ligger datumet kvar – oavsett hur många dagar som kommer och går. Kryssar du ur rutan rensas datumet igen.
Två enkla varianter om du vill ändra beteendet:
- Vill du även ha med klockslag, byt Date mot Now.
- Vill du att datumet ska ligga kvar även efter att du kryssat ur, ta bort raden med ClearContents.


Kundanpassade kurser

