Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Ograniczone nadpisywanie komórek w Excel

marshalm 19 Feb 2013 18:06 4815 15
  • #1
    marshalm
    Level 9  
    Witam,
    Szukałem już w innych tematach i w wyszukiwarce, jednak nie potrafiłem znaleźć na ten konkretnie temat.

    Chodzi mi tutaj o możliwość wyłączenia automatycznego nadpisywania komórek w Excel 2007. Dokładnie mówiąc o opcję, która powoduje, iż jeśli ustawimy się na danym polu i rozpoczniemy pisanie na klawiaturze, excel automatycznie wykasuje wprowadzone tam wcześniej dane i wprowadza nowe. Jednak w moim przypadku grozi to nieumyślną utratą danych. Wolałbym mieć wyłączoną tą opcję, ale jednocześnie móc korzystać z opcji F2, poprzez którą wskazujemy manualnie, iż chcemy edytować daną komórkę.
    Czy jest możliwość rozgraniczenia tych dwóch opcji i zablokowania jednej z nich?
  • #2
    Nemonek
    Level 27  
    Schematycznie widziałbym to tak:
    - zablokować arkusz z możliwością edycji z poziomu VBA
    - zrobić prostą formę z oknem tekstowym i dwoma przyciskami [Ok] i [Anuluj]
    - utworzyć makro wywołujące tą formę, przypisać wybrany skrót klawiaturowy, przy wywołaniu wczytuje się zawartość zaznaczonej komórki do okna tekstowego, tam następuje edycja, później zapis do zaznaczonej komórki lub jego porzucenie i zamknięcie formy
  • #3
    marshalm
    Level 9  
    A jakiegoś prostszego sposobu bez tworzenia makr? Bo tak defacto nawet to OK, Anuluj nie musiałoby być.
  • #4
    marshalm
    Level 9  
    mam rozumieć, że to wszystko na co mogę liczyć z odpowiedzi?
  • Helpful post
    #5
    Maciej Gonet
    VBA, Excel specialist
    Aby ochronić komórki przed przypadkowym nadpisaniem ich zawartości trzeba wykorzystać mechanizm ochrony arkusza oraz przedefiniować czasowo funkcję klawisza F2. Najpierw musimy zdecydować, które komórki mają być objęte ochroną. Domyślnie blokowane są wszystkie komórki, ale blokada jest nieaktywna dopóki nie włączymy ochrony arkusza. Blokowanie i odblokowywanie komórek jest możliwe tylko przy wyłączonej ochronie arkusza. Aby odblokować komórki należy je zaznaczyć i wybrać Narzędzia główne/Komórki/Format, następnie kliknąć pole Zablokuj komórki (to wygląda trochę dziwnie, ale to pole działa jak przełącznik, niestety opis pozostaje bez zmian; kiedyś w starych wersjach Excela było tu pole wyboru i miało to sens, potem po usunięciu pola wyboru nie zadbano o zmianę opisu zależnie od kontekstu). Jeśli po zmianie statusu blokady zapomnimy, które komórki są blokowane, a które nie, można to sprawdzić stosując dłuższą sekwencję Narzędzia główne/Komórki/Format/Formatuj komórki, zakładka Ochrona i tu mamy dwa pola wyboru Zablokuj i Ukryj, których aktualny stan jest widoczny. Zaznaczenie pola Ukryj powoduje, że po włączeniu ochrony arkusza zawartość komórki będzie niewidoczna w polu edycji.
    Gdy już odblokujemy komórki, które nie mają być chronione można przystąpić do organizowania ochrony. Wymaga to otwarcia okna edytora VBA (Alt+F11). W module ogólnego przeznaczenia (w nowo otwartym skoroszycie trzeba go wstawić przez Insert/Module) należy wpisać procedurę:

    Code: basic4gl
    Log in, to see the code


    Trzeba jeszcze zdefiniować dwie procedury obsługi zdarzeń. W kodzie "Ten skoroszyt" należy zdefiniować procedurę Workbook_Open:

    Code: basic4gl
    Log in, to see the code

    Ta procedura zmienia znaczenie klawisza F2, wiążąc z nim procedurę "Odblok".
    Kolejna procedura definiuje obsługę zdarzenia Worksheet_Change, które występuje po zakończeniu edycji w komórce. Tę procedurę należy zdefiniować w kodzie arkusza, który ma być objęty ochroną. Jeśli trzeba chronić kilka arkuszy należy tę definicję powtórzyć w kodzie każdego arkusza.

    Code: basic4gl
    Log in, to see the code

    Po wpisaniu tych procedur należy skoroszyt zapisać, zamknąć i ponownie otworzyć. Komórki, które były odblokowane mogą być edytowane bez ograniczeń. Komórki zablokowane nie mogą być nadpisane (także gdy były puste), natomiast edycja jest możliwa po naciśnięciu klawisza F2.
    Opis, który podałem sprawdziłem w Excelu 2007, ale powinno działać we wszystkich wersjach. W wersji 2003 i wcześniejszych dojście do poszczególnych opcji jest nieco inne, ale wszystkie są dostępne.
  • #6
    marshalm
    Level 9  
    Nie wiem skąd to wiesz, ale jesteś genialny:) Pomogło i efekt zgodny z oczekiwaniem:)
    W końcu moge spokojnie pracować na arkuszu nie obawiając się utraty efektów mojej pracy.

    Pozdrawiam i oczywiście łapka w górę!:)

    Dodano po 9 [minuty]:

    a jest możliwe dodanie do tego procedury, która umożliwi przeszukiwanie dokumentu?
  • #7
    Maciej Gonet
    VBA, Excel specialist
    Dzień dobry,
    Cieszę się, że porada okazała się skuteczna.
    Nie mam żadnej "wiedzy tajemnej" w sprawie Excela. Wszystko co zaproponowałem jest opisane w oficjalnej dokumentacji (helpie), tyle że w różnych miejscach i nie zawsze precyzyjnie, więc trzeba zawsze sprawdzić skuteczność rozwiązania. W tym przypadku też musiałem sprawdzić kilka wariantów, zanim wybrałem ten najbardziej odpowiedni.
    Co do pytania o przeszukiwanie dokumentu, jest ono bardzo nieprecyzyjne, więc mogę tylko odpowiedzieć, że generalnie tak, ale trzeba wiedzieć dokładnie czego się szuka, gdzie się szuka i co zrobić z tym co się znajdzie.
    Pozdrawiam i życzę owocnej pracy z Excelem.
  • #8
    marshalm
    Level 9  
    no ja przeszukiwałem, ale było to o tyle nieskuteczne, że nie wiedziałem czego tak dokładnie szukać, dlatego tym bardziej dziekuje za pomoc:)
    odnośnie wyszukiwania to załóżmy, że chce wyszukiwać zawartości poszególnych komórek, które są wartościami tekstowymi. Mówiąc kolokwialnie, chce użyć funkcji wyszukiwania (Ctrl+F) i po wpisaniu słowa, odnaleźć komrókę, w któej się znajduje.
  • #9
    Maciej Gonet
    VBA, Excel specialist
    Dzień dobry,
    Dalej nie rozumiem, o co chodzi. Kombinacja Ctrl+F działa i może służyć do wyszukiwania. Co Pan chce zmienić w jej funkcjonowaniu, albo co z nią jest nie tak?
    Pozdrawiam
  • #10
    marshalm
    Level 9  
    no właśnie po wprowadzeniu opisanych powyżej kodów w VBA, Ctrl+F nie działa, a przynajmiej u mnie;)
  • #11
    Maciej Gonet
    VBA, Excel specialist
    Dzień dobry,
    U mnie działa, może to jakiś szczegół związany z wersją Excela. Proszę napisać którą wersję Excela Pan używa, ewentualnie załączyć ten Pana plik. Ja mój sprawdziłem teraz w wresji 2010 i działa.
    Pozdrowienia
  • #12
    marshalm
    Level 9  
    2007, ale już widzę różnicę bo u mnie chcą kliknąc w pole nic się nie dzieje, dopiero po kliknięciu F2, a u Pana można klikać i wybierać, a dopiero edycja jest możliwa po F2, gdzieś musiałem się pomylić. Przejrzę to jeszcze raz;)
  • #13
    Maciej Gonet
    VBA, Excel specialist
    Dzień dobry,
    Prawdopodobnie w opcjach ochrony arkusza ma Pan wyłączone opcje zaznaczania komórek. Powinno pozostać ustawienie standardowe, to znaczy w Narzędzia główne/Komórki/Format/Chroń arkusz/Pozwól użytkownikom tego skoroszytu na Zaznaczanie zablokowanych i odblokowanych komórek. Te dwie pierwsze pozycje powinny pozostać zaznaczone.
    Powodzenia
  • #14
    marshalm
    Level 9  
    Ale zaznaczenie tej opcji powoduje niwelacje działań poczynionych prędzej, czyli pomimo iż niby arkusz jest chroniony, można dowolnie zmieniać wartość komórki. Po kliknięciu F2 można używać funkcji Ctrl+F
  • #15
    Maciej Gonet
    VBA, Excel specialist
    Proszę zrobić tak jak w pliku, który przesłałem wczesniej jako załącznik. Moim zdaniem wszystko tam działa tak jak Pan oczekiwał. Edycja jest możliwa tylko po naciśnięciu F2, ale Ctrl+F działa bo jest możliwe zaznaczanie komórek, zarówno blokowanych jak i nie. Jeżeli otworzy Pan nowy arkusz, wprowadzi do niego zmiany, które zaproponowałem i nic innego nie będzie Pan zmieniał, to powinno działać.