Monika R.

Monika R. Product Owner, Ocado
Technology

Temat: możliwość cofania prostego makra

Hej,

Post o najczęściej używanych skrótach klawiszowych przypomniał mi mój mały problemik z makrami. Zarejestrowałam sobie kilka makr przypisanych do moich własnych skrótów klawiszowych. To takie proste makra w stylu: wklej wartości czy autofiltr.
Uwielbiam je, bo cały czas właściwie pracuję na skrótach. Jest tylko jeden mały mankament: nie da się ich cofać (oprócz autofiltru - ten działa w dwie strony).

Czy można dopisać coś do takiego makra, aby miało możliwość cofnięcia po naciśnięciu standardowego ctrl+z?
Proszę o odpowiedzi w języku polskim ;-P gdyż nie jestem doświadczonym pisarzem makr.
Tomasz K.

Tomasz K. Biegły rewident,
Manager w Dziale
Audytu i Doradztwa
Gosp...

Temat: możliwość cofania prostego makra

..tez chetnie uzyskam odpowiedz na pytanie zadane przez Monike i podobnie jak ona prosze o odpowiedz w j.polskim nie swahili;)

pozdrawiam
TK
Andrzej R.

Andrzej R. analityk, Agora SA

Temat: możliwość cofania prostego makra

John Walkenbach podaje kod w swoich książkach..
Są też jeśli dobrze pamiętam którymś addinie
Ogólnie dla prostych makr mało przydatne /ale to może być tylko moje zdanie/Andrzej R. edytował(a) ten post dnia 29.01.08 o godzinie 09:39
Paweł Jurczak

Paweł Jurczak Kontroler finansowy

Temat: możliwość cofania prostego makra

koncepcja opiera się o stworzenie tablicy 2 wymiarowej w której 1 wymiar to stara wartosc zmienianej komorki, a 2 wymiar to adres zmienianej komorki....
tablica musi oczywiscie po skonczeniu makra pamietac wartosci, czyli trzeba by jako globalną zmienną zadeklarowac
Monika R.

Monika R. Product Owner, Ocado
Technology

Temat: możliwość cofania prostego makra

Andrzej R.:
John Walkenbach podaje kod w swoich książkach..
Są też jeśli dobrze pamiętam którymś addinie
Ogólnie dla prostych makr mało przydatne /ale to może być tylko moje zdanie/Andrzej R. edytował(a) ten post dnia 29.01.08 o godzinie 09:39

Wiesz, może się wydawać mało przydatne, ale nie chciałbyś zobaczyć mojej miny (albo być pod ręką), kiedy w na różne sposoby "obrabianym" i "przerabianym" pliku wklejam sobie wartości nie w to miejsce, co powinnam i nie mogę tego cofnąć, a nadpisane komórki odchodzą w niepamięć...
Nie muszę chyba dodawać, że nie mam w zwyczaju zapisywać pliku po każdej wykonanej operacji.

Oczywiście i na takie wydarzenia są rozwiązania - można zapisać plik pod inną nazwą i wydobyć utracone dane ze starego pliku, ale moje pytanie zadałam po to, aby tego uniknąć.

To taki mój, prozaiczny (i prosty), problem.
Monika R.

Monika R. Product Owner, Ocado
Technology

Temat: możliwość cofania prostego makra

Paweł Jurczak:
koncepcja opiera się o stworzenie tablicy 2 wymiarowej w której 1 wymiar to stara wartosc zmienianej komorki, a 2 wymiar to adres zmienianej komorki....
tablica musi oczywiscie po skonczeniu makra pamietac wartosci, czyli trzeba by jako globalną zmienną zadeklarowac

To by było na tyle, jeśli chodzi o pisanie po polsku :-)

Dziękuję za dobre chęci, ale nie bardzo mi to rozjaśnia sprawę...
Chodzi głównie o to, aby z prostego dwulinijkowego makra zrobić proste trzylinijkowe makro (o ile to możliwe) i aby ta trzecia linijka miała możliwość zastosowania do dowolnego obszaru komórek i dowolnego makra.
Andrzej R.

Andrzej R. analityk, Agora SA

Temat: możliwość cofania prostego makra

Monika to niestety jest po prostu skomplikowana sprawa. VBA tego nie uwzględnia. Oznacza to mniej więcej tyle - rejestrujesz każdą czynność jaką wykonuje makro z wszystkimi wartościami, formułami itd gdzieś w arkuszu dodatkowym.
Jeśli potrzebujesz powrót odbywa się to przez ich odczytanie
dla prostych np. kopiuj, wklej specjalnie - to po prostu bez sensu...
Przy jakichś skomplikowanych makrach /wiele czynności/ ok. Moim zdanie w jednym z addinów znajdziesz coś takiego - nie pamiętam w którym :(

Za ten uśmiech wszystko /chyba każdy/. Wpisz dwie linie, a dodatkowe kilka zaraz ktoś dopisz. Tyle, że to będzie tylko to jedno makro /można przechować dane w zmiennych/, nie zaś uniwersalny cofacz do wszystkich ;)
Anna Chodkiewicz

Anna Chodkiewicz multitasking by
choice

Temat: możliwość cofania prostego makra

A może ugryźć problem z innej strony i w pliku personal.xls umieścić makro, które np. co 15 minut robiłoby kopię aktualnie używanego skoroszytu? W przypadku wpadki do "odrobienia" byłoby ok. 15 minut pracy. Czy to by Cię satysfakcjonowało?
Robert Domiński

Robert Domiński Szkolenia MS Excel

Temat: możliwość cofania prostego makra

Monika Wejsig:
i aby ta trzecia linijka miała możliwość zastosowania do dowolnego obszaru komórek i dowolnego makra.

Witam:)
Możesz na początku makra wstawić linijkę, która zapisze plik:

ActiveWorkbook.Save
Operacja 1
Operacja 2
...

Teraz makro przed wykonaniem "nieodwracalnych" operacji, dokona zapisu. Jeżeli zobaczysz że, stało coś się złego - zamykasz plik bez zapisywania zmian i otwierasz go w takim stanie, jakim był tuż przed wykonaniem operacji makra.

Oczywiście pamiętaj o kopiach zapasowych. Je zawsze warto co jakiś czas robić.

Powodzenia :)
R.
Paweł Jurczak

Paweł Jurczak Kontroler finansowy

Temat: możliwość cofania prostego makra

Wieczorem postaram się napisać kod z opisem......
ale w 1 linijce tego nie da rady zrobić.....
a najprościej by było gdybyś mogła przesłać najpierw kod swojego makra....
aha i cofanie będzie mogło działać tylko 1 stopniowo oczywiście (cofniesz tylko ostatnie wykonanie makra i nic więcej)
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: możliwość cofania prostego makra

Problemem Autorki nie jest niemożliwość "cofania makra", a ulatywanie danych po nierozważnym wciśnięciu skrótu.
Najprościej można zaradzić temu przez wstawienie w ciało makra komunikatu z dwoma przyciskami: [OK] i [Cancel].. Komunikat np: "Czy na pewno chcesz zrobić fikołka??" z odpowiednimi reakcjami... Chwila namysłu zwykle dobrze robi...;-))

Można także (razem z powyższym, lub rozłącznie) w ciało makra wstawić procedurę każdorazowo robiącą kopię obrabianego arkusza przed wykonaniem zasadniczej części makra...
I jedną, i drugą procedurę można zapisać jako osobne makro, żeby nie pisać kodu za każdym razem.. :-))
Monika R.

Monika R. Product Owner, Ocado
Technology

Temat: możliwość cofania prostego makra

Hej :-)

Dziękuję za wszystkie rady. Czuję się trochę, jakbym z igły robiła widły. A mi chodzi tylko o takie proste makro, które okazuje się wcale "nieproste".
Właśnie chciałabym móc cofać makro, a nie odzyskiwać dane. I tyle. Sposób z zapisywaniem arkusza za pomocą makra jest dobry i pewnie wykorzystam go do skomplikowanych makr złożonych z wielu operacji (zawsze warto zachować dane), autozapis oczywiście stosuję, ale tu nie o to kaman.
Myślałam, że to musi być coś prostego, skoro operacja jest taka prosta i standardowa w przypadku zwykłego "niemakrowego" wklejania i cofania.

Moje makro to np.

Sub Wartosci_Transpozycja()
' Wartosci_Transpozycja Makro
' Wkleja wcześniej skopiowane komórki jako wartości, po transpozycji
' Klawisz skrótu: Ctrl+d

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub

Możliwość cofania tej prostej operacji po prostu przyśpieszy mi pracę :-))
Robert Domiński

Robert Domiński Szkolenia MS Excel

Temat: możliwość cofania prostego makra

Monika Wejsig:
Hej :-)

Właśnie chciałabym móc cofać makro, a nie odzyskiwać dane. I tyle. Sposób z zapisywaniem arkusza za pomocą makra jest dobry i pewnie wykorzystam go do skomplikowanych makr złożonych z wielu operacji (zawsze warto zachować dane), autozapis oczywiście stosuję, ale tu nie o to kaman.

Moniko :)

Może to przez moje niewyspanie ale wciąż wydaje mi się, że sposób z zapisem da Ci dla makr praktycznie identyczne możliwości, jak CTRL+Z w przypadku zwykłych operacji (czyli szybkie cofanie).

1. Dzięki wklejeniu linijki: ActiveWorkbook.Save w każdym swoim makrze (na początku), przy każdorazowym uruchomieniu makra, będzie zapamiętywany stan arkusza.

2. Teraz potrzebujemy tylko makra, które ten stan szybko przywróci. Może to być np:

Sub Cofnij_makro()
' Klawisz skrótu: Ctrl+f
AktualnyArkusz = ActiveWorkbook.FullName
ActiveWorkbook.Close SaveChanges:=False
Workbooks.Open Filename:=AktualnyArkusz
End Sub

Powyższe makro zapamiętuje lokalizację otwartego pliku, zamyka go bez zachowania zmian i ponownie otwiera (bez zmian wykonanych przez makro). Makro to należy zapisać w "skoroszycie makr osobistych"

3. Teraz jeżeli po wykonaniu makra, wciśniesz kombinację CTRL + F, błyskawicznie zostanie przywrócony stan z przed wykonania makra, czyli de facto zostanie ono cofnięte.

Pamiętaj, że jeżeli przypadkiem naciśniesz skrót cofania makra a długo nie zapisywałaś pliku ani nie wykonywałaś innego makra (z linijką zapisu), powrócisz do stanu ostatniego zapisu pliku.

Może trochę pokrętnie opisane ale u mnie działa :)

R.
Paweł Jurczak

Paweł Jurczak Kontroler finansowy

Temat: możliwość cofania prostego makra

Znacznie lepszy (i przede wszystkim prostszy)jest ten sposób z zapisywaniem niż, ten o którym ja na początku mówiłem :-)
Monika R.

Monika R. Product Owner, Ocado
Technology

Temat: możliwość cofania prostego makra

Robert, bardzo dziękuję za to rozwiązanie. Zapisałam sobie i jutro wypróbuję na rzeczywistym przykładzie, bo dziś nie mam już siły.

Wiem, wiem, nazwiecie mnie marudą, ale muszę przyznać, że nie do końca o to mi chodziło. Ale widzę, że to jest na razie optymalne rozwiązanie. Wydaje mi się, że moje marzenie jest tak prościutkie, że nie istnieje... Bo jednak cofanie jednej operacji, a zapisywanie całego arkusza to nie to samo... Mam nadzieję, że nie zrozumiecie mnie źle, bo jestem wdzięczna za rozwiązanie, ale z natury jestem bardzo dociekliwa i czepiam się szczegółów...
Ciekawe, czy jak kiedyś (może wkrótce) nauczę się czegoś więcej o VBA, będę się śmiała z własnej ignorancji?

Moim zdaniem rozwiązanie Roberta jest dobre, ale głównie przy założeniu, że chcę zapisać cały arkusz dla możliwości cofnięcia jednej prostej operacji. Bo można sobie wykonywać różne operacje, cofać te wykonane "pomyłkowo", po czym przy końcu pracy stwierdzić, że wszystko poszło źle i jednak nie zapisać pliku lub zapisać go pod inną nazwą...

