Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Undo efter makro

 Besvar Besvar
Forfatter
ErnstJ Se dropdown
Forum Begynder
Forum Begynder


Medlem: 04.Dec.2022
Land: Danmark
Status: Offline
Point: 9
Indlæg funktioner Indlæg funktioner   Tak (0) Tak(0)   Citér ErnstJ Citér  BesvarSvar Direkte link til dette indlæg Emne: Undo efter makro
    Sendt: 08.Nov.2023 kl. 09:35
Jeg har lavet en makro som kan bruges til at paste værdier efter en copy (Cmd+C). 
Koden ser sådan ud:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
og aktiveres ved ctrl+skift+v.
Det fungerer fint - men efter den er udført kan jeg ikke fortryde med en Undo ligesom jeg kan hvis jeg laver pasten manuelt.
Er det muligt at få denne Undo til at fungere efter brug af makroen?
Jeg kører Excel på nyeste MacOS Sonoma version og nyeste Excel til Mac.
Til top



Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5417
Indlæg funktioner Indlæg funktioner   Tak (0) Tak(0)   Citér EXCELGAARD Citér  BesvarSvar Direkte link til dette indlæg Sendt: 08.Nov.2023 kl. 10:30
Kørsel af makroer nulstiller 'UnDo' stakken, og man kan derfor ikke foretage 'UnDo' af hændelser fra før makroen (eller selve makroen).
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.
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 574
Indlæg funktioner Indlæg funktioner   Tak (0) Tak(0)   Citér maxzpad Citér  BesvarSvar Direkte link til dette indlæg Sendt: 09.Nov.2023 kl. 09:08
Du kan designe din makro til at tilbyde noget, der minder om Undo, jf. nedenstående.

Sub sub_undo()
    'Array til det markerede områdes værdier FØR xlPasteValue
    Dim arr_values As Variant
    With Selection
        'Læg områdets eksisterende værdier i array
        arr_values = .Value
        'Indsæt de kopierede værdier i området
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        'Tilbyd muligheden for at fortryde
        If MsgBox("Vil du fortryde?", vbYesNo + vbQuestion, "Fortryd indsættelse af værdier?") = vbYes Then
            'Hvis der svares ja, skrives oprindelige værdier tilbage i området
            .Value = arr_values
        End If
    End With
End Sub
Til top
H_sønderskov Se dropdown
Sølv bruger
Sølv bruger
Avatar

Medlem: 18.Okt.2022
Land: Danmark
Status: Offline
Point: 140
Indlæg funktioner Indlæg funktioner   Tak (0) Tak(0)   Citér H_sønderskov Citér  BesvarSvar Direkte link til dette indlæg Sendt: 09.Nov.2023 kl. 12:21
Sub sub_undo()
Det virker næsten, men hvis værdierne kommer fra formler, vil kun værdierne komme tilbage, ikke formlerne.
Men hvis du lukker excel og trykker gem ikke vil du Undo alt hvad du har lavet.
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 574
Indlæg funktioner Indlæg funktioner   Tak (0) Tak(0)   Citér maxzpad Citér  BesvarSvar Direkte link til dette indlæg Sendt: 09.Nov.2023 kl. 12:53
H_sønderskov - ja, jeg var også inde over den tanke fra start, men gik bort fra den igen, fordi jeg ikke syntes, det ville give mening at overskrive formler med værdier fra et andet kopieret område. Og så igen - så ved vi jo ikke nøjagtigt, hvad det er, som tråd-starter kopierer, og hvorfor han indsætter værdierne i et område, han bagefter vælger (jf. Selection).

Løsningen kan dog være at gemme formler i stedet for værdier i array'et: arr_values = .FormulaR1C1
Det vil virke for både formler og statiske værdier.
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk