Print side | Luk vindue

Undo efter makro

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=5006
Udskrevet den: 09.Maj.2024 kl. 07:45


Emne: Undo efter makro
Besked fra: ErnstJ
Emne: Undo efter makro
Posteringsdato: 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.



Svar:
Besked fra: EXCELGAARD
Posteringsdato: 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.


Besked fra: maxzpad
Posteringsdato: 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


Besked fra: H_sønderskov
Posteringsdato: 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.


Besked fra: maxzpad
Posteringsdato: 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.



Print side | Luk vindue