ID tematu: 69163
 |
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
|
|
|
 |
|
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
|
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
|
 |
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
|