ID tematu: 69163
 |
Obsługa zależnych zdarzeń Change i SelectionChange |
Autor |
Wiadomość |
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2036 razy Posty: 6436
|
Wysłany: 18-10-2020, 23:50 Obsługa zależnych zdarzeń Change i SelectionChange
|
|
|
Analizując kod z innego wątku spotkałem się z problemem ogólniejszej natury, który może zainteresować szersze grono czytelników. Chodzi o równoczesną obsługę zdarzeń Change i SelectionChange. Nie zawsze pamiętamy, że gdy wzbudzane jest zdarzenie Change równocześnie z nim aktywowane jest zdarzenie SelectionChange, lecz jego obsługa jest odłożona aż do zakończenia obsługi zdarzenia Change. Jeżeli w trakcie obsługi zdarzenia Change spowodujemy kolejne zdarzenie SelectionChange, ono zostanie obsłużone od razu. Może to spowodować niekorzystne skutki uboczne, bo już po zmianie komórki aktywnej będzie obsługiwane zdarzenie odnoszące się do poprzedniego adresu.
Aby zablokować niepożądane wykonanie "nieaktualnego" zdarzenia SelectionChange można zastosować zmienną logiczną o charakterze flagi, ustawianą na końcu obsługi zdarzenia Change.
A oto prosty przykład kodu:
Kod: | Option Explicit
Dim niepowtarzaj As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Zmiana " & Target.Address
Target.Offset(2).Activate
niepowtarzaj = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If niepowtarzaj Then niepowtarzaj = False: Exit Sub
MsgBox "Selekcja " & Target.Address
End Sub |
W przykładowym skoroszycie w Arkuszu1 wariant bez zmiennej pomocniczej, a w Arkuszu2 z tą zmienną. Proszę sobie przetestować kolejność wzbudzania zdarzeń w obu przypadkach.
Change_SelChange.xlsm
|
Pobierz Plik ściągnięto 23 raz(y) 15.05 KB |
|
|
 | ID posta:
393881
|
|
|
 |
|
|
|
Rafał B.
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 36 razy Posty: 255
|
Wysłany: 19-10-2020, 14:05
|
|
|
Cytat: | Nie zawsze pamiętamy, że gdy wzbudzane jest zdarzenie Change równocześnie z nim aktywowane jest zdarzenie SelectionChange, lecz jego obsługa jest odłożona aż do zakończenia obsługi zdarzenia Change. |
Raczej nie jest to prawdą w sensie reguły, że zawsze tak jest - przykładem jest wybranie czegoś z listy rozwijalnej, które wywołuje _Change, ale już nie wywołuje _SelectionChange. Co tak na marginesie jest elementem jedynej znanej mi metody sprawdzenia czy lista walidacyjna na arkuszu została użyta. Ale temat sam w sobie ciekawy, i rozumiem, że dotyczy innych częstszych wariantów jak enter lub strzałka w bok przy wyjściu z trybu edycji. I faktycznie w tych sytuacjach trzeba podchodzić z ostrożniością do ciągu tych zdarzeń podobnie jak w Userformach- analizując ciąg zdarzeń powiązanych i podobnie: z użyciem flagi monitorującej zapobiegającej zdarzeniom niechcianym. |
_________________ 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. |
Ostatnio zmieniony przez Rafał B. 19-10-2020, 14:16, w całości zmieniany 1 raz |
|
 | ID posta:
393904
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2036 razy Posty: 6436
|
Wysłany: 19-10-2020, 14:12
|
|
|
Ja to jeszcze muszę dokładniej przetestować, bo wczoraj chyba się trochę pospieszyłem z tym tekstem. Muszę to jeszcze przetestować w różnych wersjach Excela i przy różnych sposobach zatwierdzania zmiany. Sprawa jest chyba bardziej złożona niż myślałem. |
|
 | ID posta:
393905
|
|
|
 |
|
|
Rafał B.
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 36 razy Posty: 255
|
Wysłany: 19-10-2020, 14:43
|
|
|
Mnie się wydaje, że dobrze to opisałeś (pomijając to zdanie o nierozerwalnej koincydencji zdarzeń). Może tylko dla lepszego zobrazowania, wyobrażenia co się dzieje i w jakiej kolejności do testów w Twoim pliku zamiast Enter zleciłbym raczej użycie strzałki w bok. SelectionChange wywołuje się dwukrotnie: raz przez akcję klawiatury (enter/ strzałka w dół), a drugi przez kod - metodę .Activate. Jedyne co tu może być dla niektórych dziwne, to kolejność, którą właśnie dobrze opisałeś jako odwrotną do wyżej wymienionej: bo najpierw mamy wynikającą z .offset i .activate, a dopiero później z klawiatury. |
_________________ 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:
393907
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2036 razy Posty: 6436
|
Wysłany: 20-10-2020, 13:04
|
|
|
Trochę to jednak bardziej skomplikowane niż myślałem wcześniej. Rzecz w tym, że zmiany w komórce można zatwierdzać naciśnięciem klawisza (Enter, Tab, Strzałki i podobne), a można też myszką przez kliknięcie w pole Wpis (ten haczyk przed paskiem formuły). W tym drugim przypadku komórka wybrana się nie zmienia i nie generuje się zdarzenie SelectionChange towarzyszące zdarzeniu Change.
Natomiast po użyciu klawisza do zatwierdzenia zmiany zawsze generuje się towarzyszące zdarzenie SelectionChange, nawet jeśli de facto nie było zmiany komórki wybranej (można wyłączyć domyślną opcję przeniesienia zaznaczenia po naciśnięciu klawisza Enter).
Jeśli ktoś będzie korzystał wyłącznie z klawiatury do zatwierdzania zmian, to może korzystać ze sposobu opisanego powyżej. Jeśli ktoś będzie korzystał wyłącznie z pola Wpis, to powinien zrezygnować z tej dodatkowej zmiennej (flagi), bo jej użycie w tym przypadku może spowodować "zgubienie" jednej selekcji.
Jak to rozwiązać w ogólnym przypadku - nie wiem - bo nie wiem jak programowo w prosty sposób rozróżnić, czy wyjście z edycji (akceptacja) nastąpiło przez użycie klawiatury czy myszki.
Jak ktoś ma na to w miarę prostą receptę, to proszę o podpowiedź.
W wątku, który mnie zainspirował do napisania tych wywodów, użycie myszki było niemożliwe, bo twórca tamtego arkusza ukrył pasek formuły, a wraz z nim pole Wpis. Zatem pozostawało tylko użycie klawiatury. Ale przy pozostawieniu pełnej funkcjonalności arkusza problem istnieje. |
|
 | ID posta:
393938
|
|
|
 |
|
|
Rafał B.
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 36 razy Posty: 255
|
Wysłany: 20-10-2020, 15:21
|
|
|
Maciej Gonet napisał/a: | Natomiast po użyciu klawisza do zatwierdzenia zmiany zawsze generuje się towarzyszące zdarzenie SelectionChange, nawet jeśli de facto nie było zmiany komórki wybranej (można wyłączyć domyślną opcję przeniesienia zaznaczenia po naciśnięciu klawisza Enter). |
Zablokowałem cały arkusz (chroń arkusz), odblokowana jest jedna komórka. Po jej zmianie i Enterze nie uruchamia się makro SelectionChange. Office 2016 x64. Więc ten wielki kwantyfikator chyba na wyrost
SelectionChange.xlsm
|
Pobierz Plik ściągnięto 24 raz(y) 13.99 KB |
|
_________________ 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:
393941
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2036 razy Posty: 6436
|
Wysłany: 21-10-2020, 09:23
|
|
|
Nie analizowałem przypadku gdy arkusz jest chroniony. Przy jednej komórce odblokowanej dość trudno się pracuje. Więc to raczej "sztuka dla sztuki"
W ogóle przy chronionym arkuszu program zachowuje się trochę nietypowo. Gdy jest odblokowana więcej niż jedna komórka, niby można wyłączyć opcję "Przenieś zaznaczenie po naciśnięciu klawisza Enter", ale program zachowuje się tak jakby pamiętał poprzedni wariant opcji, to znaczy kierunek przenoszenia, jaki był wcześniej ustawiony i jeszcze do tego trochę inaczej obsługuje warianty "w lewo" i "w górę", a inaczej "w prawo" i "w dół".
Generalny wniosek jest taki, że wszystkie rozwiązania trzeba dokładnie testować w warunkach, w jakich mają być użyte, bo trudno przewidzieć wszystkie możliwe kombinacje ustawień i wersji programu. |
|
 | ID posta:
393957
|
|
|
 |
|
|
Rafał B.
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 36 razy Posty: 255
|
Wysłany: 21-10-2020, 09:57
|
|
|
Napisałem na szybko taki kod, pewnie trzeba poprawić obsługę błędów, ale wydaje się faktycznie rozróżniać czy nastąpiła zmiana selekcji. Użycie to oczywiscie przekopiowanie całego kodu do kodu arkusza, a właściwe makro nalezy podmienić w onSelectionChange. Ale pewnie wydajność może ucierpieć, wiec lepiej logikę programu inaczej poprawadzić...
Kod: | Option Explicit
Private Type TChange
Changed As Boolean
Range As Range
End Type
Private ChangeEvent As TChange
' -------------------------------------------------------//
Private Sub Worksheet_Change(ByVal Target As Range)
' set the flag
With ChangeEvent
.Changed = True
Set .Range = Target
End With
End Sub
' -------------------------------------------------------//
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' check if proceed
On Error GoTo RunMacro 'or check if .Range is not nothing
With ChangeEvent
If .Changed And Target.Address = .Range.Address Then
.Changed = False
Exit Sub
End If
End With
RunMacro:
Err.Clear
On Error GoTo OnExit
onSelectionChange rng:=Target
OnExit:
' set the flag back
ChangeEvent.Changed = False
End Sub
' -------------------------------------------------------//
Private Sub onSelectionChange(ByVal rng As Range)
' here's main macro on selection event
' better place this outside worksheet module
Debug.Print rng.Address
MsgBox "selection changed!"
End Sub
' -------------------------------------------------------// |
|
_________________ 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:
393964
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2036 razy Posty: 6436
|
Wysłany: 24-10-2020, 22:27
|
|
|
Dziękuję za kod przesłany przez Rafała B., ale nie potrafię go zastosować w omawianym przypadku. Przypomnę, że chodzi o to, by w przypadku gdy w toku obsługi zdarzenia Change wystąpi zmiana komórki aktywnej, to żeby ta zmiana została obsłużona przez zdarzenie SelectionChange, natomiast należy zignorować w takim przypadku zdarzenie SelectionChange związane z zatwierdzeniem zmiany w komórce. Wszystkie inne kombinacje zdarzeń powinny być obsługiwane normalnie zarówno przy użyciu klawiatury, jak i myszki.
Jedyne rozwiązanie jakie udało mi się znaleźć wykorzystuje odczyt czasu (a więc i kolejności) wykonywania poszczególnych procedur. Mam nadzieję, że to będzie działać poprawnie.
W załączniku w Arkuszu1 wersja podstawowa bez żadnych modyfikacji jako ilustracja problemu.
W Arkuszu2 moja nieudana próba implementacji kodu Rafała B.
W Arkuszu3 wariant z odczytem czasu.
Change_SelChange_RB.xlsm
|
Pobierz Plik ściągnięto 17 raz(y) 21.21 KB |
|
|
 | ID posta:
