Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 69163 Skopiuj do schowka Obsługa zależnych zdarzeń Change i SelectionChange
Autor Wiadomość
Maciej Gonet 
Excel Expert


Wersja: Win Office 2016
Pomógł: 2033 razy
Posty: 6431
Wysłany: 01-11-2020, 08:18   

Bardzo dziękuję za dalsze zaangażowanie. Wydawałoby się, niezbyt skomplikowany problem, a tak trudno go rozwiązać. Nie miałem dość czasu, aby zrozumieć dokładnie logikę tego rozwiązania, a jest ona już dość złożona.
Działa już prawie dobrze, ale dostrzegłem jeszcze jeden mankament: jeśli w programie obsługi zdarzenia Change nie ma poleceń zmiany selekcji, powinna być obsłużona standardowa selekcja wynikająca z ustawień programu, a w tej chwili obsługa tej selekcji jest pomijana.
I jeszcze drobna sugestia uproszczenia zapisu - zamiast:
Kod:
VBA.Replace(targetRange.Address, "$", vbNullString)
można napisać:
Kod:
targetRange.Address(0, 0)
ID posta: 394399 Skopiuj do schowka
 
 
Rafał B.
Stały bywalec Excelforum



Wersja: Win Office 2016
Pomógł: 36 razy
Posty: 253
Wysłany: 01-11-2020, 10:29   

Maciej Gonet napisał/a:
Bardzo dziękuję za dalsze zaangażowanie. Wydawałoby się, niezbyt skomplikowany problem, a tak trudno go rozwiązać.

Też mnie to zadziwia...
Cytat:
Działa już prawie dobrze, ale dostrzegłem jeszcze jeden mankament: jeśli w programie obsługi zdarzenia Change nie ma poleceń zmiany selekcji, powinna być obsłużona standardowa selekcja wynikająca z ustawień programu, a w tej chwili obsługa tej selekcji jest pomijana

Nie wiem czy dobrze rozumiem
1. jeśli Enter przenosi do nowej komórki, a w _Change nie zmieniamy selekcji,
to ma być to automatyczne zdarzenie _SelectionChange wynikające z Entera obsłużone?
2. I drugie pytanie: jak wpisujemy coś w A1 (kursor mruga, jesteśmy cały czas w trybie edycji) i klikniemy na B5-ma być makro w SelectionChange wyzwolone czy pominięte?
Czy też ma się zachować analogicznie do przykładu z Enterem (czyli wyzwolone tylko jeśli nie było zmiany selekcji w zdarzeniu _Change)?

BTW ten kod ma jeszcze jeden mankament, pomija jedno ze zdarzeń _SelectionChange w pewnym przypadku powrotu do edytowanej komórki, niestety zauważyłem dopiero po wrzucenia na forum. Raczej nie skupiałbym się na analizie tego kodu, bo jest mało przejrzysty (co znalazłem błąd, to łatałem zamiast zmieniać całą logikę). Ale ogólnie po tej próbie wydaje się, że sposób z użyciem obiektu przechwytującego (zmienna WithEvents) zdarzenia arkusza możne przynieść sukces w rozwiązaniu zadanego problemu nazwijmy to w "klasycznym" stylu.

Cytat:
I jeszcze drobna sugestia uproszczenia zapisu
Faktycznie, nigdy jakoś nie spojrzałem na argumenty .Address, dzięki. Nawet boolean można tam wpisać, żeby uniknąć implicite rzutowania, chociaż to już kwestia bardziej preferencji w czytelności kodu :-)
_________________
Jest niemal niemożliwe nauczenie dobrego programowania uczniów, którzy byli narażeni na kontakt z BASIC: jako potencjalni programiści są okaleczeni, bez nadziei na poprawę. (Edsger Dijkstra, pionier informatyki).
Po części dotyczy również VBA.
ID posta: 394400 Skopiuj do schowka
 
 
Maciej Gonet 
Excel Expert


Wersja: Win Office 2016
Pomógł: 2033 razy
Posty: 6431
Wysłany: 01-11-2020, 17:27   

Wydaje mi się, że intencję dobrze zrozumiałeś.
Jeśli w toku obsługi zdarzenia Change nie występuje zmiana selekcji, to należy obsłużyć to tak jak normalnie zachowuje się Excel, to znaczy przy zatwierdzaniu klawiszem Enter, Tab, Shift+Tab lub klawiszem strzałki (po wcześniejszym F2) powinno być obsłużone zdarzenie SelectionChange, zgodnie z wyborem użytkownika. Podobnie po kliknięciu myszką w dowolną komórkę (inną niż zmieniana). Jedynie przy zatwierdzaniu myszką w polu "Wpis" nie ma SelectionChange.
Dotyczy to arkusza niechronionego. Przy arkuszu chronionym zachowanie Excela jest czasem dziwne, ale tym już bym się nie przejmował.
Natomiast jeśli w toku obsługi zdarzenia Change występuje programowa zmiana selekcji, to należy ją obsłużyć priorytetowo, ignorując ewentualne zmiany selekcji związane ze sposobem zatwierdzenia zmiany Change.
ID posta: 394406 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe