Ogólnie jeśli chcesz Twoje makro ruszy arkusz, czy też dane w komórkach, to również wyczyści bufor cofania i nie będziesz mógł cofnąć, ani czynności, które wykonało makro, ani czynności, które wcześniej wykonywałeś — Ctrl + Z nie zadziała.
Jeśli Twoje makro nie rusza arkusza, np: wyświetla komunikat za pomocą funkcji Msgbox, to bufor cofania nie jest czyszczony i dalej możesz cofnąć swoje wcześniejsze czynności za pomocą skrótu klawiszowe.
Niektórzy chcieliby móc cofać swoje makra, dlatego został stworzony kod, który wykorzystuje pewną sztuczkę, a mianowicie w swoim makrze na samym jego początku dodajesz linijkę kodu, która zapisuje Twój plik:
ActiveWorkbook.Save
Następnie jeśli Twoje makro zadziałało niepoprawnie uruchamiasz makro, które powinieneś przechowywać w innym pliku np: skoroszycie makr osobistych, które pobiera nazwę Twojego pliku (aktywnego pliku), zamyka go bez zapisywania, a następnie ponownie uruchamia:
Sub Cofanie() Dim AktualnyArkusz As String 'Zapisujemy nazwę aktywnego skoroszytu/pliku AktualnyArkusz = ActiveWorkbook.FullName 'zamykamy go bez zapisywania zmian ActiveWorkbook.Close SaveChanges:=False 'ponownie go otwieramy Workbooks.Open Filename:=AktualnyArkusz End Sub
Czyli symuluje to co musiałbyś zrobić ręcznie, żeby odzyskać swoje dane 😉
Pozdrawiam
Adam Kopeć
Miłośnik Excela
Ciekawy temat, ale rozwiązanie dotyczy jedynie zmian wprowadzonych przez makro. Chciałbym móc cofnąć zwykłe operacje, nie tylko te które realizuje marko. Moje marko jedynie ukrywa lub odkrywa wiersze arkusza, a i tak bufor cofania jest całkowicie czyszczony.
Niestety większość kodu VBA czyści całkiem bufor cofania 🙁