394119
|
|
|
 |
|
|
umiejead
Excel Expert

Wersja: Win Office 2013
Pomógł: 776 razy Posty: 4183
|
Wysłany: 25-10-2020, 01:11
|
|
|
Dziękuję za kod przesłany przez Rafała B., ale nie potrafię go zastosować w omawianym przypadku.
Przypomnę, że: chodzi o to, by w przypadku gdy w toku obsługi zdarzenia Change wystąpi zmiana komórki aktywnej, to żeby ta zmiana została obsłużona przez zdarzenie SelectionChange, natomiast należy zignorować w takim przypadku zdarzenie SelectionChange związane z zatwierdzeniem zmiany w komórce.
Wszystkie inne kombinacje zdarzeń powinny być obsługiwane normalnie zarówno przy użyciu klawiatury, jak i myszki.
Jedyne rozwiązanie jakie udało mi się znaleźć wykorzystuje odczyt czasu (a więc i kolejności) wykonywania poszczególnych procedur. Mam nadzieję, że to będzie działać poprawnie.
Załączniki:
W załączniku w Arkuszu1 wersja podstawowa bez żadnych modyfikacji jako ilustracja problemu.
W Arkuszu2 moja nieudana próba implementacji kodu Rafała B.
W Arkuszu3 wariant z odczytem czasu.
---
Edit:
Pisane "jednym tchem".. heh....
(ciut poprawiłem).
umiejead
. |
_________________ .
Jak poprawnie opisać problem: http://www.excelforum.pl/...ika-vt59262.htm
Chcesz precyzyjną odpowiedź - zadaj precyzyjne pytanie. |
|
 | ID posta:
394122
|
|
|
 |
|
|
Rafał B.
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 36 razy Posty: 255
|
Wysłany: 26-10-2020, 18:16
|
|
|
Sprytne i proste to rozwiązanie z Timerem Oczywiście wymagałoby dodatkowych zabezpieczeń np. przed resetem o północy, ale to wiadomo.
Natomiast mój powyższy kod dotyczył jedynie prawdziwego rozpoznania zmiany selekcji (np. odporny na "fake" po Enterze, opisany przez Ciebie). Co do samego zadania opisanego w otwierającym wątku i w ostatniej wiadomości, to można też użyć dwóch flag. Z góry mówię, że dla większej czytelności rozwiązanie jest dla jednej komórki; dla większego zmienianego zakresu wymagana jest odpowiednia adaptacja. Wprowadziłem też enuma, chociaż wystarczy zwykła zmienna boolean- również dla większej czytelności.
Kod: | Option Explicit
Private ForceSkipOnSelection As Boolean
Private ChangeEvent As NChangeEvent
Private Enum NChangeEvent
WithSelectionChange
NoSelectionChange
End Enum
' ------------------------------------------------------------------//
Private Sub Worksheet_Change(ByVal Target As Range)
' set event status
ChangeEvent = VBA.IIf(Selection.Address = Target.Address, _
NoSelectionChange, WithSelectionChange)
' main event macro run
onChange Target
' set the flag
ForceSkipOnSelection = True
End Sub
' ------------------------------------------------------------------//
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' check if proceed
If ChangeEvent = WithSelectionChange Then
If ForceSkipOnSelection Then
ForceSkipOnSelection = False
Exit Sub
End If
Else
ForceSkipOnSelection = False
End If
' main event macro run
onSelectionChange Target
End Sub
' ------------------------------------------------------------------//
Private Sub onChange(ByVal CRng As Range)
Debug.Print CRng.Address
MsgBox "Zmiana " & CRng.Address
CRng.Offset(2).Activate
End Sub
' ------------------------------------------------------------------//
Private Sub onSelectionChange(ByVal SRng As Range)
Debug.Print SRng.Address
MsgBox "Selekcja " & SRng.Address
End Sub
' ------------------------------------------------------------------// |
Kod więc jak widać jest kopią Twojego kodu z otwierającego posta w tym wątku, z dodaną kolejną flagą rozpoznającą zmianę selekcji wynikającej z zatwierdzenia klawiaturą- przy czym jest ona ustawiana tym razem w samym zdarzeniu _Change zamiast w _SelectionChange. Pozdrawiam! |
_________________ 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:
394168
|
|
|
 |
|
|
Rafał B.
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 36 razy Posty: 255
|
Wysłany: 27-10-2020, 08:26
|
|
|
Poddaję się, bardziej eleganckiego rozwiązania jednak nie znajdę niż z Timerem od Macieja Gonet. Moje powyższe nie jest niezawodne i nie rozwiązuje problemu. Z pewnością zachowanie Excela w tym zakresie można to uznać za bug od Microsoftu (skoro wymaga takich rozwiązań). Jak teraz szukałem w Internecie, to bug ten znany w dość wąskim kręgu ale od bardzo dawna.
Pozwolę sobie na trochę prostszy skrótowy opis problemu, temat w trakcie po części ewoluował:
Możemy wyróżnić:
-edycję komórki z zatwierdzeniem przez zmianę zaznaczenia.
Przykład: wpisujemy coś w A1 i klikamy strzałkę w prawo.
Wyzwalają się zdarzenia _Change oraz _SelectionChange
-edycję komórki z pozostaniem w tej komórce tj. bez zmiany zaznaczenia.
I tutaj już mamy dwa warianty zachowania VBA:
a) wpisujemy coś w A1 i klikamy znak √ przy pasku formuły.
Wyzwala się zdarzenie _Change
Wszystko intuicyjnie. Ale tutaj przechodzimy w końcu do absurdu:
b) odznaczamy w opcjach zaawansowanych "Przenieś zaznaczenie po naciśnięciu Enter".
Zmieniamy A1, klikamy Enter. Dalej zaznaczoną mamy komórkę A1.
Wyzwoliły się jednak oba zdarzenia _Change oraz _SelectionChange.
W początkowej fazie Maciej Gonet sugerował, że może to mieć związek z użyciem myszy/klawiatury do zatwierdzenia edycji komórki, więc można szukać rozwiązania pod tym kątem. Jednak przedstawiony w wątku przykład z zablokowaniem arkusza pokazał, że Enter ustawiony na brak zmiany zaznaczenia może zachowywać się dwojako - mimo braku zmiany zaznaczenia w zależności od kontekstu wywołać _SelectionChange, a raz nie.
Reasumując: dlatego nie możemy zastosować żadnej flagi, gdy chcemy uniknąć automatycznego zdarzenia _SelectionChange po zmianie zawartości komórki, bo istnieje ryzyko (najczęściej w wyniku znaku zatwierdzania √), że zgubimy zdarzenie _SelectionChange konieczne do naszej obsługi, niezwiązane z ostatnim zdarzeniem _Change.
Bardzo ciekawy temat, dzięki! Jeszcze taka uwaga na marginesie: skala nieznajomości tego błędu mimo wielu lat praktyki w VBA pokazuje, że praktycznie nikt nie korzysta z √ do zatwierdzania edycji komórki... Swoją drogą ciekawe jaką te ikonki w pasku formuły ×,√,ƒx mają fachową nazwę. |
_________________ 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:
394182
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2036 razy Posty: 6436
|
Wysłany: 27-10-2020, 10:59
|
|
|
Dziękuję za podsumowanie tematu. Ja też myślałem nad tym w sobotę przez kilka godzin i nic mądrzejszego od Timera nie wymyśliłem.
Problemem jest nie tyle moment ustawienia flagi, ile moment jej zdjęcia.
A co do tych ikonek
Rafał B. napisał/a: | Swoją drogą ciekawe jaką te ikonki w pasku formuły ×,√,ƒx mają fachową nazwę. | Po najechaniu na ikonkę Excel wyświetla takie nazwy (kolejno):
Anuluj, Wpis, Wstaw funkcję, a po angielsku: Cancel, Enter, Insert Function. |
|
 | ID posta:
394185
|
|
|
 |
|
|
Rafał B.
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 36 razy Posty: 255
|
Wysłany: 30-10-2020, 13:59
|
|
|
Mimo wszystko odświeżę, bo nie daje mi spokoju poszukiwanie "prawilnego" rozwiązania...
Spróbowałem użyć obiektu monitorującego z WithEvents przechwytującego zdarzenia arkusza. Jakbyś mógł w wolnej chwili sprawdzić czy to rozwiązanie wyczerpuje założenia, dzięki! Przykład poglądowy dla jednego arkusza.
moduł klasy
WorksheetEventHandler
Kod: | Option Explicit
Private WithEvents MySheet As Worksheet ' Worksheet to monitor
Private Type TEventsDetails
ShouldContinue As Boolean
' Target on _Change event
RangeAfterConfirm As Range
' Flag is _Change event is active
ChangeRunning As Boolean
End Type
Private this As TEventsDetails
' ---------------------------------------------------------------------//
Public Sub SetSheet(ByVal ws As Worksheet)
Set MySheet = ws
End Sub
' ---------------------------------------------------------------------//
Private Sub MySheet_Change(ByVal Target As Range)
' event occured
Set this.RangeAfterConfirm = Selection
this.ChangeRunning = True
' run change macro
onChange targetRange:=Target
' event finished
this.ChangeRunning = False
End Sub
' ---------------------------------------------------------------------//
Private Sub MySheet_SelectionChange(ByVal Target As Range)
' test 1
this.ShouldContinue = this.ChangeRunning
' test 2
If Not this.RangeAfterConfirm Is Nothing Then
this.ShouldContinue = _
Target.Address <> this.RangeAfterConfirm.Address
Else
this.ShouldContinue = True
End If
' reset range
If Not this.ChangeRunning Then _
Set this.RangeAfterConfirm = Nothing
' check if macro proceed
If Not this.ShouldContinue Then Exit Sub
' run selection change macro
onSelectionChange targetRange:=Target
End Sub
' ---------------------------------------------------------------------//
|
zwykły moduł
Module1
Kod: | Option Explicit
Private ChangeEventMonitor As WorksheetEventHandler
Public Sub onWorkbookOpen()
' Set object to handle _Change /_SelectionChange worksheets event
Set ChangeEventMonitor = New WorksheetEventHandler
ChangeEventMonitor.SetSheet ws:=Arkusz1
End Sub
' ---------------------------------------------------------------------//
Public Sub onSelectionChange(targetRange As Range)
MsgBox "Selekcja: " & VBA.Replace(targetRange.Address, "$", vbNullString)
End Sub
' ---------------------------------------------------------------------//
Public Sub onChange(targetRange As Range)
MsgBox "Zmiana: " & VBA.Replace(targetRange.Address, "$", vbNullString)
targetRange.Offset(2, 0).Select
End Sub
' ---------------------------------------------------------------------//
|
Zauważyłem, że ilekroć myślę nad tym problemem, to po 20 minutach wszystko mi się zaczyna plątać...
Event_kolejnyTest2.xlsb
|
Pobierz Plik ściągnięto 19 raz(y) 20.53 KB |
|
_________________ 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:
394340
|
|
|
 |
|
|
Rafał B.
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 36 razy Posty: 255
|
Wysłany: 30-10-2020, 14:48
|
|
|
Szkoda, że tylko 30 minut tutaj na forum jest na edycję. Coś tam jednak działa niestabilnie w tym rozwiązaniu, pomyślę jeszcze przez weekend. |
_________________ 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:
394342
|
|
|
 |
|
|
|
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
|