Używanie makr to dla zaawansowanego użytkownika Excela chleb powszedni. Makra stosujemy przede wszystkim do odświeżania raportów, edycji danych czy zarzadzania skoroszytami. To prostsze zastosowania. Te najbardziej zaawansowane to samodzielne programy, które pozwalają na stworzenie z Excela zupełnie nowej i dostosowanej pod nasze potrzeby aplikacji. Choć uwielbiamy je za to, że wykonują za nas masę pracy to czasami potrafią nam wiele napsuć. Co wtedy zrobić? Jak cofnąć makro? Jest tylko jeden sposób.
Kiedy chcemy cofnąć makro?
Efekt działania makra chcemy cofnąć dwóch sytuacjach. Pierwsza występuje w sytuacji, gdy makro działa źle. Np. w niepoprawny sposób przekształca dane. W takiej sytuacji zepsuliśmy sobie dane lub arkusz/skoroszyt. Druga sytuacja to, gdy uruchomiliśmy makro w nieodpowiednim czasie. Np. nasze makro przenosi część danych albo filtruje dane. Zamiast ręcznie odtworzyć stan pierwotny lepiej byłoby po prostu użyć skrótu Ctrl+Z. Ale czy się da?
Kiedy możemy cofnąć makro?
Niestety lista sytuacji, kiedy można cofnąć makro nie jest długa. Jeśli tylko makro w jakikolwiek sposób, nawet w minimalnym stopniu spowoduję edycję dowolnego otwartego skoroszytu to już nie możemy cofnąć zmian. Tak więc nawet zmiana koloru czcionki zablokuje nam tę możliwość.
Makra po których możemy cofać zmiany w Excelu to te nieingerujące w skoroszyt. W zasadzie możemy wskazać dwa typy takich makr. Pierwsze to makra, które tylko wyświetlają jakieś komunikaty i informacje. Może to być informacja o ilości danych, sprawdzenie stanu skoroszytu czy wyświetlenie informacji, ile czasu zostało nam do końca pracy.

Drugi rodzaj makr to te, które w ogóle nie działają na otwartych skoroszytach. Takie makra mogą przenosić pliki, usuwać je, zmieniać ich nazwy itp. Choć przechowywane w Excelu to w zasadzie nie potrzebują go, aby wykonać swoje zadania. Jak widać sytuacji, kiedy makra nie blokują nam możliwości cofania wprowadzonych zmian nie jest zbyt wiele
Jak cofnąć makro, które wyłączyło możliwość cofania zmian w Excelu?
W zasadzie jest tylko jeden sposób, aby cofnąć to co zmieniło makro, ale można to wykonać ręcznie lub sobie zautomatyzować. W obu przypadkach pierwsze i najważniejsze co należy zrobić to zapisanie skoroszytu zanim uruchomimy makro. Warto o ten krok zadbać w samym kodzie makra, aby pierwszym wykonywanym poleceniem było zapisanie zmian w odpowiednich skoroszytach (jeśli pracuje na kilku).
Drugi w ostatni krok to po prostu zamknięcie skoroszytu, na którym wprowadzono niepożądane zmiany i otwarcie go ponownie. Teoretycznie cały sposób jest skrajnie prosty, ale jeśli nie pomyślimy o pierwszym kroku to często musimy odtwarzać sporą część wykonanej wcześniej pracy.
Automatyzacja drugiego kroku
Jeśli często używamy makr albo jesteśmy w fazie testowania makra, gdy je budujemy, to ciągłe zamykanie i otwieranie skoroszytu nie jest zbyt efektywnym wykorzystaniem czasu. To zadanie warto sobie zautomatyzować przez inne makro. Takie makro dodajemy do skoroszytu makr osobistych, o którym przeczytasz w tym wpisie Skoroszyt makr osobistych . Najlepiej też do niego przypisać sobie skrót klawiaturowy.
Makro potrzebuje tylko jedną zmienną. Musi pobrać nazwę skoroszytu wraz z pełną ścieżką, na którym jest uruchamiane. Następnie musi zamknąć ten skoroszyt bez zapisywania zmian. W ostatnim kroku wystarczy, że ponownie otworzy ten skoroszyt.

Poniżej zamieszczam kod VBA makra.
Podsumowanie
Możliwości makr są prawie nieograniczone, ale jak wszystko mają jakieś swoje wady. Wiele moich makr działało na wielu plikach, przekształcając dziesiątki arkuszy czy miliony komórek. Trudno aby w takich przypadkach była możliwość cofnięcia takich zmian. Jak widać jedynym rozwiązaniem jest posiadanie zapisanej wersji pliku sprzed uruchomienia makra. Warto pamiętać o dodawaniu do makra na samym początku polecenia zapisania zmian w pliku, a dopiero potem wprowadzać przekształcenia. Podane makro za to zaoszczędzi nam sporo czasu na ponownym uruchamianiu pliku.
Zobacz też
Sławek, kawał dobrej roboty.
Super wpis! Kolejna dawka wiedzy.
Cieszę się bardzo, z każdym tygodniem będzie tego więcej 🙂
Witam.
Jestem całkiem zielony jeśli chodzi o makra. Dopiero zaczynam.
Mam pewien pomysł, pewnie nie będzie miał uniwersalnego zastosowania, ale może?
Właśnie staram się rozwiązać problem z makrem „usuń” które usuwa dane z pewnej tabeli. Co zrobić aby zachować te dane na wszelki wypadek?
Dodałem do makra „usuń” następujący proces. Do roboczego arkusza „schowek” kopiuję dane z usuwanej tabeli. W przypadku chęci cofnięcia działania makra „usuń”uruchamiam makro „cofnij” które dane ze „schowka” kopiuje z powrotem do tabeli. Problem jednak pojawia się gdy ktoś nieopacznie naciśnie dwa razy „usuń”, bo wtedy w „schowku” mamy kopie już pustej tabeli. Aby i ten problem rozwiązać zmodyfikowałem dodatkowy proces w makrze „usuń” polegający na tworzeniu kopii arkusza „schowek” z już wstawionymi danymi. Tak więc jeśli ktoś dwa razy pod rząd uruchomi makro „usuń” to powstaną dwie kolejne kopie arkusza „schowek”, schowek(1) oraz schowek(2). W (1) będziemy mieli nasze dane a w (2) już kopie pustej tabeli.
Nic wyszukanego i wymagające dopracowania, ale mi wystarczy aby w razie czego odzyskać dane.
Pozdrawiam
Cześć, jeśli chcemy zabezpieczyć się przed utratą lub uszkodzeniem danych to najlepiej robić ich kopię. Problem nadal występuje gdy uszkodzona kopia nadpisuje poprawną kopię. Dlatego w tym przypadku proponowałbym zamiast zapisywać dane w osobnym arkuszu to kopiować je do nowego skoroszytu i zapisywać jako odrębny plik z datą i godziną w nazwie. Wtedy zawsze mamy kopię zapasową danych, łatwą do określenia i przywrócenia. W VBA zrobisz to bez problemu.