Ale już się nie czepiam :-)))
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: możliwość cofania prostego makra

Monika Wejsig:
(....) Wydaje mi się, że moje marzenie jest tak prościutkie, że nie istnieje... Bo jednak cofanie jednej operacji, a zapisywanie całego arkusza to nie to samo... Mam nadzieję, że nie zrozumiecie mnie źle, bo jestem wdzięczna za rozwiązanie, ale z natury jestem bardzo dociekliwa i czepiam się szczegółów...
Ciekawe, czy jak kiedyś (może wkrótce) nauczę się czegoś więcej o VBA, będę się śmiała z własnej ignorancji?

__________________

Niestety, cofanie jednej operacji jest - z punktu "widzenia" Excela - tożsame z przywróceniem stanu poprzedniego.
Excel podczas cofania zmian nie operuje na kawałku arkusza, a po prostu odtwarza poprzedni wygląd (i dane!) całego skoroszytu.
Excel różne rzeczy robi "dziwnie" (jak chociażby adresowanie względne...) - trzeba go brać z dobrodziejstwem inwentarza.
Sposób podany przez Roberta nie tylko rozwiązuje Twój problem (skoro nie o przypadkowe uruchomienie makra chodzi, a o zbadanie "co będzie, jeśli.."),ale robi to w zgodzie z "logiką" programu. Jest rozwiązaniem nie tylko skutecznym, ale i eleganckim.

Jeśli pogodzisz się z tym, że dla Excela - inaczej, niż dla Ciebie - cofanie jednej zmiany oznacza przywracanie całego świata, to będzie już po problemie....
Pozdrawiam.. ;-))
Agata G.

Agata G. Project Manager

Temat: możliwość cofania prostego makra

Cały ten wątek to w konkretnym przypadku wymyslanie koła za pomocą VBA ;-)

W Excelu jest wbudowany przycisk "Wklej wartości" (trzeba go tylko znalezc w Narzedziach i dodac do paska), a efekty jego uzycia sa calkowicie odwracalne. A makro do kosza. Powodzenia!Agata G. edytował(a) ten post dnia 02.02.08 o godzinie 10:20
Monika R.

Monika R. Product Owner, Ocado
Technology

Temat: możliwość cofania prostego makra

Janusz, pogodziłam się już z niedoskonałością Excela. I wiem, że szukałam dziury w całym, ale miałam nadzieję, że ktoś przypadkiem, będzie znał sposób na to moje rozwiązanie... A jak na razie korzystam z rozwiązania Roberta :-))

Agato,
Doskonale zdaję sobie sprawę z tego, że jest taki przycisk, jednak do używania go potrzebna jest myszka. Korzystanie ze skrótów z klawiatury znacznie skraca mój czas pracy i właściwie rzadko kiedy w Excelu sięgam po myszkę. Po co odrywać rękę od klawiatury?
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: możliwość cofania prostego makra

Monika Wejsig:
Janusz, pogodziłam się już z niedoskonałością Excela. I wiem, że szukałam dziury w całym, ale miałam nadzieję, że ktoś przypadkiem, będzie znał sposób na to moje rozwiązanie... A jak na razie korzystam z rozwiązania Roberta :-))

____________________

To nie jest "niedoskonałość Excela"...
To Ty żądasz, żeby w każdym samochodzie był zainstalowany joystick zamiast kierownicy, bo tak by Ci było wygodniej...Myślisz, że warto się upierać??
Marcin K.

Marcin K. Kredyty, back office

Temat: możliwość cofania prostego makra

Monika Wejsig:
Doskonale zdaję sobie sprawę z tego, że jest taki przycisk, jednak do używania go potrzebna jest myszka. Korzystanie ze skrótów z klawiatury znacznie skraca mój czas pracy i właściwie rzadko kiedy w Excelu sięgam po myszkę. Po co odrywać rękę od klawiatury?

Nie ma potrzeby. Wystarczy Alt+e, potem s, potem r i Enter. Myszka jest zbędna.



Wyślij zaproszenie do