Print side | Luk vindue

Log Old and New cell Value

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=1869
Udskrevet den: 04.Feb.2025 kl. 06:57


Emne: Log Old and New cell Value
Besked fra: zpjj
Emne: Log Old and New cell Value
Posteringsdato: 18.Nov.2014 kl. 19:19

Hej

Jeg er ved at lave en simpel ”log”, hvor der logges forskellige ting fra mit EXCEL ark.

Jeg vil gerne logge ændringer i celler, både tal og tekst. Dvs. Old value og New value

Det jeg har lavet indtil videre fungerer i princippet udmærket og gør det jeg vil have det til, men problemet er at hvis jeg ”stresser” det lidt, ved at dobbelt clicke i forskellige celler hurtigt efter hinanden kommer der er en ”Run time error  ’1004’ Method ’Undo’_Application’ failed”.

Det har selvfølgelig noget med  Application.Undo at gøre.

Jeg har prøvet forskellige ting, men uden større held L

Hvis der er nogen her, som kan hjælpe, vil jeg være meget taknemlig.

Vedhæfter lige hvad der er lavet.

Mvh.

Peter

Jeg bruger EXCEL 2010

uploads/856/LOGPJJTest1.xlsm" rel="nofollow - uploads/856/LOGPJJTest1.xlsm

-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010



Svar:
Besked fra: Allan
Posteringsdato: 19.Nov.2014 kl. 09:30
Hej Peter,
 
Idéen med Application.Undo er egentlig meget godt tænkt, men i praksis er det ikke særlig god programmering.
 
Her er en løsning som jeg selv bruger i min log (som du i øvrigt finder her https://www.excel-regneark.dk/?pageIDX=185" >https://www.excel-regneark.dk/?pageIDX=185 )
Ved at foretage nedenstående rettelser vil det virke.
 
I toppen af THISWORKBOOK indsætter du denne kodestump.
 
Public oldVal As Variant
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Name <> "LogDetails" Then
    If ActiveCell.Address <> Target.Address Then Exit Sub
    oldVal = Target.Value
End If
End Sub
 
Koden gør i sin enkelthed det, at hver gang du aktiverer en celle, erklæres dens værdi som oldVal
Så behøver du ikke Application.Undo længere.
 
I din Workbook_SheetChange event, skal du derfor fjerne disse 3 linjer
 
Application.Undo
oldVal = Target.Value
Target = NewVal
 
Her er filen inkl ovenstående rettelser: uploads/1/LOGPJJTest1_Allan.xlsm - uploads/1/LOGPJJTest1_Allan.xlsm
 
//Allan


Besked fra: EXCELGAARD
Posteringsdato: 20.Nov.2014 kl. 08:37
Hvis jeg må tillade mig, at komme med lidt indspark...

Jeg er helt enig med Allan, at .Undo ikke er særlig effektiv - ideen er god, men i praksis har .Undo alt for mange 'short commings', og jeg er selv gået helt væk fra at benytte den...
...rent faktisk er selv .SendKeys med [CTRL] + [Z] bedre end .Undo, selvom .SendKeys heller ikke er at anbefale!

Jeg har selv et log eksempel liggende på min hjemmeside, som måske også kan inspirerer dig:
www.excelgaard.dk/Bib/Logning/ www.excelgaard.dk/Bib/Logning/



-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.



Print side | Luk vindue