11. august 2021 - 09:28 Der er 2 kommentarer

Ændring af celler i Excel

Hej:)
Hvordan ser jeg, hvornår en celle sidst er blevet ændret i Excel?
Avatar billede jens48 Ekspert
11. august 2021 - 11:37 #1
Med denne makro kan du sætte en note ind om hvad der er ændret, hvem der har gjort det og hvornår

Private Sub Worksheet_Change(ByVal Target As Range)
Dim User As String, stOldText As String
'**********************************************************************
'Disse 3 linier kan slettes hvis man ønsker at kommenteringen skal
'ske på alle celler i arket.
'Ellers skal man ændre linien Set rng = range("A1:K100") til det
'område man ønsker at kommentering skal ske i.
Dim Rng As Range
Set Rng = Range("A1:K100")
If Intersect(Target, Rng) Is Nothing Then Exit Sub
'**********************************************************************
        User = Target.Value & " : " & (Environ("Username") & "  :  " & Now())
        On Error Resume Next
        If IsError(stOldText = Target.Comment.Text) = True Then
            Target.AddComment User
        Else
            stOldText = Target.Comment.Text
            Target.Comment.Text Text:=stOldText & vbLf & User
        End If
        Target.Comment.Shape.TextFrame.AutoSize = True
End Sub

Hvis du ikke ønsker, at det skal stå i selve cellen, kan du forskyde noten til en skjult kolonne. Eksemplet herunder forskyder det 26 kolonner, så noten for kolonne A kommer i kolonne AA

Private Sub Worksheet_Change(ByVal Target As Range)
Dim User As String, stOldText As String
'**********************************************************************
'Disse 3 linier kan slettes hvis man ønsker at kommenteringen skal
'ske på alle celler i arket.
'Ellers skal man ændre linien Set rng = range("A1:K100") til det
'område man ønsker at kommentering skal ske i.
Dim Rng As Range
Set Rng = Range("A1:K100")
If Intersect(Target, Rng) Is Nothing Then Exit Sub
'**********************************************************************
        User = Target.Value & " : " & (Environ("Username") & "  :  " & Now())
        On Error Resume Next
        If IsError(stOldText = Target.Comment.Text) = True Then
            Target.Offset(0, 26).AddComment User
        Else
            stOldText = Target.Comment.Text
            Target.Offset(0, 26).Comment.Text Text:=stOldText & vbLf & User
        End If
        Target.Offset(0, 26).Comment.Shape.TextFrame.AutoSize = True
End Sub
Avatar billede jens48 Ekspert
16. august 2021 - 10:15 #2
Der var fejl i den sidste del (makroen med forskydning af noterne). Den burde se sådan ud:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim User As String, stOldText As String
Dim Rng As Range
Set Rng = Range("A1:K100")
If Intersect(Target, Rng) Is Nothing Then Exit Sub
        User = Target.Value & " : " & (Environ("Username") & "  :  " & Now())
        On Error Resume Next
        If IsError(stOldText = Target.Offset(0, 26).Comment.Text) = True Then
            Target.Offset(0, 26).AddComment User
        Else
            stOldText = Target.Offset(0, 26).Comment.Text
            Target.Offset(0, 26).Comment.Text Text:=stOldText & vbLf & User
        End If
        Target.Offset(0, 26).Comment.Shape.TextFrame.AutoSize = True
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel-kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester