Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel - Użycie klawisza ENTER kieruje kursor do konkretnej komórki

kostom 09 Kwi 2014 21:01 4035 14
  • #1 09 Kwi 2014 21:01
    kostom
    Poziom 10  

    Witam;
    czy istnieje możliwość aby po wciśnięciu klawisza enter kursor znalazł się w konkretnej komórce? Problem wziął się z stąd iż zamierzam stworzyć arkusz pomiarowy do którego dane będą wczytywane z zewnętrznych źródeł (mikromierz, suwmiarka, waga, itp.). Obecnie użycie przycisku "DATA" (równoznaczne z wpisem wartości do komórki i użycie klawisza ENTER) na suwmiarce podłączonej do komputera przez port USB powoduje wczytanie wartości zmierzonej i przejście do komórki poniżej. Mnie interesuje następująca sytuacja: kursor w komórce A3 wpisanie danych i wciśnięcie klawisza ENTER powodujące przejście do A4. Jeśli kursor jest w A4 to wpisujemy dane i wciskamy klawisz ENTER co powoduje przeniesienie kursora do B6. Jeśli kursor jest w B6 to wpisujemy dane i naciskamy ENTER co powoduje przejście do komórki C7 itd.

    0 14
  • #2 09 Kwi 2014 22:39
    adamas_nt
    Moderator Programowanie

    Niezbyt dokładnie opisane... Co znaczy "itd"?
    Pierwsza myśl - Application.OnKey
    W kod arkusza wklej

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    W module
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Dla pewności w Thisworkbook
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #3 10 Kwi 2014 03:18
    Maciej Gonet
    Poziom 31  

    Nie bardzo mogę się doszukać logiki w sekwencji komórek, do których ma być wykonany zapis. Jeżeli jest to określona sekwencja obejmująca znaną wcześniej liczbę komórek, to dość prostym rozwiązaniem jest odblokowanie tych komórek, a następnie włączenie ochrony arkusza z zezwoleniem na zaznaczenie tylko odblokowanych komórek. Naciskanie klawisza Enter będzie wówczas powodować przejście do następnej odblokowanej komórki. Należy pamiętać, że po otwarciu pustego arkusza wszystkie komórki są domyślnie zablokowane (ale blokada nie jest aktywna, dopóki nie jest włączona ochrona arkusza). Żeby odblokować wybrane komórki należy je zaznaczyć (po kolei lub wszystkie naraz) i wybrać opcję Format/Zablokuj komórkę. Wydaje się to nielogiczne, ale tak to wymyślili twórcy Excela, że ta opcja działa jak przełącznik, ale jej opis pozostaje niezmienny (w bardzo starych wersjach Excela było tam pole wyboru, ale potem zabrakło na nie miejsca). Potem należy zaznaczyć Chroń arkusz (tu już jest zgodnie z logiką, bo opis tej opcji zmienia się) i pozostawić zaznaczoną tylko opcję "Zaznaczanie odblokowanych komórek".
    Ta metoda ma jednak ograniczenie: kolejność przechodzenia od komórki do komórki nie może być dowolna - domyślnie kursor przesuwa się w dół, a potem w prawo. W opcjach Excela można zmienić kierunek przechodzenia na w prawo, a potem w dół. Gdy przytrzymamy wciśnięty klawisz Shift kursor "cofa się". Innych możliwości już nie ma.
    Pozdrowienia.

    0
  • #4 11 Kwi 2014 20:22
    kostom
    Poziom 10  

    Dzięki Maciej Gonet, człowiek czasami szuka rozwiązania naokoło a ono jest obok. To jest to czego potrzebowałem w najprostszym nie skomplikowanym wydaniu.
    Skoro tak dobrze poszło mam jeszcze jeden problem. Mam tabelę w Excelu udostępnioną dla kilku użytkowników, gdzie każdy z nich wpisuje dane w kolejnych wierszach. Czy istnieje możliwość po wpisaniu danych do wiersza tabeli aby inni i również osoba która dokonała wpisu nie mogli w późniejszym czasie tych danych zmieniać?

    0
  • Pomocny post
    #5 12 Kwi 2014 02:25
    Maciej Gonet
    Poziom 31  

    Rozumiem, że chodzi o zabezpieczenie przed przypadkową modyfikacją wpisu, a nie o jakieś "superzabezpieczenie" przed działaniem złośliwym, bo to drugie w przypadku Excela jest raczej niewykonalne.
    Ponadto niezbyt jasne jest sformułowanie o wypełnianiu kolejnych wierszy. W którym momencie miałaby być wprowadzana ochrona?
    Na razie moja najprostsza propozycja wprowadzałaby ochronę każdej komórki poddawanej edycji (czyli każdej, do której coś wprowadzono lub tylko otwarto do edycji i zamknięto przez Enter).
    Należy zaznaczyć cały arkusz (klikając w lewym górnym rogu w polu na przecięciu nagłówków wierszy i kolumn) lub zakres tabeli, w którym będą wprowadzane dane. Z menu wybieramy Format/Zablokuj komórkę, aby odblokować zaznaczone komórki. Następnie włączamy ochronę arkusza Format/Chroń arkusz (ustawienia domyślne).
    Blokada komórek po wprowadzeniu danych może być zrealizowana przez obsługę zdarzenia Change. W tym celu przechodzimy do edytora VBA (Alt+F11) i w kodzie arkusza, w którym będą wprowadzane dane wprowadzamy kod:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    To jest najprostszy wariant bez żadnych haseł ani innych komplikacji.
    Normalnie po wprowadzeniu danych do komórki w chronionym zakresie i po zatwierdzeniu przez Enter próba ponownego przywołania komórki do edycji spowoduje wyświetlenie komunikatu o blokadzie.
    Oczywiście można ręcznie wyłączyć ochronę (Format/Nie chroń arkusza) i poddać edycji dowolną komórkę, więc mechanizm chroni tylko przed przypadkową zmianą zawartości komórek, a nie przed działaniem zamierzonym.
    Proszę sprawdzić, czy to będzie działać przy edycji przez kilka osób i ewentualnie wprowadzić modyfikacje, bo ja nie mam możliwości przetestowania tego w środowisku wielodostępnym.
    Pozdrowienia

    0
  • #6 13 Kwi 2014 15:35
    kostom
    Poziom 10  

    Ponownie dziękuję Maciej Gonet o takie rozwiązanie mi chodziło. VBA praktycznie nie znam, za wyjątkiem prostych makr na zasadzie rejestracji wykonywanych czynności. Nie zamykam tematu, gdyż jestem w trakcie realizacji arkusza danych pomiarowych w laboratorium i pewnie jakieś problemy się jeszcze pojawią.

    0
  • #7 14 Kwi 2014 12:32
    kostom
    Poziom 10  

    I pojawiło się jeszcze jedno pytanie do ostatniego problemu, jak będzie wyglądał kod gdy będę chciał blokować określony zakres komórek, a nie wszystkie w arkuszu (na przykład wszystkie komórki w kolumnie "C")?

    0
  • #8 14 Kwi 2014 14:04
    Maciej Gonet
    Poziom 31  

    Proszę dokładniej opisać sytuację.
    Dane będą wprowadzane do różnych komórek, ale tylko te z kolumny C mają być blokowane po wprowadzeniu danych, czy dane będą wprowadzane tylko do kolumny C, a inne komórki mają być cały czas zablokowane, czy jeszcze jakiś inny wariant?

    0
  • #9 14 Kwi 2014 20:02
    kostom
    Poziom 10  

    Dane będą wprowadzane do różnych komórek, ale tylko te z kolumny "C" mają być blokowane.
    Dzięki poznanej funkcjonalności myśląc trochę przyszłościowo mam pytanie czy jest również możliwość zastosowania kodu do zakresu komórek np. A1:B10?

    0
  • Pomocny post
    #10 14 Kwi 2014 22:39
    Maciej Gonet
    Poziom 31  

    Dzień dobry,
    Rozwiązanie można oprzeć na dwóch procedurach obsługi zdarzeń. Pierwsza procedura będzie wykonywana przy aktywacji arkusza i będzie przygotowywać arkusz do ochrony. Wykonuje ona następujące operacje:
    1) wyłącza obsługę błędów (dot. p. 4)
    2) zdejmuje ochronę arkusza (jeśli nie było ochrony nic nie zmienia),
    3) zdejmuje blokadę wszystkich komórek,
    4) włącza blokadę komórek w wybranym zakresie np. Range("C:C"), Range("A1:B10"), ale tylko w odniesieniu do komórek, które zawierają stałe,
    5) włącza ochronę arkusza.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Druga procedura będzie wykonywana przy zmianie zawartości komórki.
    Procedura ta sprawdza, czy komórka zmieniana znajduje się w monitorowanym zakresie, jeżeli nie - następuje wyjście z procedury.
    Jeżeli komórka jest w monitorowanym zakresie wyłączana jest ochrona arkusza, komórka jest blokowana, a w końcu ponownie włączana jest blokada arkusza.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Mam nadzieję, że to spełni Pana wymagania.

    0
  • #11 15 Kwi 2014 10:53
    kostom
    Poziom 10  

    Dziękuję Panie Macieju, bardzo mi Pan pomógł.

    0
  • #12 01 Mar 2015 21:15
    kostom
    Poziom 10  

    Mam następujący problem, otóż w pracy w kilku różnych lokalizacjach (serwer, inny komputer udostępniony w sieci) znajdują się pliki z których codziennie korzystam do tego dochodzą aplikacje ERP z których muszę wyciągnąć interesujące mnie dane z różnych podraportów. W przypadku plików sieciowych poradziłem sobie wykorzystując jeden folder z skrótami lub arkusz excela z hiperłączami, natomiast pojawia się problem właśnie z programami typu ERP, gdzie dane umiejscowione są w odpowiednim raporcie. Czy istnieje możliwość stworzenia makra, które uruchomiłoby aplikację (login + hasło), a następnie uruchomiło interesujący mnie raport w drzewie menu tej aplikacji?

    0
  • #13 01 Mar 2015 21:41
    JRV
    Specjalista - VBA, Excel

    Witaj
    Jeśli to wszystko można zrobić bez użycia myszki, tylko klawiatury, a następnie użyć AppActivate i SendKeys

    0
  • #14 02 Mar 2015 20:26
    kostom
    Poziom 10  

    Nie jestem fachowcem w tej dziedzinie dlatego proszę o przykład.

    0
  • #15 02 Mar 2015 20:55
    JRV
    Specjalista - VBA, Excel

    Dlatego proszę o przykład, które klawiszy powinny być Naciśnij żeby kursor został w "Logowanie"? np. - F10(menu) - Podwójna strzałka w prawo - Tab - strzałka w dol.
    I jaka nazwa tej "aplikacje ERP " w tytule okna? np. "ERProg - Sesja 2"
    W tej sytuacji to:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0